首页 > 解决方案 > 比较matlab中的2个浮点数

问题描述

在过去的几周里,我被 Matlab 中的浮点比较问题折磨着。

我的代码涉及大量a<bor c<=d。让我抓狂的是

dw = 0.001;
W1 = [0:dw:1];
W2 = [0:dw:1];

然后我们有

>>W1(418) = 0.417000000000000
>>W2(418) = 0.417000000000000
>>W1(418)>=W2(418)

ans =

  logical

   0

>>W2(418)>=W1(418)

ans =

  logical

   1

我目前处理这个问题的方法是定义一个错误术语eps0 = 10^(-15)。然后,每当我期望拥有 时a<=b,我都会这样做a<=b+eps0

但我想知道是否有更通用的方法来解决这个问题?对此,我真的非常感激!

标签: matlabfloating-pointfloating-accuracy

解决方案


不,没有通用的方法来解决浮点数比较,每种情况都不一样,预期的舍入误差会随着情况而变化。

而不是使用eps0 = 10^(-15),使用eps(b)a<=b+eps(b)b+eps(b)是可以表示的下一个较大的值(假设b为正)。这应该注意一种形式的舍入误差。如果舍入误差累积,则需要更大的余量:a<=b+10*eps(b)例如。


推荐阅读