Frage

Was ist die tatsächliche Genauigkeit der langen Doppel auf Intel 64-Bit-Plattformen? ist es 80 Bit auf 128 oder tatsächlichen 128-Bit?

gepolstert

, wenn ehemaligen neben gmp geht, gibt es eine weitere Option, echte 128 Präzision zu erreichen?

War es hilfreich?

Lösung

x86-64 Präzision ist die gleiche wie regelmäßige x86. Erweiterte Doppel beträgt 80 Bits, die x87 ISA verwenden, mit 6 padding hinzugefügt Byte. Es gibt keine 128-Bit-FP-Hardware.

Eine Software-Implementierung von Quad oder erweiterten Quad Präzision könnte vom Nutzen x86-64 64x64 => 128 integer Multiplikationsbefehl, though.

Andere Tipps

würde ich empfehlen die Verwendung von MPFR . Es ist eine anspruchsvolle Mehr precision floating point-Bibliothek, die auf der Oberseite des GMP gebaut wird.

Es gibt eine gute Chance, dass es 64-Bit für beide (je nach Compiler und O), da die Compiler Skalar SSE2 statt x87 Anweisungen aussendet.

x86 unterstützt keine höhere Genauigkeit als 80 Bits, aber wenn Sie wirklich mehr als 64 Bits für einen FP-Algorithmus müssen höchstwahrscheinlich sollten Sie Ihre Numerik überprüfen, anstatt das Problem mit brutaler Gewalt zu lösen.

Es gibt ein paar Möglichkeiten.

  1. verwenden double-double Quad darzustellen. Zum Beispiel finden Sie unter http://www.codeproject.com/Articles/884606 / The-double-double-Typ . Allerdings ist der Typ nicht dem IEEE-Standard bestätigen. Sie können ihren Epsilon-Wert sagen, durch Inspektion weniger genau als IEEE-Standard 128-Bit-Schwimmer, die 1.926E-34 ist.
  2. verwenden wahr IEEE-Standard 128-Bit-Floats. Microsoft VC ++ Compiler bietet keine solche Art. Intel C ++ Compiler tut bietet eine Art _Quad, obwohl seine Umsetzung nicht vollständig ist (keine I / O-Operationen) zu diesem Zeitpunkt.
  3. verwendet Dritte Bibliothek. Ich habe vor kurzem eine Bibliothek namens double128 erstellt, die auf Intel C ++ _Quad basiert fügt aber hinzu, I / O-Operationen. Es arbeitet mit Microsoft VC ++. Sie können unter http://www.cg-inc.com/Product/Double128 weitere Informationen.

Ich empfehle den Boost-Wrapper über MPFR oder GMP:

Erhöhung 1,70: Anweisungen zur Kompilierung boost .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top