为什么一个数字大于Matlab中的相同数字?

时间:2014-07-19 06:30:56

标签: matlab

我有一个程序

e=0.01;    
test3=Ask(1,2)-Bid(1,2);

BidAsk都是for循环生成的矩阵。

我知道有时test3可能等于e,但是matlab给了我这个:

>>test3
e
test3==e
test3>e

test3 =

    0.0100

e =

    0.0100

ans =

     0


ans =

     1

它出了什么问题?谢谢!

编辑:我尝试了format long,然后我得到了

Ask(1,2) =

   8.620000000000001

Bid(1,2) =

   8.609999999999999

test3 =

   0.010000000000002
难怪我弄错了。但实际上我已经使用price=roundn(r*v,-2),而Ask(1,2)Bid(1,2)都等于某些price,所以它们只应该有两个小数位。如果我想将它们四舍五入到小数点后两位,我现在该怎么办?再次感谢!

2 个答案:

答案 0 :(得分:2)

通常,舍入误差使得难以比较浮点数。

0.1是一个很好的十进制数1/10,但是以二进制形式存储在计算机上它是一个重复的部分,并没有完全存储。

仅举例如:

x = 0.2;
y = 0.1 + 0.1;
x == y

不会是真的。

[不幸的是,正如rwong在下面指出的那样,这实际上并非如此。我应该试试吧!在这个时刻,Octave对我来说太聪明了。不过,总的来说,还会有结果!]

有时错误将足以看到第16位,这就是为什么你得到评论尝试格式很长。但有时它可能不可见。底线是:

绝对不使用==两位小数。它几乎总是错误的,而且通常没有意义。

你想要的是测试两个数字是否彼此非常接近,即:

abs(x-y)< 0.00001

有一些小限制。

答案 1 :(得分:0)

如果test3 = 0.01000000000000001或某些此类e = 0.01那么您可能会得到这种结果,当您打印test3-e时会发生什么情况会给您提供线索 - 这就是安全性的原因关键字段浮动==浮动总是会引起审计员的警钟。