Subject: [Boost-bugs] [Boost C++ Libraries] #12039: cpp_bin_float convert_to<double>() rounding mistake
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2016-03-02 15:32:37
#12039: cpp_bin_float convert_to<double>() rounding mistake
-------------------------------------+------------------------------
Reporter: Michael Shatz <shatz@â¦> | Type: Bugs
Status: new | Milestone: To Be Determined
Component: None | Version: Boost 1.61.0
Severity: Problem | Keywords:
-------------------------------------+------------------------------
There are cases where cpp_bin_float convert_to<double>() does not produce
the nearest 'double' result. It happens when the source argument differs
form the middle point between two double-precision values in 65th bit or
further.
I didn't look at boost source code, but pretty sure that the mistakes
occurs due to double rounding. I.e. instead of direct rounding to 53-bit
precision of 'double' the number is initially converted to 64-bit 'long
double' and then converted from 'long double' to 'double'.
In particular, on Microsoft compilers 'long double' and 'double' refer to
the same type and the mistake does not happen.
But on the same machine/OS with gcc compiler the mistake does happen.
Below attached a simple test case that prints 'good' on platforms without
bug and prints bad on platforms with bug.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/12039> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:19 UTC