Array and floating point

Discussion in 'Python' started by Jonathan Shan, Aug 17, 2007.

1. Jonathan ShanGuest

Hello,

I'm experiencing a problem where the float being appended to the array
is not the same as the result of the appending.

>>> from array import *
>>> x = array('f')
>>> x.append(float("0.1"))
>>> x[0]

0.10000000149011612
>>> float("0.1")

0.10000000000000001

I'm expecting x[0] = 0.10000000000000001

Thanks
Jonathan Shan

Jonathan Shan, Aug 17, 2007

On Aug 17, 2:06 pm, Jonathan Shan <> wrote:
> Hello,
>
> I'm experiencing a problem where the float being appended to the array
> is not the same as the result of the appending.
>
> >>> from array import *
> >>> x = array('f')
> >>> x.append(float("0.1"))
> >>> x[0]

> 0.10000000149011612
> >>> float("0.1")

>
> 0.10000000000000001
>
> I'm expecting x[0] = 0.10000000000000001
>
> Thanks
> Jonathan Shan

Floating point precision problems on x86 type machines is well
documented on the web if you want to know more about it. For your
example use Python's decimal class instead of floating point. Gmpy is
also available for scientific type apps,
http://docs.python.org/lib/module-decimal.html
http://pydoc.org/2.4.1/decimal.html
http://gmpy.sourceforge.net/
import decimal
x = decimal.Decimal( "0.1" )
print x
y = decimal.Decimal( "0.10000000000000001" )
print y
print y/x
print y*x

3. Peter OttenGuest

Jonathan Shan wrote:

> Hello,
>
> I'm experiencing a problem where the float being appended to the array
> is not the same as the result of the appending.
>
>>>> from array import *
>>>> x = array('f')
>>>> x.append(float("0.1"))
>>>> x[0]

> 0.10000000149011612
>>>> float("0.1")

> 0.10000000000000001
>
> I'm expecting x[0] = 0.10000000000000001

array("f") is an array of C floats while Python's float type is a double in
C terms. That's why you lose some precision. Try array("d") instead:

>>> from array import array
>>> x = array("d")
>>> x.append(0.1)
>>> x[0]

0.10000000000000001

Peter

Peter Otten, Aug 17, 2007
4. Robert KernGuest

Jonathan Shan wrote:
> Hello,
>
> I'm experiencing a problem where the float being appended to the array
> is not the same as the result of the appending.
>
>>>> from array import *
>>>> x = array('f')
>>>> x.append(float("0.1"))
>>>> x[0]

> 0.10000000149011612
>>>> float("0.1")

> 0.10000000000000001
>
> I'm expecting x[0] = 0.10000000000000001

'f' denotes a single-precision floating point number. Python's float objects are
double-precision floating point numbers. Use 'd' instead.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma