IEEE 754 - C++ IEEE754 的静态断言

ieee 754 - C++ static assert of IEEE754

本文关键字:静态 断言 IEEE754 C++ IEEE      更新时间:2023-10-16

如何对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),也没有常规的静态断言。

首先,请注意,由于编译器的特性,您无法可靠地断言浮点运算符合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"的另一个名称;它是相同的标准。