使用C,有没有办法检测浮点数/双精度非正规数是否被编译器/系统“标准化”?

直截了当地说,我的问题正如标题中所述:在使用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.

上一篇:c – 运行时链接到不在LD_LIBRARY_PATH上的动态库


下一篇:javascript – Angular.js缓存$编译模板/渲染ng-repeat内指令的性能