Eventuali duplicati:
Python rounding error with float numbers
python maths is wrongErrore Python nella sottrazione di base?
non posso ottenere Python per fare correttamente la sottrazione 1-0,8 e assegnarlo. Continua a fornire la risposta errata, 0.19999999999999996.
ho esplorato un po ':
sq = {}
sub = {}
for i in range(1000):
sq[str(i/1000.)+'**2']=((i/1000.)**2)
sub['1-'+str(i/1000.)]=(1.0-(i/1000.))
e scoperto che questo errore si verifica con un gruppo alquanto casuale dei galleggianti tra 0 e 1 alla terza cifra decimale. Un errore simile si verifica anche quando si quadrano i float, ma in un sottoinsieme diverso.
Spero di avere una spiegazione di questo e di come fare in modo che Python esegua l'aritmetica. L'utilizzo di round(x,3)
è l'aggiramento che sto usando per ora, ma non è elegante.
Grazie!
Si tratta di una sessione nel mio 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
>>>
Ecco il codice che ho messo in un paio interpreti on-line:
def doit():
d = {'a':1-0.8}
return d
print doit()
e l'uscita:
{'a': 0.19999999999999996}
controllo http://www.yoda.arachsys.com/csharp/floatingpoint.html – avasal
http://effbot.org/pyfaq/why-are -calcoli a punto di virata-così-inaccurati.htm –