Decimals not equalling themselves (e.g. 0.2 = 0.2000000001)

Diez B. Roggisch deets at nospam.web.de
Sun Aug 3 16:50:22 CEST 2008


CNiall schrieb:
> I am very new to Python (I started learning it just yesterday), but I 
> have encountered a problem.
> 
> I want to make a simple script that calculates the n-th root of a given 
> number (e.g. 4th root of 625--obviously five, but it's just an example 
> :P), and because there is no nth-root function in Python I will do this 
> with something like x**(1/n).
> 
> However, with some, but not all, decimals, they do not seem to 'equal 
> themselves'. This is probably a bad way of expressing what I mean, so 
> I'll give an example:
>  >>> 0.5
> 0.5
>  >>> 0.25
> 0.25
>  >>> 0.125
> 0.125
>  >>> 0.2
> 0.20000000000000001
>  >>> 0.33
> 0.33000000000000002
> 
> As you can see, the last two decimals are very slightly inaccurate. 
> However, it appears that when n in 1/n is a power of two, the decimal 
> does not get 'thrown off'. How might I make Python recognise 0.2 as 0.2 
> and not 0.20000000000000001?
> 
> This discrepancy is very minor, but it makes the whole n-th root 
> calculator inaccurate. :\

Welcome to the wonderful world of IEEE754. Just because other languages 
shield you from the gory details they still are there. Python chose to 
not do that, instead showing the rounding errors introduced and making 
the developer decide how to deal with these.

http://pyfaq.infogami.com/why-are-floating-point-calculations-so-inaccurate

Diez




More information about the Python-list mailing list