2017-09-04 15 views
0

Ich möchte eine Gleitkommavariable deklarieren, die signifikantere Stellen als die gebräuchlicheren Doppel- und Langdoppelwerte speichern kann, vorzugsweise so etwas wie ein Achtel (256 Bit), das (glaube ich) könnte etwa 70 signifikante Ziffern geben.Deklarieren einer Gleitkommazahl mit acht Gleitkommazahlen in C++

Wie deklariere ich eine solche Variable? Und wird plattformübergreifende Kompabilität ein Problem sein (im Gegensatz zu Ganzzahlen mit fester Breite)?

Jede Hilfe wird sehr geschätzt.

+3

Ja, es wird ein Problem sein, da kein solcher Datentyp im C++ - Standard angegeben ist. Es gibt "Bignum" -Bibliotheken, die Sie finden können, wenn Sie ein wenig suchen, und die es in einer portablen Weise behandeln können (zumindest für die Quelle und wenn die Serialisierung in Text). –

+0

Es ist äußerst unwahrscheinlich, dass Ihr Compiler Acht-Genauigkeit bietet. Es kann Quad-Genauigkeit mit einer unbequemen Syntax und einige der fehlenden Funktionen (emuliert in Software, https://stackoverflow.com/questions/5451447/quadruple-precision-in-c-gcc) bieten, aber es ist auch möglich, dass es tut es nicht. Wenn Sie bereit sind, eine externe Bibliothek zu verwenden, ist MPFR eine gute Wahl: http://www.mpfr.org –

+0

Es lohnt sich zu überdenken, ob Sie tatsächlich so viel Präzision benötigen: Praktisch alle Rechenaufgaben können mit * erheblich * weniger Genauigkeit ausgeführt werden . Einige Aufgaben, bei denen Probleme mit der arithmetischen Stabilität sehr kleiner Zahlen auftreten, können besser durch Arbeiten im Protokollbereich gelöst werden. Und schließlich könnte es besser sein, Ihre Berechnung auf Integer zu skalieren. –

Antwort

5

Der C++ - Standard schreibt Präzision bis einschließlich double vor; und die feineren Details dieses Gleitkomma-Schemas bleiben der Implementierung überlassen.

Eine IEEE754 Vierfachpräzision long double gibt Ihnen nur 36 signifikante Zahlen. Zum Zeitpunkt des Schreibens bin ich noch nie auf ein System gestoßen, das octuple precision implementiert.

Ihre beste Wette ist, etwas wie die GNU Multiple Precision Arithmetic Library zu verwenden, oder, wenn Sie wirklich binäre Fließkommazahl wünschen, The GNU Multiple Precision Floating Point Reliable Library.

+2

GMP liefert Ganzzahlen und Rationals. MPFR ist eine direktere Multi-Precision-Version von Gleitkommatypen. –