浮點數運算
簡介電腦在計算浮點數時出現的計算誤差量,以及相對應的解法。
最後更新:
浮點數運算實作
現今的動態記憶體存取能做到:x運算後數值太大,能再向記憶體所要存取空間,以存取更大的數值。
然而除法常見的無限小數在電腦中無法實現,因為不存在「無限的記憶體空間」,實務上會用小數點後n位來實現x的近似值,也因此真實值 (xreal) 與計算值 (xcal) 存在誤差。
∣xreal−xcal∣<10−n運算累積誤差
以加法為例,將 x,y 兩數相加,誤差會被擴大
∣(x+y)real−(x+y)cal∣<∣xreal−xcal∣+∣yreal−ycal∣=2×10−n設 x(i) 為用執行 i 次運算後的數值,則 10m 次運算後
xreal(10m)−xcal(10m)<10−(n−m)則精度會下降至小數點後 n−m 位,即運算會累積誤差,且運算越多,愈差越大。
遠離誤差項
若真實值非常小,則計算值容易被誤差數值干擾。放大計算值,遠離誤差項會比較安全。將 x 放大 z 倍,令 y=zx,則運算後的誤差仍然存在。
yreal(10m)−ycal(10m)=zxreal(10m)−xcal(10m)<10−(n−m)若 z=10k,在運算完後除以 z
xreal(10m)−xcal(10m)<10−(n−m+k)精度能保有小數點後 n−m+k 位
限制
一般而言
f(kx)=kf(x)也就是此方式存在一定的限制性,得想辦法找到相對應的函數 g(k) 來變回原始的 f(x)
f(kx)=g(k)f(x)使得
f(x)=g(k)f(kx)