【发布时间】: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