使用 C++,有没有办法检测 floats/doubles 非规范化是否被 compiler/system "normalized"?
Using C++, is there a way to detect whether floats/doubles denormals are being "normalized" by the compiler/system?
直接说吧,我的问题正如标题所述:在使用 C++ 编写的应用程序中,是否有办法检测 floats/doubles 非规范化是否被 "normalized" compiler/system(例如通过 DAZ、FTZ 等)?
如果需要上下文,我想要完成的是通过编程检测最小 float/double 值。然而,这些结果取决于非正规数是否为 "normalized":如果是,则最小值由 std 的数字限制 min() 给出,否则由 denorm_min() 给出。
您应该简单地将实现信任 return the correct values for std::numeric_limits
. If std::numeric_limits<float>::has_denorm
is std::denorm_present
,然后您应该假设常规 C++ 运算符不会隐式规范化浮点值。
请注意,这是一个独立于 std::numeric_limits<float>::has_iec559
的查询,它测试 IEC-559/IEEE-754 浮点数的使用。因此系统可以使用 IEEE-754 浮点数,但不支持非规范化浮点数。因此,始终将非规范化浮点数刷新为零的实现应该 return std::denorm_absent
for has_denorm
.
直接说吧,我的问题正如标题所述:在使用 C++ 编写的应用程序中,是否有办法检测 floats/doubles 非规范化是否被 "normalized" compiler/system(例如通过 DAZ、FTZ 等)?
如果需要上下文,我想要完成的是通过编程检测最小 float/double 值。然而,这些结果取决于非正规数是否为 "normalized":如果是,则最小值由 std 的数字限制 min() 给出,否则由 denorm_min() 给出。
您应该简单地将实现信任 return the correct values for std::numeric_limits
. If std::numeric_limits<float>::has_denorm
is std::denorm_present
,然后您应该假设常规 C++ 运算符不会隐式规范化浮点值。
请注意,这是一个独立于 std::numeric_limits<float>::has_iec559
的查询,它测试 IEC-559/IEEE-754 浮点数的使用。因此系统可以使用 IEEE-754 浮点数,但不支持非规范化浮点数。因此,始终将非规范化浮点数刷新为零的实现应该 return std::denorm_absent
for has_denorm
.