Sehr große Zahlen abspeichern



  • Nun, ich habe eine kleine Funktion geschrieben, welche die Fakultät einer Zahl zurückgibt. Nun, sobald man ein wenig größere Werte eingibt, wird das Ergebnis leider größer als eine normale int, bzw. long-Variable speichern kann. Bisher hab ich das Problem umgangen, indem ich die Fakultät einfach als float abgespeichert habe, das funktionierte problemlos.
    Nur finde ich das ein wenig unschön und vor allem würde mich mal interessieren, ob sich sehr große Werte irgendwie auch als Ganzzahlen speichern lassen.
    Ist es denn möglich einen eigenen Integertyp mit einer Größe von beispielsweise 8 Bit anzulegen?



  • http://mattmccutchen.net/bigint/

    Damit kannst du größere Integerzahlen abspeichern, wie der Name schon sagt.



  • Vielen Dank, genau nach sowas habe ich gesucht.



  • Maks schrieb:

    Ist es denn möglich einen eigenen Integertyp mit einer Größe von beispielsweise 8 Bit anzulegen?

    brauchst du nicht, nimm char 😃



  • sothis_ schrieb:

    brauchst du nicht, nimm char 😃

    Ach verdammt, ich meinte natürlich Byte, nicht Bit. xD
    Ausserdem, wenn char schon reichen würde, wäre int int schon zu viel des guten. Deswegen suche ich ja auch einen Datentypen oder eine Klasse der/die mehr Daten fassen kann.
    Na ja, mit dem oben verlinkten BigInt bin ich fündig geworden, ausserdem wird dort in der README die gmp-library erwähnt, die scheint auch noch ganz interessant zu sein.


  • Administrator

    Alternativ für 8 Bytes könnte man auch long long , bzw. unsigned long long nehmen. Der Typ ist zwar aktuell noch nicht im Standard, wird aber im kommenden Standard enthalten sein. Zudem unterstützen ihn eigentlich alle gängigen Kompiler.

    Es gibt zwar keine Garantie, dass long long wirklich 8 Bytes sind, da der Standard nur sagt, dass der Typ grösser als ein int sein soll, aber auf die Art sind ja auch alle anderen Typen definiert. Meistens jedoch, wird long long wohl 8 Bytes gross sein, wie es jetzt schon bei vielen Kompilern der Fall ist.

    Edit:
    Kam mir gerade noch in den Sinn, dass Boost da auch eine Hilfe anbietet, falls man wirklich Kompilerunabhängig bleiben möchte:
    http://www.boost.org/doc/libs/1_37_0/libs/integer/integer.htm

    Grüssli



  • ja, GMP gibts auch, allerdings ist das eine C-lib und die kann man nicht so schön benutzen wie die bigint-lib (also da sind keine operatoren überladen usw). Es gibt sicherlich auch ein c++-interface dazu, aber keine ahnung.

    Was auch noch geht ist long long als Datentyp, dann hast du 8Byte zur verfügung,


Anmelden zum Antworten