【问题标题】:Comparison with fmod() result returning false与 fmod() 结果比较返回 false
【发布时间】:2013-09-05 23:00:22
【问题描述】:

fmod() 函数有问题。

这段代码应该是正确的,但不知何故不是。有什么帮助吗?

if (fmod(1.9, 0.3) == 0.1) {  
    cout << "True." << endl;  
}

【问题讨论】:

  • 浮点运算不精确。
  • 我建议你在尝试任何事情之前参考this question
  • ...不准确...正如 cout 所示

标签: c++ floating-point modulus


【解决方案1】:

浮点数不准确。您可以这样做的一种方法是,

#include <limits>

if (fabs(fmod(1.9,0.3) - 0.1) <  std::numeric_limits<double>::epsilon()) {
    cout << "True." << endl;
}

但是,这是一个不完全正确的粗略解决方案。搜索一下如何在 stackoverflow 上比较双精度/浮点数,以讨论该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2016-02-13
    相关资源
    最近更新 更多