Skip to content

避免误差危害

2025-06-29

避免小分母

分母过小会造成浮点溢出,精度丢失。

避免相近两数相减

相近两数之差的精度远小于此两数。

EXAMPLE

a=000.12345b=000.12346,各有 5有效数字;而 a00b=000.00001,只剩下 1有效数字

经验性避免方法:

  1. x+ε00x=00εx+ε+x
  2. ln(x+00ε)00ln(x)=00ln(1+εx)
  3. |x| 远小于 1 时,100cosx=002sin2x2
  4. |x| 远小于 1 时,ex001=00x+0012x2+0016x3+00

避免大数吃小数

精度差距太大的两数进行运算时,小数会被舍弃。

EXAMPLE

a=001×1016b=001,在 IEEE 754 标准下计算 a+00b 时,在对阶过程中 b 的尾数被化成 0,导致 ba「吃掉」。

减少运算次数

经验性避免方法:

  1. 快速幂;

    EXAMPLE
    212=(26)2=((23)2)2=((2×22)2)2

    12 次运算 4 次运算。

  2. 多项式秦九韶算法。

    EXAMPLE
    a0+a1x+a2x2+=a0+x(a1+x(a2+x()))

    O(n2) 次运算 O(n) 次运算。