Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

float('nan')==1 -> True

0 views
Skip to first unread message

Pearu Peterson

unread,
Oct 19, 2002, 12:41:18 PM10/19/02
to

Hi,

I've noticed that

float('nan')==float_obj

always returns True whatever is the value of float_obj in Python 1.5.2,
2.0.1, 2.1.3, 2.2.1.
I would have expected False for all float values because Undefined (that
should be the result of nan==float_obj) is closer to False than True,
IMHO.

I wonder what is the rationale behind this behaviour? Or is it a bug?

Pearu

Tim Peters

unread,
Oct 19, 2002, 3:20:29 PM10/19/02
to
[Pearu Peterson]

No rationale, and neither bug nor feature: Python knows nothing about NaNs,
and whatever happens on your platform is an accident composed of what kind
of code your C compiler generates, and what your C libraries happen to do.
Python doesn't define any behavior relative to IEEE-754 gimmicks, mostly
because C89 doesn't either, and nobody has cared to endure the pain of
trying to #ifdef their way out of this mess. On my platform,

>>> float('nan')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: invalid literal for float(): nan
>>>

My platform C's strtod() doesn't know what to do with that string; looks
like yours does. Also,

>>> inf = 1e400

That this worked is an accident.

>>> inf
1.#INF

That it displays this particulr string is an accident.

>>> nan = inf - inf

That this worked is an accident.

>>> nan
-1.#IND

That it displays this particulr string is an accident.

>>> nan == 1.0
False

Ditto.

>>> nan == nan
False

Not only an accident, but this one even differs across Python releases on
this platform.

so-if-you-really-really-want-false-upgrade-to-windows<wink>-ly y'rs - tim


0 new messages