# [Python-ideas] math.inf and math.nan constants

Stephen J. Turnbull stephen at xemacs.org
Mon Jan 12 17:05:41 CET 2015

```Chris Barker - NOAA Federal writes:

> > But it's not a singleton, not even in the class of NaNs.  It's a named
> > constant, like zero or pi.
>
> Right, it's a particular value of a float -- more that that, it's a
> bunch if values, so even less a singleton than pi, even.

AFAIK, the proposed math.nan is *not* a bunch of values.  It's a
particular float value that happens to be a NaN, just as math.pi is a
particular float value that happens not to be a NaN.  The use cases
are very different, however.  math.pi is used when you want a value
that is a close IEEE 754 float approximation to mathematical pi in
concrete computations, while math.nan is used when you want a value
that "takes you out" of the world of concrete computation and can be
interpreted as an "error value".  IEEE 754 provides a huge number of
NaN values but only defines that "error value" role for them (AIUI,
actually four such roles, the combinations of positive vs negative and
signaling vs quiet).

> >> math.isnan(x)
> >
> > In Python we spell [the operator form of] that "isinstance", not "is".
>
> Except that nan is not a type.

True, "NaN" is not a type currently implemented in Python, but it
could be a subtype of float.  I imagine getting the Python class
definition right would be a bit fiddly and not at all useful, though.
Compare the "bool" type as a subtype of "int".

> In way, it's like how there are two bit patterns for the value 0.0 in
> floats (-0.0 and 0.0).

As far as "typeness" goes, that analogy is exact.  Both "Zero" and
"NaN" are (non-singleton) subtypes of (IEEE 754) float.  You could say
that "Pi" is a singleton containing only math.pi, too, but that's not
very useful as a description.

```