Question about floating point

Rob Gaddi rgaddi at highlandtechnology.invalid
Tue Aug 28 13:03:59 EDT 2018


On 08/28/2018 07:11 AM, Frank Millman wrote:
> Hi all
> 
> I know about this gotcha -
> 
>>>> x = 1.1 + 2.2
>>>> x
> 3.3000000000000003
> 
> According to the docs, the reason is that "numbers like 1.1 and 2.2 do 
> not have exact representations in binary floating point."
> 
> So when I do this -
> 
>>>> y = 3.3
>>>> y
> 3.3
> 
> what exactly is happening? What is 'y' at this point?
> 
> Or if I do this -
> 
>>>> z = (1.1 + 2.2) * 10 / 10
>>>> z
> 3.3
> 
> What makes it different from the first example?
> 
> Thanks
> 
> Frank Millman
> 

https://en.wikipedia.org/wiki/IEEE_754

Python uses what the C folks call doubles, and what IEEE calls a 
binary64.  If you look down at the precision chart, you'll see that for 
a value V, you have precision limits on the order of (V * 1e-16).  If 
you strip off the 3.3 that you wanted from the result that you got, your 
error there is 3e-16, and all that's rounded for display, so all you can 
really talk about is order of magnitude.

-- 
Rob Gaddi, Highland Technology -- www.highlandtechnology.com
Email address domain is currently out of order.  See above to fix.



More information about the Python-list mailing list