
2013/2/24 Paul A. Bristow <pbristow@hetp.u-net.com>:
On Sunday 24 February 2013 09:51:27 Antony Polukhin wrote:
2013/2/24 Jeroen Habraken <vexocide@gmail.com>:
On 23 February 2013 18:53, Eric Niebler <eniebler@boost.org> wrote:
lexical_cast is using math::changesign with long double regardless of whether BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS is defined or not. This is causing Boost.Test build problems (see here http://tinyurl.com/af5453h ).
I'm pretty sure this is a bug in lexical_cast, so I've opened a ticket: https://svn.boost.org/trac/boost/ticket/8162
So, portable way of changing sign is just to multiply on -1 ?
You could toggle the most significant bit, if FP numbers have IEEE 754 format (which should be common nowdays). Unlike multiplication, this would keep the precision and is faster.
I think this is what changesign does? So it works for NaN where all comparisons and tests fail. If changesign is implemented, it should not rely on IEEE 754 format.
As John says, portability is all good fun ;-)
OK, I'll just disable optimized conversions to doubles when there is no support for long doubles in Boost.Math. This may take a few weeks. -- Best regards, Antony Polukhin