2 matlab
我试着编译以下代码.
x = 0
while x <= 1
x = x+0.02
end
Run Code Online (Sandbox Code Playgroud)
我应该得到的x的最后一个值等于1.02(这在while循环中是一个错误的条件)
但是,我非常想知道我总是将x的最后一个值等于1并且while循环停止.我不知道我的代码有什么问题.谁有人可以帮我找出来?
0.02不能用浮点二进制数(double)精确表示,因此你会得到一些舍入误差.结果是你没有达到一个,而是一个比一个数字略大的数字.
尝试disp(x-1)在代码后追加,看看它x不完全是1.
该站点显示了如何在IEEE754双精度浮点中表示0.02:http://www.binaryconvert.com/result_double.html? decimal = 048046048050
这里最重要的是它略大于0.02
解决此问题的一种方法是使用整数循环变量.它仍然是double类型,但它只有整数值,除非你使用非常大的数字(> = 2 ^ 56?),否则没有舍入问题
for n=0:100
x = n/100;
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |