我习惯于将浮点与以下函数进行比较。但是,我只是检查c++11是否提供了一些浮点比较函数,比如isgreaterequal。我的问题是我是否应该用标准中的功能来取代它呢?
bool isEqual(double lhs, double rhs, double epsilon = /std::numeric_limits<double>::epsilon())
{
if (lhs == rhs)
{
return true;
}
return fabs(lhs - rhs) <= ( (fabs(lhs) > fabs(rhs) ? fabs(rhs) : fabs(lhs)) * epsilon);
}发布于 2013-09-06 02:52:00
根据:cplusplus.com
使用isgreaterequal,如果两个参数都是NaN,则计算结果为false。
使用>=,如果两个参数都是NaN,则将引发FE_INVALID异常。
因此,我认为您应该保持函数的原样,因为您可能想知道您的论点之一是否是NaN。
来自C11草案N1570:
p.516 F.9.3部分关系运算符
X,≥类似),虽然数值相等,但由于x或y是一个FENV_ACCESS (x,y)的状态为‘on’时的副作用,这些表达式并不等价。如果需要额外的代码来导致无序情况下的“无效”浮点异常,则可以执行这种转换,前提是FENV_ACCESS实用程序的状态为“off”。
https://stackoverflow.com/questions/18649037
复制相似问题