Matlab代码中的奇怪之处

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循环停止.我不知道我的代码有什么问题.谁有人可以帮我找出来?

Kle*_*ist 5

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)