BigInteger in C?

Lesezeit: 3 Minuten

Benutzer-Avatar
Chris

Was ist der einfachste Weg, mit großen Zahlen in C umzugehen? Ich muss Werte in der Area speichern 1000^900oder in besser lesbarer Form 10^2700.

Kennt jemand eine einfache Möglichkeit, das zu tun? Jede Hilfe wäre wirklich willkommen!

  • @jww 1000^900 ist es nicht das groß. Meine beschissene Homebrew-Multipräzisionsbibliothek hat es ohne Schwierigkeiten berechnet, in kürzerer Zeit, als ich messen konnte. Es ist eine 8.970-Bit-Zahl, kaum ein Memory-Buster.

    – Steve Summit

    9. November 2019 um 21:25 Uhr

Benutzer-Avatar
kmkaplan

Verwenden libgmp:

GMP ist eine kostenlose Bibliothek für Arithmetik mit beliebiger Genauigkeit, die mit vorzeichenbehafteten Ganzzahlen, rationalen Zahlen und Gleitkommazahlen arbeitet. Es gibt keine praktischen Grenzen für die Genauigkeit, außer denen, die durch den verfügbaren Speicher in der Maschine impliziert werden, auf der GMP läuft …

Seit Version 6 wird GMP unter den dualen Lizenzen vertrieben, GNU-LGPL v3 und GNU GPL v2

Die Hauptzielplattformen von GMP sind Unix-Systeme wie GNU/Linux, Solaris, HP-UX, Mac OS X/Darwin, BSD, AIX usw. Es ist auch bekannt, dass es unter Windows sowohl in 32-Bit als auch in 64-Bit-Versionen funktioniert Bitmodus…

  • GMP kann Zahlen bis zu 1000^900 verarbeiten?

    – jww

    29. August 2017 um 17:57 Uhr

  • Ich habe es nicht getestet, aber es heißt: “Es gibt keine praktische Grenze für die Genauigkeit, außer denen, die durch den verfügbaren Speicher impliziert werden”. Eine schnelle Schätzung ist, dass 1000⁹⁰⁰ < 1024⁹⁰⁰, das heißt, es passt in weniger als 9000 Bits. Ich sehe keinen Grund, warum es gegen GMP verstoßen sollte.

    – kmkaplan

    31. August 2017 um 13:58 Uhr

Es gibt einige Bibliotheken, die Ihnen dabei helfen (beliebige Präzisionsmathematik):

Angenommen, dies hat nichts mit der Arbeit zu tun (dh Sie machen es zum Spaß oder es ist ein Hobby oder nur eine Gelegenheit, etwas zu lernen), ist das Codieren einer Bibliothek für beliebige Präzisionsmathematik ein relativ interessantes Projekt. Aber wenn Sie sich absolut darauf verlassen müssen und sich nicht für die Schrauben und Muttern interessieren, verwenden Sie einfach eine Bibliothek.

Es gibt eine Reihe von Bibliotheken für die Handhabung großer Zahlen. Benötigen Sie Integer- oder Fließkomma-Arithmetik?

Sie könnten sich den in Python integrierten Code für die Aufgabe ansehen.

Sie könnten sich die Erweiterungen für Perl für die Aufgabe ansehen.

Sie könnten sich den Code in OpenSSL für die Aufgabe ansehen.

Sie könnten sich die GNU MP (Multi-Precision)-Bibliothek ansehen – wie von kmkaplan erwähnt.

  • Was ist, wenn ich keine externe Bibliothek verwenden soll und nur GCC verwenden darf? Nun zum eigentlichen Lagern BIGINTs oder irgendwelche Berechnungen an ihnen durchführen, was muss ich tun?

    – phougatv

    21. Februar 2016 um 3:23 Uhr

  • Knuth lesen? Ich meine, TAOCP – The Art of Computer Programming (Volume 2, Semi-Numerical Algorithms; Abschnitt 4.3 Multiple-Precision Arithmetic trifft zu). Oder ein ähnliches Buch, das Arithmetik mit mehreren Genauigkeiten behandelt.

    – Jonathan Leffler

    21. Februar 2016 um 3:45 Uhr

Sie können auch die BIGNUMs von openssl ausprobieren, siehe https://www.openssl.org/docs/man1.0.2/man3/bn.html, https://www.openssl.org/docs/man1.1.1/man3/Konvertieren Sie eine als Zeichenfolge angegebene große Zahl in eine OpenSSL BIGNUM für Details.

1371540cookie-checkBigInteger in C?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy