【问题标题】:Fmod as While Loop Condition ErrorFmod 作为 While 循环条件错误
【发布时间】:2016-08-23 05:09:44
【问题描述】:

我在使用 fmod() 时遇到问题,当它与参数一起使用时,它不“适合”while 循环中的条件。我重新创建了下面的 sn-p,这会导致与我的主程序相同的错误。

#include <math.h>
int main()
{
    double foo = 223.76;
    double bar = foo;
    while(fmod(bar,1.00) != 0)
    {
        bar += foo;
    }
    cout << bar << endl;
}

上面的代码最终应该会停止并打印出 5594,但它会持续到数百万。在每一步打印出 bar 的值实际上表明它达到了 5594 的值(如果你想测试它大约需要 25 步),所以我不知道为什么它不会停在那里。

【问题讨论】:

  • 哎呀,一个不精确的值的重复总和并与一个精确的数字进行比较,浮点编程的主要罪恶。这永远不会按原样工作。将所有内容乘以 100 即可轻松解决。
  • 223.76 只有在它是 2 的幂的倍数时才能精确表示(使用普通的 C++ 实现)。是吗?
  • 好吧,与 0.00 相比,我确实拥有它。结果以任何一种方式结束。
  • 更容易阅读:floating-point-gui.de
  • 然后把它当作22373,并检查它何时是100的倍数。简单易行。 ;-)

标签: c++ while-loop modulo math.h


【解决方案1】:

这很可能是一个数字问题。所以它可能非常接近 0,但不完全等于 0。所以请尝试使用while(fmod(bar,1.00) &gt; 1e-10)

【讨论】:

  • 我试过这个,但它最终导致了无限循环。在上面的 cmets 中找到了解决方案,但还是谢谢!
猜你喜欢
  • 2020-03-11
  • 1970-01-01
  • 2023-03-26
  • 2019-10-26
  • 2015-03-02
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多