Matlab R2020b同一数学运算出现不同结果的原因咨询
运算结果差异的原因
这个差异来自两个核心点:
中间结果的显示舍入:你分步计算时看到的
1.419e+05是Matlab对实际中间结果的近似显示(被舍入到三位有效数字),但Matlab内部存储的是完整的双精度浮点数(精度远高于显示的三位有效数字)。比如a(7)*(a(6)-a(2))的理论精确值是567.79*250=141947.5,但由于567.79这类十进制小数无法被二进制浮点数精确存储(十进制小数转二进制可能出现循环,只能近似表示),实际存储的计算结果会和141947.5有微小偏差。整体计算的精度保留:当你一次性执行完整公式时,Matlab会直接使用所有原始数值的完整双精度精度运算,不会对中间步骤的结果做舍入,因此得到的是更贴近真实运算的结果(你的例子中是-11312左右,理论精确计算值为-11312.5,浮点存储误差会导致结果略有偏移)。而你分步相加时,用的是显示的近似值(比如把141947.5近似为141900或141950),自然会和整体计算结果产生差异。
你可以在Matlab中验证这一点:输入sprintf('%.20f', a(7)),会看到a(7)的实际存储值并不是精确的567.79,而是一个接近的近似值,这个微小误差就是结果差异的根源。
内容的提问来源于stack exchange,提问作者akash yadav
相关产品推荐
相关产品推荐

