sehr große Ganzzahlen
-
Ich muss mit sehr großen Ganzzahlen rechnen, etwa im Bereich von 2^800 bis 2^2000. Gibts dafür eine bestimmte Klasse, oder wie kann ich mit solchen Zahlen arbeiten?
Danke.
-
Ja, es gibt Klassen für so große Zahlen. Es hängt aber auch stark davon ab, was Du damit machen willst. Wenn Du zum Beispiel nur modulo irgendeiner kleineren Zahl rechnen willst, dann kannst Du Dir den Aufwand und die Laufzeit sparen. Wenn Du aber wirklich in dieser Größenordnung exakt rechnen willst, dann wirst Du an solchen Klassen nicht vorbeikommen.
Google mal nach GMP, das ist zum Beispiel eine solche Bibliothek (gleich erster Treffer!)
MfG Jester
-
Jester schrieb:
Google mal nach GMP, das ist zum Beispiel eine solche Bibliothek (gleich erster Treffer!)
-
Hm, bei mir war's der erste
Hoffe der Fragende hat's trotzdem gefunden.
-
Oder gleich nach GNU Multiple Precision Arithmetic Library suchen :p
-
selber schreiben is aber cooler
-
muhkuhmasta schrieb:
selber schreiben is aber cooler
Wahnsinnig cool. Dauert ja auch nicht lange...
-
Danke für die Antworten. Ich werde mir die Bib im Laufe dieses Wochenendes mal genau zu Gemüte führen.
Ich würde mir natürlich eine Klasse am liebsten selbst schreiben, aber ich habe keine Idee, wie ich so etwas implementieren könnte.
-
Du mußt einfach nur an deine Grundschulzeit zurückdenken. Als man noch von Hand ohne Taschenrechner gerechnet hat. Du mußt jede Ziffer einzeln betrachten. Eine Ziffer kann in deiner Bib ein int sein, könnte aber auch ein char sein. Eine Zahl ist dann ganz einfach ein Array aus lauter 'Ziffern'.
Zumindest die Addition könntest Du zur Übung selbst programmieren.
Aus Effizienzgründen fasst man allerdings mehrere Ziffern zu einer Einheit zusammen. Man muß nur sicherstellen, daß das Ergebnis noch in einer 'Ziffer' Platz hat.
GMP ist für seeehr große Zahlen geeignet. Dann werden die Operationen in solche Blockgrößen geteilt, daß es immer schön in den Cache passt. Also z.B. 8000 Dezimalzifern pro Block