有两个相似的matlab程序,一个迭代10次,一个迭代11次。
一:
i = 0;
x = 0.0;
h = 0.1;
while x < 1.0
i = i + 1;
x = i * h;
disp([i,x]);
end
另一个:
i = 0;
x = 0.0;
h = 0.1;
while x < 1.0
i = i + 1;
x = x + h;
disp([i,x]);
end
我不明白为什么浮点加运算和乘法运算有区别。
最佳答案
使用浮点计数器进行迭代时,您应该非常小心。作为示例,我将向您展示您的案例中发生了什么(这是一个 Java 程序,但您的案例应该相同):click here to run it yourself
double h = 0.1;
System.out.println(10*h-1.0);
System.out.println(h+h+h+h+h+h+h+h+h+h-1.0);
它只是在进行乘法与单独的加法时将差值打印为 1。
由于 float 的表示不准确,结果如下所示:
0.0
-1.1102230246251565E-16
因此,如果您在后一种情况下将其用作循环条件,则会有一个额外的迭代(尚未达到)。
尝试使用计数器变量i
,它是一个整数,你不会遇到这样的问题。
关于matlab - 关于浮点精度 : why the iteration numbers are not equal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6477178/