7

Gibt es eine Kompilierzeitbibliothek (Vorlage Metaprogrammierung) für Arithmetik mit beliebiger Genauigkeit in C++?C++ - Kompilierzeit Bignum-Bibliothek

Ich brauche dies, um in meinem Programm für AVR-Mikrocontroller mit Festkommaarithmetik und Binärskalierung zu helfen. Wenn beispielsweise zwei Zahlen mit jeweils eigenen Grenzen multipliziert werden, werden die Bignums dazu verwendet, die Grenzen des Ergebnisses zu berechnen und den Bruchpunkt in den Eingaben und/oder Ausgaben entsprechend zu verschieben. Die Grenzen des Ergebnisses sind in den normalen Integer-Typen möglicherweise nicht darstellbar.

+0

Was meinen Sie mit "Vorlage Metaprogrammierung"? "BigInteger" -Typ-Bibliotheken verwenden praktisch immer dynamische Speicherzuweisung. Andernfalls können Sie nur einen größeren Typ verwenden (d. H. Signed int64 für die Multiplikation zweier int32-Zeichen) – DarkWanderer

+2

@DarkWanderer Ich meine, ja, Vorlage Metaprogrammierung. Dieser Link sollte Ihnen eine Idee geben, wie bignums zur Kompilierzeit implementiert werden könnte: http://alpmetan.wordpress.com/2009/12/03/functional-compile-time-templates-based-type-lists-in-c/ . Im Wesentlichen wäre ein Kompilierungszeit-Bignum ein (rekursiver) Typ, und der Compiler würde sich mit der Speicherzuweisung befassen. –

+0

@DarkWanderer Ein großer Integer-Typ reicht nicht aus - mein Problem ist, dass man sich mit den Grenzen der Typen zur Kompilierzeit beschäftigt, und ich brauche Kompilierzeit-Checks in der Art von "A + B INT64_MIN ". Kompilierzeit-Bignums würden ermöglichen, dass diese "direkt" geschrieben werden können, ohne sich um Integer-Überläufe kümmern zu müssen. –

Antwort

1

Möglicherweise Boost.Multiprecision ist was du suchst.

+0

Die Dokumentation legt fest "Sie werden jedoch nicht in der Lage sein, Kompilierungszeitarithmetik für solche Typen durchzuführen". –