)
如何制作IEEE754规范的静态断言(浮点表示)?
我的想法是这样的:
static unsigned char c[8] = { 0, 0, 0, 0, 0, 0xd0, 0x84, 0x40 };
static double d= *reinterpret_cast<double *>(c);
BOOST_STATIC_ASSERT(d==666.);
但它不起作用:( 我应该指出我的编译器不是C ++ 11(我使用visual studio 2008)而且我没有定期的静态断言。
答案 0 :(得分:2)
首先,请注意,由于编译器的特性,可以可靠地断言浮点运算符合IEEE 754,例如, Visual C ++和g ++都有标志,这些标志可以以更低的速度产生更快的操作。 NaN值无法正确比较wrt。 IEEE 754。
但我相当确定如果std::numeric_limits::is_iec559
为真,那么普通值的位级表示符合IEEE 754。
即
static_assert( std::numeric_limits<double>::is_iec559, "IEEE 754 floating point" );
“IEC 559”实际上只是“IEEE 754”的另一个名称;它是相同的标准。