# [Python-ideas] Suggestion: Extend integers to include iNaN

Sun Sep 30 11:31:36 EDT 2018

```
On 30/09/2018 16:26, David Mertz wrote:
> On Sun, Sep 30, 2018 at 11:17 AM Steve Barnes <gadgetsteve at live.co.uk
>
>     Note that my statements above had a single = i.e.
>     float(NaNAwareInt('nan')) produces float('nan'), etc., as does:
>
>     In [42]: nan = decimal.Decimal('nan')
>     In [43]: decimal.Decimal(nan)
>     Out[43]: Decimal('NaN')
>     In [44]: float(nan)
>     Out[44]: nan
>
>
> I think this explanation is still a little confusing.  I take it what
> you're getting at is that a "NaN" of any particular type (float,
> Decimal, complex, NanAwareInt) should be a perfectly good initializer to
> create a NaN of a different type using its constructor.
>
> I think that is sensible (not sure about complex).  Currently we have:
>
>      >>> complex(nan)
>     (nan+0j)
>      >>> float(complex('nan'))
>     Traceback (most recent call last):
>        File "<ipython-input-39-069ef735716e>", line 1, in <module>
>          float(complex('nan'))
>     TypeError: can't convert complex to float
>
>      >>> complex(float('nan'))
>     (nan+0j)
>      >>> float(complex('nan'))
>     Traceback (most recent call last):
>        File "<ipython-input-41-069ef735716e>", line 1, in <module>
>          float(complex('nan'))
>     TypeError: can't convert complex to float
>
>      >>> from decimal import Decimal
>      >>> Decimal('nan')
>     Decimal('NaN')
>      >>> float(Decimal('nan'))
>     nan
>      >>> Decimal(float('nan'))
>     Decimal('NaN')
>      >>> complex(Decimal('nan'))
>     (nan+0j)
>      >>> Decimal(complex('nan'))
>     Traceback (most recent call last):
>        File "<ipython-input-47-f48726d59102>", line 1, in <module>
>          Decimal(complex('nan'))
>     TypeError: conversion from complex to Decimal is not supported
>
>
> I don't think we can change the "cast-from-complex" behavior... even
> though I think it maybe should have been different from the start.
>
No complex can be converted to float without accessing either the real
or imag component.

In [51]: cn=complex(4, float('nan'))

In [52]: cn
Out[52]: (4+nanj)

In [53]: cn.real
Out[53]: 4.0

In [54]: cn.imag
Out[54]: nan

In [55]: float(cn.imag)
Out[55]: nan

--