STINNER Victor <vstin...@redhat.com> added the comment:

The problem comes from the private C function _PyTime_FromObject() of 
Python/pytime.c. This function must use the proper conversion to minimize the 
precision loss. Lib/test/test_time.py contains a lot of tests on conversions 
from different types and ensure that values are rounded correctly. See also my 
PEP 564 "Add new time functions with nanosecond resolution".

The correct code works for float and int (and maybe decimal.Decimal, I don't 
recall!), but it seems like it doesn't support types with __float__(). You have 
to explicitly cast such objects using float(value).

PyNumber_Float() can be used to convert arbitrary object to a float, but I'm 
not sure in which order the conversion should be tried to avoid/reduce 
precision loss during the conversion.

Example:

>>> x=2**53+1; x - int(float(x))
1

If we convert 'x' (int) to float, we introduce an error of 1.

----------
nosy: +vstinner

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35707>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to