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

使用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.

标签:denormalization,c,compilation,floating-point,double
来源: https://codeday.me/bug/20190828/1756752.html