[Python-ideas] Fwd: Make `float('inf') //1 == float('inf')`

Case Van Horsen casevh at gmail.com
Thu Sep 18 19:27:52 CEST 2014


On Thu, Sep 18, 2014 at 8:20 AM, Ian Cordasco
<graffatcolmingov at gmail.com> wrote:
> On Thu, Sep 18, 2014 at 9:09 AM, Petr Viktorin <encukou at gmail.com> wrote:
>> On Thu, Sep 18, 2014 at 3:38 PM, Ian Cordasco
>> <graffatcolmingov at gmail.com> wrote:
>>>
>>> On Sep 18, 2014 2:31 AM, "Petr Viktorin" <encukou at gmail.com> wrote:
>>>>
>>>> For the record, this gives inf in Numpy.
>>>>
>>>> >>> import numpy
>>>> >>> numpy.array(float('inf')) // 1
>>>> inf
>>>>
>>>> AFAIK this and http://bugs.python.org/issue22198 are the only
>>>> differences from Python floats, at least on my machine.
>>>
>>> That's an interesting bug report and it's significantly different
>>> (mathematically speaking) from the discussion here. That aside, I have to
>>> wonder if numpy has its own way of representing infinity and how that
>>> behaves. I still maintain that it's least surprising for float('inf') // 1
>>> to be NaN. You're trying to satisfy float('inf') = mod + 1 * y and in this
>>> case mod and y are both indeterminate (because this is basically a
>>> nonsensical equation).
>>
>> Well, in `x = y // a`, as y tends towards infinity, x will also tend
>> towards infinity, though in discrete steps. Yes, you get an
>> indeterminate value, but one that's larger than any real number.
>
> Sorry? If you've studied mathematics you'd know there's no discrete
> value that is the same as infinity. I'm not even sure how anyone could
> begin define floor(infinity). Infinity is not present in any discrete
> set. Yes float('inf') / 1 should be float('inf'), no one is arguing
> that. That's easily shown through limits. floor(float('inf') / 1) has
> no intrinsic meaning. Discrete sets such as the naturals, integers,
> and rationals are all "countably infinite" but there's no bijective
> mapping between them and the real numbers (and therefore, no such
> mapping to the complex numbers) because the are uncountably infinite
> real numbers.
>
> I understand that intuitively float('inf') // 1 being equal to
> infinity is nice, but it is inherently undefined. We don't really have
> the concept of undefined so NaN seems most acceptable.
>
>> Are any Numpy developers around? Is there a reason it has different
>> behavior from Python?
>
> I expect because of np.array semantics it is different. I'm not sure
> if it's intentional or if it's a bug, but I'm curious as well.

The ISO C99/C11 (Annex F) (and POSIX and IEEE-754) standards define
a function called "roundToIntegralTowardsNegative". For the special value
+Inf, it specifies a return value of +Inf.

However, the integral value returned is still an IEEE-754 formatted value
and can return +Inf. PEP-3141 changed the behavior of math.floor() (and
__floor__ in general) to return an actual integer. That makes it impossible
to comply with ISO etc. standards.
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/


More information about the Python-ideas mailing list