我怀疑这可能与舍入误差有关,因为我使用 double 来控制循环终止,但我真的想知道发生了什么
#include<iostream>
using namespace std;
int main()
{
double h = 0.2; // stepsize
double t_0 = 1;
double t_n = 25;
double y_0 = 1; // initial condition
double t = t_0;
while(t < t_n)
{
cout << "t: " << t << endl;
cout << "(t < t_n): " << (t < t_n) << endl;
t += h;
}
}
最后几行输出是
t: 24.4
(t < t_n): 1
t: 24.6
(t < t_n): 1
t: 24.8
(t < t_n): 1
t: 25
(t < t_n): 1
最后一条语句不应该返回 false 吗?即,循环不应该在 24.8 时终止吗?
最佳答案
这不起作用的原因是 0.2
不能在 float
中精确表示,因为它的小数部分不是两个负幂的精确和。如果您尝试使用不同的数字,例如 0.25
,该代码将起作用,因为 0.25
是 2^-2
。
关于c++ - while 循环没有正确终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267849/