[Python-Dev] NaN / Infinity in Python

Josiah Carlson jcarlson at uci.edu
Thu Jun 7 20:46:57 CEST 2007

Armin Ronacher <armin.ronacher at active-4.com> wrote:
> It's one of those "non issues" but there are still some situations where you
> have to deal with Infinity and NaN, even in Python. Basically one the problems
> is that the repr of floating point numbers is platform depending and sometimes
> yields "nan" which is not evaluable. It's true that eval() is probably a bad
> thing but there are some libraries that use repr/%r for code generation and it
> could happen that they produce erroneous code because of that. Also there is no
> way to get the Infinity and NaN values and also no way to test if they exist.
> Maybe changing the repr of `nan` to `math.NaN` and `inf` to `math.Infinity` as
> well as `-inf` to `(-math.Infinity)` and add that code to the math module (of
> course as a C implementation, there are even macros for testing for NaN values)::

That would work for eval(repr(x)), but it fails for float(repr(x)).  I
believe this particular issue has been brought up before, as well as the
particular solution, but I can't remember the final outcome.

>     Infinity = 1e10000

Has the storage of infinity in .pyc files been fixed?  For a while it
was broken.

>     NaN = Infinity / Infinity
>     def is_nan(x):
>         return type(x) is float and x != x
>     def is_finite(x):
>         return x != Infinity

you mean

    def is_finite(x):
        return x not in (Infinity, -Infinity)

 - Josiah

More information about the Python-Dev mailing list