0.42-0.5+0.08與0.08-0.5+0.42是不完全相等

matlab的老師佈置了這麼一道作業題:儘管我們知道0.42-0.5+0.08與0.08-0.5+0.42是完全相等的,但在Matlab中,二者卻不相等,請說明原因。
我大概是知道這與浮點數精度誤差有關係,但是還是不能理解,若有誤差,在兩邊數值及符號都完全相等的情況下。

>> 0.42+(-0.5+0.08)

ans =

     0

>> (0.42-0.5)+0.08

ans =

  -1.3878e-17
  
>> single(0.42-0.5)+single(0.08)

ans =

  single

     0

>> double(0.42-0.5)+double(0.08)

ans =

  -1.3878e-17
  >> q = quantizer('double');
num2bin(q,0.08)

ans =

    '0011111110110100011110101110000101000111101011100001010001111011'

>> q = quantizer('double');
num2bin(q,-0.08)

ans =

    '1011111110110100011110101110000101000111101011100001010001111011'

>>  q = quantizer('double');
num2bin(q,(0.42-0.5))

ans =

    '1011111110110100011110101110000101000111101011100001010001111100'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章