Sorry, ein paar Teile dieser Frage. Ich muss Berechnungen mit sehr genauer Genauigkeit durchführen.Excel-Berechnung vs. Python und dezimale Verwendung
Ich spiele mit Decimal in Python und versuche, die Berechnungen zu überprüfen. Ich glaube, um die tatsächliche Nummer zu verwenden, müssen Sie die Nummer als Zeichenfolge rechts haben? Ich führe den folgenden Code aus.
1) Für A habe ich es als float, und B ich habe es als String. Ich bekomme verschiedene Zahlen, wenn ich sie quadriere, ist das wegen der Gleitkommaarithmetik? Ist B ** 2 richtiger?
2) Bei der letzten Druckanweisung versuche ich, die Quadratwurzel zu bekommen, aber am Ende mit einer TypeError: unsupported operand type(s) for ** or pow(): 'Decimal' and 'float'
. Warum das?
3) Schließlich, wenn ich versuche, 100.0897463 quadriert in Excel zu überprüfen, bekomme ich eine Antwort von 10017.95731439840000000000. Liegt der Unterschied nur an der Rundung? Was ist eine effektive Methode zur Überprüfung von Fließkomma-Berechnungen, wenn nicht durch etwas wie Excel?
A = decimal.Decimal(100.0897463)
B = decimal.Decimal('100.0897463')
print A ** 2
print B ** 2
print B ** .5
Ruft mich diese Zahlen,
10017.95731439836401246854725
10017.95731439836369
Interessant ist, wenn ich den Code wie folgt ausführen, bekomme ich genau die gleichen Zahlen für beide, und sie auch nicht von den Ergebnissen Drucken ohne die Dezimalgenauigkeit. Warum sollte das sein?
print "%.20f" % A ** 2
print "%.20f" % B ** 2
Ergebnisse in:
10017.95731439836345089134
10017.95731439836345089134
Die Verwendung von Excel zur Überprüfung von Python-Berechnungen ist eine schlechte Idee, da es eine eigene proprietäre Dezimalrundung hat, die von IEEE-Standards abweicht (wenn auch nur geringfügig). Beachten Sie, dass Sie den Dezimalpunkt immer vergessen und '1000897463 ** 2' als Integer berechnen können (mit der Angabe' 1001795731439836369'). Das wird keinen Rundungsfehler haben. –