Terry, that doesn't really answer the question "why", it just pushes it back to the documentation. Is there a real answer why? Why return NaN when Inf would make mathematical sense?
On Wednesday, September 17, 2014 4:13:38 AM UTC+3, Terry Reedy wrote: > On 9/16/2014 5:40 PM, cool-RR wrote: > > > While debugging my code I found that the bug was because I assumed > > > that something like `divmod(float('inf'), 1)` would be equal to > > > `(float('inf'), float('nan'))`, while Python returns `(float('nan'), > > > float('nan'))`. Why does Python make the division result be NaN in > > > this case? `float('inf') / 1` is still `float('inf')`. > > > > For integers, divmod(x, y) is defined as (x // y, x % y) == ((x - x%y) > > // y, x % y) == ((x - x%y) / y, x % y). > > > > For floats, Python is documented as using the third expression. > > > > "Help on built-in function divmod in module builtins: > > divmod(...) > > divmod(x, y) -> (div, mod) > > Return the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x." > > > > It does not really matter, however, as infinity cannot be 'floored' as > > required for // > > > > >>> math.floor(float('inf')) > > Traceback (most recent call last): > > File "<pyshell#21>", line 1, in <module> > > math.floor(float('inf')) > > OverflowError: cannot convert float infinity to integer > > > > and hence > > > > >>> float('inf') // 1.0 > > nan > > > > -- > > Terry Jan Reedy -- https://mail.python.org/mailman/listinfo/python-list