[Numpy-discussion] Non-deterministic floating point behavior in numpy 1.5.1 ?
Grégory Guyomarc'h
gregory.guyomarch at gmail.com
Wed Jan 12 12:34:32 EST 2011
Hello,
I have noticed strange non-deterministic behaviours with numpy 1.5.1 when using
floating point arrays. The following script were run on 6 different machines,
all Intel Core i7:
- 3 of them running numpy 1.5.1 with either Python 2.7.1 (x86) or 2.5.2 (x86)
and,
- 3 of them running numpy 1.3 and Python 2.5.2.(x86).
import numpy
x = numpy.array([[0.00010876945607980702], [0.22568137594619658],
[5.6435218858623557]])
for i in range(10):
m = numpy.array([[36.0 * 36.0, 36.0, 1.0] for j in range(6)])
y = (numpy.dot(m, x) - 13.90901663) * 1000.0
print y[0]
The output on each machine running 1.5.1 are similar to this one:
[ 5.00486230e-06]
[ 5.00486408e-06]
[ 5.00486230e-06]
[ 5.00486408e-06]
[ 5.00486230e-06]
[ 5.00486408e-06]
[ 5.00486230e-06]
[ 5.00486408e-06]
[ 5.00486230e-06]
[ 5.00486408e-06]
I cannot make sense of the changes of the least significant digits across
different iterations of the for loop since its body is actually constant. Note
that this behavior is hard to reproduce: on some machines I had to insert dummy
print statements here and there to reproduce the bug or increase the number of
iterations or the length of the arrays inside the loop.
Also, I could not reproduce it with older versions of numpy such as 1.3. Is this
behavior expected ? Is there a way to make sure the results of a numpy floating
point computations remains the same for multiple runs ?
Thanks,
Gregory.
More information about the NumPy-Discussion
mailing list