[issue3166] Make conversions from long to float correctly rounded.
report at bugs.python.org
Thu Nov 6 18:30:34 CET 2008
Alexander Belopolsky <belopolsky at users.sourceforge.net> added the comment:
I noticed that you replaced a call to _PyLong_AsScaledDouble with your
round to nearest algorithm. I wonder if _PyLong_AsScaledDouble itself
would benefit from your change. Currently it is used in PyLong_AsDouble
and long_true_divide. I would think that long_true_divide would be more
accurate if longs were rounded to the nearest float.
I also wonder whether round to nearest float can be implemented without
floating point arithmetics. I would think round towards zero should be
a simple matter of extracting an appropriate number of bits from the
long and round to nearest would at most require a long addition.
I believe _PyLong_AsScaledDouble is written the way it is to support
non-IEEE floating formats, but I am not sure that your algorithm would
always return the nearest float on an arbitrary non-IEEE platform.
Maybe it would be worthwhile to provide a simple IEEE specific code with
well specified semantics for both PyLong_AsDouble and long_true_divide,
but fall back to the current code on non-IEEE platforms.
Python tracker <report at bugs.python.org>
More information about the Python-bugs-list