Multiplizieren Sie Doubles in Python mit der gleichen Genauigkeit wie C++

Multiplizieren Sie Doubles in Python mit der gleichen Genauigkeit wie C++


Ich schreibe ein C++-Programm in Python um. Ich muss 2 Doubles multiplizieren, aber C++ und Python liefern nicht das gleiche Ergebnis. Hier ist ein Beispiel mit 'fest codierten' Werten:


C++


printf("%f", ( 44474025505478620106407223274000875520.0 * 5454277033526873088.0 ) );
>>> 242573655903020442240866171189072992939998568974355791872.0

Python


print("%f" % ( 44474025505478620106407223274000875520.0 * 5454277033526873088.0 ) )
>>> 242573655903020398684723205308949669628048817708024725504.0

Mein Problem ist, dass ich nicht das genaueste Ergebnis brauche:Ich muss (mit Python) ein Ergebnis bekommen, das dem Ergebnis von C++ so nahe wie möglich kommt.


In meinem Beispiel sind die ersten 15 Ziffern gleich:


C++ > 242573655903020[442240866171189072992939998568974355791872.0
Py > 242573655903020[398684723205308949669628048817708024725504.0

Ich brauche ein noch engeres Ergebnis (18 erste Ziffern wären schön)


Ich stecke hier wirklich fest... Hat jemand eine Idee?


FYI :


Python-Version:2.7.8


C++-Compiler:cl.exe (der von Visual Studio)


Antworten:


Verwenden Sie die Bibliothek decimal , nehmen Sie Ihr Snippet als Beispiel:


from decimal import Decimal
print("%f" % ( Decimal("44474025505478620106407223274000875520.0") * Decimal("5454277033526873088.0") ) )

Es ergibt 242573655903020442240866171189072992939998568974355791872.000000 was genau dem in C angegebenen Ergebnis entspricht .