Ich kann Python nicht dazu bringen, die Subtraktion 1 - 0.8 korrekt auszuführen und zuzuweisen. Es kommt immer wieder auf die falsche Antwort, 0.19999999999999996.
Ich habe ein wenig erforscht:
%Vor%und festgestellt, dass dieser Fehler mit einer etwas zufälligen Gruppe der Gleitkommazahlen zwischen 0 und 1 bis zur dritten Dezimalstelle passiert. Ein ähnlicher Fehler tritt auch auf, wenn Sie diese Floats quadrieren, aber zu einer anderen Teilmenge.
Ich hoffe auf eine Erklärung dafür und wie man Python dazu bringt, die Arithmetik richtig zu machen. Die Verwendung von round(x,3)
ist der Work-around, den ich gerade nutze, aber es ist nicht elegant.
Danke!
Dies ist eine Sitzung in meiner Python 2.7.3 Shell:
%Vor%Hier ist der Code, den ich in ein paar Online-Dolmetscher eingegeben habe:
%Vor%und die Ausgabe:
%Vor%Fließende Zahlen funktionieren nicht so, wie Sie es erwarten.
Lesen Sie zunächst den Fließkomma-Leitfaden . Lange Rede, kurzer Sinn: Computer stellen Gleitkommazahlen als binär dar, und es stellt sich heraus, dass es nicht möglich ist, einen genauen Dezimalbruch als Binärwert zu speichern ( Probieren Sie es selbst aus auf dem Papier, um zu sehen, warum). Für praktische Zwecke ist 0,19999999999999996 "nahe genug" zu 0,2. Wenn Sie es als 0.2 drucken wollten, könnten Sie etwas tun wie:
%Vor%Was Sie sehen, ist also kein Fehler. Es ist erwartetes Verhalten.
Python-Speicher schweben mit "Bits", und einige Gleitkommazahlen können Sie nicht genau darstellen, egal wie viele Bits der Genauigkeit Sie haben. Dies ist das Problem, das Sie hier haben. Es ist so, als würde man versuchen, 1/3
in Dezimalzahlen mit einer begrenzten Anzahl von Dezimalstellen genau zu schreiben.
Tags und Links python subtraction arithmetic-expressions