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.
当我创建一个从 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.