Die beste plattformübergreifende (portable) mathematische Bibliothek mit beliebiger Genauigkeit [geschlossen]

Ich bin auf der Suche nach einer guten mathematischen Bibliothek mit willkürlicher Genauigkeit in C oder C ++. Könnten Sie mir bitte einige Ratschläge / Vorschläge geben?

Die Hauptanforderungen:

ItMUS willkürlich große ganze Zahlen behandeln (mein Hauptinteresse gilt ganzen Zahlen). Wenn Sie nicht wissen, was das Wort willkürlich groß bedeutet, stellen Sie sich so etwas wie 100000 vor! (die Fakultät von 100000).Die Präzision MUSS NICHT BENÖTIGT WERDEN muss bei der Initialisierung der Bibliothek / Objekterstellung angegeben werden. Die Präzision sollteNU durch die verfügbaren Ressourcen des Systems eingeschränkt werden.ItSOLLT Die volle Leistung der Plattform nutzen und "kleine" Zahlen nativ handhaben. Das bedeutet, dass auf einer 64-Bit-Plattform für die Berechnung von 2 ^ 33 + 2 ^ 32 die verfügbaren 64-Bit-CPU-Anweisungen verwendet werden sollten. Die BibliothekSOLLTE NICH Berechnen Sie dies auf dieselbe Weise wie mit 2 ^ 66 + 2 ^ 65 auf derselben Plattform.ItMUS Handle-Addition (+), Subtraktion (-), Multiplikation (*), Ganzzahldivision (/), Rest (%), Potenz (**), Inkrement (++), Dekrement (-), gcd (), Fakultät () und andere gebräuchliche ganzzahlige arithmetische Berechnungen effizient. Die Fähigkeit, Funktionen wie sqrt () (Quadratwurzel), log () (Logarithmus) zu verarbeiten, die keine ganzzahligen Ergebnisse liefern, ist ein Plus. Fähigkeit, mit @ umzugehsymbolische Berechnungen ist noch besser.

Hier habe ich bisher gefunden:

Jav 's BigInteger und BigDecimal Klasse: Ich habe diese bisher verwendet. Ich habe den Quellcode gelesen, verstehe aber die Mathematik darunter nicht. Möglicherweise basiert es auf Theorien / Algorithmen, die ich noch nie gelernt habe. Der eingebaute Integer-Typ oder in den Kernbibliotheken von bc / Pytho / Rubi / Haskell / Lispel / Erlang / OCaml / PHP / einige andere Sprachen: Ich habe einige von diesen verwendet, aber ich habe keine Ahnung, welche Bibliothek sie verwenden oder welche Art von Implementierung sie verwenden.

Was ich schon gewusst habe:

Verwendung einerverkohle als Dezimalstelle und einverkohlen als Dezimalzeichenfolge und Berechnen der Ziffern mit einer for-Schleife.Mit einem int (oder einlong int, oder einlang Lan) als eine grundlegende "Einheit" und ein Array davon als eine beliebige lange Ganzzahl, und führen Sie Berechnungen für die Elemente mit einer for-Schleife durch.Verwenden Sie einen Integer-Typ, um eine Dezimalstelle (oder einige Stellen) als @ zu speicherBCD (binär codierte Dezimalzahl). Booth's Multiplikationsalgorithmus

Was ich nicht weiß:

Drucken Sie das oben erwähnte binäre Array in Dezimalzahlen, ohne naive Methoden zu verwenden. Beispiel einer naiven Methode: (1) Addiere die Bits vom niedrigsten zum höchsten: 1, 2, 4, 8, 16, 32, ... (2) benutze einverkohlen String, der oben erwähnt wurde, um die Zwischenergebnisse nach dem Komma zu speichern.

Was ich schätze:

Gute Vergleiche auf GMP, MPFR, decNumber (oder andere Bibliotheken, die Ihrer Meinung nach gut sind).Gute Vorschläge zu Büchern / Artikeln, die ich lesen sollte. Zum Beispiel eine Illustration mit Zahlen darüber, wie ein un-naiv Binär-zu-Dezimal-Konvertierungsalgorithmus funktioniert gut. Der Artikel "Binär-zu-Dezimal-Konvertierung in begrenzter Genauigkeit" von Douglas W. Jones ist ein Beispiel für einen guten Artikel.Irgendeine Hilfe

BitteUNTERLASSEN SI Beantworte diese Frage, wenn:

Sie denken mit einemdoppel (oder einlanges doppeltes, oder einlanges langes Doppel) kann dieses Problem leicht lösen. Wenn Sie das glauben, bedeutet dies, dass Sie das zur Diskussion stehende Problem nicht verstehen.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage