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'