Array and floating point

J

Jonathan Shan

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
 
Z

Zentrader

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
 
P

Peter Otten

Jonathan said:
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
 
R

Robert Kern

Jonathan said:
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
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top