[issue39525] math.remainder() give wrong answer on large integer
Tim Peters
report at bugs.python.org
Sun Feb 2 00:54:12 EST 2020
Tim Peters <tim at python.org> added the comment:
Arguments to `remainder()` are converted to floats, and the returned value is also a float. These specific arguments convert to the same float:
>>> a = 12345678901234567890
>>> b = 12345678901234567891
>>> float(a) == float(b)
True
And the float they convert _to_ retains only the 53 most-significant bits of the inputs:
>>> int(float(b))
12345678901234567168
>>> c = _
>>> c.bit_length()
64
>>> bin(c)
'0b1010101101010100101010011000110011101011000111110000100000000000'
Note that the last 11 bits are zeroes, and 64 - 11 = 53.
So this is all doing what it's intended to do, and won't be changed.
I'm leaving this open, though, in case someone thinks the docs should be clarified. But the same things apply to _many_ functions in the `math` module: unless the docs specifically say they work with integer arguments, integer arguments are converted to float.
Oops! Someone else already closed this while I was typing. That's fine by me too ;-)
----------
nosy: +tim.peters
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue39525>
_______________________________________
More information about the Python-bugs-list
mailing list