IEEE 754 - C++ IEEE754 的静态断言
ieee 754 - C++ static assert of IEEE754
)
如何对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"的另一个名称;它是相同的标准。
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 初始值设定项列表构造和静态断言
- 如何在 c++11 中静态断言 std::array 类成员进行排序?
- 我如何静态断言static_cast是 noexcept?
- 绕过特征静态断言
- Qt C++:静态断言失败:信号和插槽参数不兼容
- 捕获的静态断言 lambda
- 静态断言添加操作是否可用
- 错误:静态断言失败:std ::线程参数必须在转换为rvalues后不可行
- 是否允许编译器在静态断言中评估重言式
- 公共继承的静态断言
- 静态断言失败,出现"Windows headers require the default packing option..."
- 静态断言,如果在编译时不知道表达
- 如果标头包含在另一个标头中,但不包含 CPP,则静态断言
- 静态断言 std::array 的大小,其类型是使用 decltype 从成员函数的返回值中获取的
- 围绕静态断言不完整的类型
- C 11多态映射键静态断言失败:哈希函数必须与密钥类型的参数无关
- 包含多态对象的向量:静态断言误差
- 与复制构造函数不同的移动构造函数的静态断言