Große Zahlen!
-
Hallo!
Wenn ich sehr hohe Zahlen (mit Berechnung durch if-schleife) ausgeben möchte, dann erscheint immer inf. Wie kann ich das beheben? in php geht das mit der bibliothek bcmath, aber wie es mit C++ funktioniert weiß ich leider nicht. Ich hoffe das ist kein allzu breitgetretenes Thema, aber ich find leider dazu nix....
THX!
-
Such mal nach GMP bei google
-
-
YASC schrieb:
Such mal nach GMP bei google
Hab des installiert. Am besten poste ich mal den code:
#include<iostream> #include<gmp.h> using namespace std; int main (){ cout << "Kasterl eingeben!" << endl; int kasterl ; cin >> kasterl; float nummer = 0.5; for (int i = 1 ; i <= kasterl ; i++){ nummer = nummer * 2; if (i == kasterl) cout << "Reiskörner auf Feld " << kasterl << ": " << nummer << endl; } }
Is ja ganz simpel eigendlich....
-
Dann nimms aber auch her und nicht die normalen floats.
-
YASC schrieb:
Dann nimms aber auch her und nicht die normalen floats.
heehe ich bemüh ja google, aber ich bin wohl der einzige der sowas machen will auf gottes erdboden *g*. Wie benutze ich des denn? Die GMP Homepage ist ja extrem spartanisch ausgefallen und ich bin etwas c++ unerfahren...
-
audacia
-
#include<iostream> using namespace std; int main (){ cout << "Kasterl eingeben!" << endl; int kasterl ; cin >> kasterl; long long nummer = 1; //kann leider nur bis zum 63. feld richtig anzeigen... for (int i = 0; i < kasterl-1; i++) nummer *= 2; cout << "Reiskoerner auf Feld " << kasterl << ": " << nummer << endl; cin.get(); cin.get(); return 0; }
-
Mit float bzw. double sollte sich doch ein annehmbarer Wertebereich realisieren lassen. Ab welcher Anzahl Felder gibt es denn Probleme?
-
Warum denn float oder double? Das ist doch Quatsch. Oder willst Du auch Bruchteile von Reiskörnern zählen?
-
was ist double? ^^ Float deswegen weil number zu beginn 0.5 sein muss. Nach dem ersten durchlauf der schleife, also bei kästchen 1 ist dann auch nummer 1....
P.S.: Mit float gehts bis 128. aber ich würd eine millionen begrüßen, auch wenns so ein schachbrett nicht gibt ^^
-
double ist wie float ein Fließkommatyp, nur genauer. Wenn du genaue Werte für unbeschränkte Wertebereiche willst, dann musst du wohl gmp nehmen. Btw, was genau hast du denn hier nicht verstanden? Um mal leechs Beispiel mit GMP zu zeigen... Ist aber nicht getestet, weil ich GMP grad nicht auf meinem Laptop installiert habe.
#include<iostream> #include <gmpxx.h> using namespace std; int main (){ cout << "Kasterl eingeben!" << endl; int kasterl ; cin >> kasterl; mpz_class nummer = 1; for (int i = 0; i < kasterl-1; i++) nummer *= 2; cout << "Reiskoerner auf Feld " << kasterl << ": " << nummer << endl; cin.get(); cin.get(); return 0; }
TomasRiker: Fließkomma deswegen, weil Integer für diese Aufgabe einen zu eingeschränkten Wertebereich haben. So hat man zumindest bis zu einer gewissen Größenordnung ein Ergebnis (wenn auch ein u.U. ungenaues).
-
Hallo Pigeon,
was ist eine grosse Zahl???
(Long) integer (je nach Compiler, 16/32 Bit) ist die grösste Zahl ca. 2,147 Mrd.
Float hat einen Zahlenvorrat bis 10^38, aber nur 6 Stellen, double einen bis 10^308 mit 15 Stellen und long double einen bis 10^4096(?) und 18/19 Stellen.
Es gibt aber noch Speziallösungen (von Mathematikern) mit Klassen für extrem grosse Zahlen - wie zB. Pi mit ca. 1 Mrd Stellen. Dazu gibt es ein Taschenbuch aus dem UTB - Name habe ich nicht hier am REchner.Ich hoffe es hilft
Gruss Jerry