出于某种原因,2^52在Matlab中等于2^52 + 1,但是为什么?我该如何解决这个问题?欲了解更多信息,请运行下面的代码并检查结果。为什么在Matlab中2^52等于2^52 + 1?以及如何解决它?
这是输出(与VPA):
>> format long
>> digits(500)
>> vpa(2^52)
ans =
4503599627370496.0
>> vpa(2^52+1)
ans =
4503599627370496.0
>> isequal(vpa(2^52), vpa(2^52+1))
ans =
1
>> vpa(2^52+1)
ans =
4503599627370496.0
>> ans+1
ans =
4503599627370497.0
>> vpa(2^52+1000)
ans =
4503599627371496.0
(没有的VPA输出)
>> 2^52
ans =
4.503599627370496e+015
>> 2^52+1
ans =
4.503599627370497e+015
>> isequal(2^52, 2^52+1)
ans =
0
>> 2^52+1
ans =
4.503599627370497e+015
>> ans+1
ans =
4.503599627370498e+015
>> 2^52+1000
ans =
4.503599627371496e+015
编辑:这是不是重复和无关处理浮点错误。
那奇。我只是运行matlab中的所有命令,并获得所有预期的答案 – RSon1234
请不要将图片发布到代码中。这是很难复制。那么,什么是'vpa'?我的Matlab没有它。 – Bernhard
@Bernhard它是可变精度算术 – RSon1234