首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++11中浮点比较

c++11中浮点比较
EN

Stack Overflow用户
提问于 2013-09-06 02:41:55
回答 1查看 2.8K关注 0票数 1

我习惯于将浮点与以下函数进行比较。但是,我只是检查c++11是否提供了一些浮点比较函数,比如isgreaterequal。我的问题是我是否应该用标准中的功能来取代它呢?

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18649037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档