c++ - 使用 C++,有没有办法检测编译器/系统是否将 floats/doubles 非规范化为 "normalized"?

标签 c++ compilation floating-point double denormalization

直接说,我的问题正如标题中所述:在使用 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/

相关文章:

java - 为什么Java double 印格式根据是否使用String.format而不同

c++ - 增加数组的大小会产生一些问题

java - 如何知道我的 Java 程序正在做什么?

c++ - 在自定义堆上设置内存

java - Ant 的属性(property)值(value)和属性(property)位置有什么区别

c++ - 在 C++ 中,严格的自底向上分析如何暗示返回类型不用于重载决策?

c - 这个数字是否有超过 D 位小数?

c - 使用 if 语句将数组中的 nan 值切换为 0.0?

c++ - std::timed_mutex::try_lock_for 立即失败

c++ - 在 C++ 游戏中更改背景颜色