作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
直接说,我的问题正如标题中所述:在使用 C++ 编写的应用程序中,是否有一种方法可以检测编译器/系统是否正在“规范化” float / double 非正规化(例如通过 DAZ 、自贸区等)?
如果需要上下文,我想要完成的是通过编程方式检测最小浮点/ double 值。然而,这些结果取决于非规范化是否被“规范化”:如果是,则最小值由 std 的数字限制 min() 给出,否则由 denorm_min() 给出。
最佳答案
您应该简单地信任实现返回 the correct values for std::numeric_limits
.如果 std::numeric_limits<float>::has_denorm
is std::denorm_present
,那么您应该假设常规 C++ 运算符不会隐式规范化浮点值。
请注意,这是来自 std::numeric_limits<float>::has_iec559
的单独查询,它测试 IEC-559/IEEE-754 float 的使用。因此系统可以使用 IEEE-754 float ,但不支持非规范化 float 。因此,始终将非规范化 float 刷新为零的实现应该返回 std::denorm_absent
。对于 has_denorm
.
关于c++ - 使用 C++,有没有办法检测编译器/系统是否将 floats/doubles 非规范化为 "normalized"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38881222/
我是一名优秀的程序员,十分优秀!