[Numpy-discussion] Floating point question
Robert Kern
robert.kern@gmail....
Mon Mar 2 14:48:09 CST 2009
On Mon, Mar 2, 2009 at 14:37, Gideon Simpson <simpson@math.toronto.edu> wrote:
> I recently discovered that for 8 byte floating point numbers, my
> fortran compilers (gfortran 4.2 and ifort 11.0) on an OS X core 2 duo
> machine believe the smallest number 2.220507...E-308. I presume that
> my C compilers have similar results.
>
> I then discovered that the smallest floating point number in python
> 2.5 is 4.9065...E-324. I have been using numpy to generate data,
> saving it with savetxt, and then reading it in as ASCII into my
> fortran code. Recently, it crapped out on something because it didn't
> like reading it a number that small, though it is apparently perfectly
> acceptable to python.
>
> My two questions are:
>
> 1. What is the best way to handle this? Is it just to add a filter
> of the form
>
> u = u * ( np.abs(u) > 2.3 e-308)
You can get the precise value from finfo:
In [2]: from numpy import finfo
In [3]: f = finfo(float64)
In [4]: f.tiny
Out[4]: array(2.2250738585072014e-308)
I'd probably do something like this:
u[abs(u) < f.tiny] = 0.0
> 2. What gives? What's the origin of this (perceived) inconsistency
> in floating points across languages within the same platform?
4.9065...E-324 is a denormalized float.
http://en.wikipedia.org/wiki/Denormal_number
--
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
More information about the Numpy-discussion
mailing list