數值計算中的原則

避免兩個相近的數相減

如上圖所示,因為\(x\)和\(y\)非常相近,所以\(x-y << 0\),而\(x - y\)又位於分母,所以會導致誤差變得非常大。要避免的另一方面的原因是,會導致有效數字位數大量減少,而我們要盡量保證有效數字多。



例題:

可以看到第二個解有效數字太少,那么就需要改變算法:

這里“根與系數”的關系指的是:
\[x_1 + x_2 = -\frac{b}{a}\\ x_1 \times x_2 = \frac{c}{a} \]

防止大數“吃掉”小數

吃掉即,與小數的計算過程對最終結果不起作用。
例子:

這是因為這里的變量使用了8位來儲存,因為在轉換到同一個量級的時候,兩個小數都要被轉換成9位,導致最后一位溢出,最終變成\(0.0 \times 10^8\),從而導致結果出錯,小數被“吃掉”。這個問題是由計算機的存儲數據的方式造成的。
解決方法:

絕對值太小的數不宜作除數

如果商特別大,下面繼續加減乘除運算的時候可能會出現“大數吃掉小數”。

例如,如果這里的y恰好就是那個很小的數,那么就可能導致商絕對誤差很大。
注意簡化計算程序,減少計算次數



每一步計算都可能出現舍入誤差,所以步驟太多的話可能會導致誤差過大。

可以轉換成下圖公式:

選用數值穩定性好的算法

例題:求積分

可以看到第一步就出現了舍入誤差,接着積累下去:




