IEEE754的C ++静态断言

时间:2014-04-01 12:30:06

标签: c++ ieee-754 static-assert

如何制作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)而且我没有定期的静态断言。

1 个答案:

答案 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”的另一个名称;它是相同的标准。