直截了当地说,我的问题正如标题中所述:在使用C编写的应用程序中,有没有办法检测浮点/双精度非正规数是否被编译器/系统“标准化”(例如,通过DAZ,FTZ,等等)?
如果需要上下文,我想要完成的是检测programaticaly最小的float / 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浮点数的使用情况.因此系统可以使用IEEE-754浮点数,但不支持非规范化浮点数.因此,总是将非规范化浮点数刷新为零的实现应该返回has_denorm的std :: denorm_absent.