Matlab 在创建十进制数组时不精确。

Matlab is inprecise when creating a decimal array.

当我创建一个从 0 到 0.6 且间距为 0.1 的简​​单数组时,值不精确。其中一些有 10^-17 数量级的错误。我设法通过创建一个从 1 到 6 的数组,然后除以 10 来解决这个问题,但我想了解为什么会发生这种情况,以便我可以避免将来出现类似的精度错误。

X = 0:0.1:0.6;    
X == [0 0.1 0.2 0.3 0.4 0.5 0.6]
  ans =
  1     1     1     1     0     1     1
X(5) - 0.4
  ans = -5.5511e-17

 X = (0:1:6)/10;   
X == [0 0.1 0.2 0.3 0.4 0.5 0.6]
  ans =
  1     1     1     1     1     1     1
X(5) - 0.4
  ans = 0

这个问题无法真正避免,因为任何计算机都将始终受到机器精度的影响:由于十进制数在内部存储为二进制数,因此您将始终具有有限的精度。这意味着任何 2 个连续数字之间都有一个最小步长。您可以使用 eps 命令找到此精度(或最小步长)。有关详细信息,另请参阅 the Wikipedia entry on machine precision.