Alexander Belopolsky added the comment:
> the bug in C implementation should be fixed.
In the past (see #8860) we were not able to reach a consensus on which behavior
is correct and which has a bug:
>>> timedelta(seconds=1)*0.6112295
datetime.timedelta(0, 0, 611229)
>>> timedelta(seconds=0.6112295)
datetime.timedelta(0, 0, 611230)
It all boils down to the the fact that
>>> round(0.6112295*10**6)
611230
but
>>> round(0.6112295, 6) * 10**6
611229.0
In my view, timedelta(seconds=1) is 10**6 microseconds and timedelta(seconds=1)
* 0.6112295 is 611229.5 microseconds which is correctly rounded to 611230 in
timedelta(seconds=0.6112295), but timedelta(seconds=1)*0.6112295 returning
611229 is incorrect.
If I understand Mark's argument correctly (see msg107097), he views timedeltas
as fractional number of seconds rather than integer number of microseconds and
in his view timedelta(seconds=0.6112295) is timedelta(seconds=0.6112295) is
0.611229499999999981 seconds because
>>> Decimal(0.6112295)
Decimal('0.61122949999999998116351207499974407255649566650390625')
Thus timedelta(seconds=0.6112295), 0.6112295 should be rounded down to 6
decimal places and result in 611229 microseconds.
Neither of us thought resolving this was important enough to hold other fixes.
In the same spirit, I suggest that we apply my current patch that fixes a crash
and pass the rounding curiosity down to the future generations.
----------
nosy: +mark.dickinson
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue23521>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com