非常奇怪的算术bug

5次观看(过去30天)
刘易斯
刘易斯 2011年8月3日
你好,
基本上就是在一个数字上不断加0.001。这个数列从0开始,所以得到的数字应该总是0.01的倍数,但是它最终退化成像5.874000000000296这样的数字——显然不是0.001的倍数!
你能解释一下原因吗?Matlab真的不能处理如此精确的数字吗?这是一个数学包!!
运行以下代码以重现错误。我运行的是7.10.0(R2010a)。
只需运行log=testcase(),然后在变量编辑器中检查log的后半部分——当您双击一个单元格展开它时,您将能够看到精度的不足。
函数[log] = testcase()
%这样运行:log=testcase()
%然后在变量编辑器中检查日志。
运行时= 20;
t = 0;
dx = 0.001;
i = 1;
日志(我,1)= t;
= 2;
我= 2:运行时/ dx
t = t + dx;
日志(我,1)= t;
结束
结束

接受的答案

Arnaud Miege
Arnaud Miege 2011年8月3日
1评论
刘易斯
刘易斯 2011年8月3日
我真是个白痴。这是浮点问题。我对浮点问题了如指掌。
叹息。
我愚蠢地认为Matlab正在使用一些未来的高精度算术。不。
和往常一样,问题在于糟糕的假设。
谢谢你的快速帮助。

登录发表评论。

更多答案(0)

社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!

开始狩猎!