Velocity Reviews > Array and floating point

# Array and floating point

Jonathan Shan
Guest
Posts: n/a

 08-17-2007
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

Guest
Posts: n/a

 08-17-2007
On Aug 17, 2:06 pm, Jonathan Shan <(E-Mail Removed)> 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

Peter Otten
Guest
Posts: n/a

 08-17-2007
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

Robert Kern
Guest
Posts: n/a

 08-17-2007
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
an underlying truth."
-- Umberto Eco