Mögliche Duplizieren: - 0,8 und weisen Sie
Python rounding error with float numbers
python maths is wrongPython-Fehler in der grundlegenden Subtraktion?
Ich kann Python nicht richtig die Subtraktion 1 erhalten zu tun. Es kommt immer wieder auf die falsche Antwort, 0.19999999999999996.
erforschten I ein Bit:
sq = {}
sub = {}
for i in range(1000):
sq[str(i/1000.)+'**2']=((i/1000.)**2)
sub['1-'+str(i/1000.)]=(1.0-(i/1000.))
und entdecken, dass dieser Fehler mit einer etwas zufälligen Gruppe des Schwimmer zwischen 0 und 1 auf die dritte 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 Python die Rechenkünsten richtig machen. Die Verwendung von round(x,3)
ist das Workaround, das ich gerade benutze, aber es ist nicht elegant.
Danke!
Dies ist eine Sitzung in meinem Python 2.7.3 Shell:
*** Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32. ***
*** Remote Python engine is active ***
>>> 1-0.8
0.19999999999999996
>>> print 1-0.8
0.2
>>> a = 1-0.8
>>> a
0.19999999999999996
>>> print a
0.2
>>> a = 0.2
>>> print a
0.2
>>> a
0.2
>>>
Hier ist der Code, den ich in ein paar online gestellt Dolmetscher:
def doit():
d = {'a':1-0.8}
return d
print doit()
und die Ausgabe:
{'a': 0.19999999999999996}
Scheck http://www.yoda.arachsys.com/csharp/floatingpoint.html – avasal
http://effbot.org/pyfaq/why-are -floating-point-Berechnungen-so-ungenau.htm –