如果 p ? p^* p?是p的近似, ∣ p ? ? p ∣ |p^*-p| ∣p??p∣是絕對誤差, ∣ p ? ? p ∣ / ∣ p ∣ |p^*-p|/|p| ∣p??p∣/∣p∣是相對誤差
舍入誤差,就是數據表示精度不足帶來的誤差
a=0.1234564≈0.123456=fl(a)
b=0.1234546≈0.123455=fl(b)
在上面發生了舍入誤差
fl(a)-fl(b)=0.000001
a-b=0.0000018
所以在計算a-b時絕對誤差是0.0000008
但是想對誤差是0.44
從絕對誤差的角度看,差異很小,但是從相對誤差的角度來看誤差就非常大了
大數吃小數:
如果精度有限可能會發生下面的情況
100000000 + 0.5 = 100000000 100000000+0.5=100000000 100000000+0.5=100000000
100000000 + 0.5 ? 100000000 = 0 100000000+0.5-100000000=0 100000000+0.5?100000000=0
( 100000000 + 0.5 ? 100000000 ) ? 100000000 = 0 (100000000+0.5-100000000)*100000000=0 (100000000+0.5?100000000)?100000000=0
這和真實結果差了很多,因為精度不夠,大數加小數的時候把小數吃掉了,導致后續結果都出現問題,一個辦法是交換順序
100000000 ? 100000000 = 0 100000000-100000000=0 100000000?100000000=0
100000000 ? 100000000 + 0.5 = 0.5 100000000-100000000+0.5=0.5 100000000?100000000+0.5=0.5
( 100000000 ? 100000000 + 0.5 ) ? 100000000 = 50000000 (100000000-100000000+0.5)-100000000=50000000 (100000000?100000000+0.5)?100000000=50000000