回答:
私のアプローチは、SymPyのようなソフトウェアを次のように使用することです。
from sympy import var, sin, S
var("x a")
g = sin(a*x)/sin(x)
gseries = g.series(x, 0, 10).removeO()
s = {x: S(1)/100, a: S(1)/2}
print gseries.subs(s).n(30)
print g.subs(s).n(30)
print "%.17f" % g.subs({x: 1./100, a: 1./2})
印刷する:
0.500006250065104828565736800905
0.500006250065104828565736868886
0.50000625006510480
最初の数値は10項で切り捨てられたテイラー級数展開で、2番目の数値は正確な評価です。SymPyは正確な算術演算を使用します。この例では、x = 1/100とa = 1/2を使用しましたが、これで遊ぶことができます。最後に、数値を簡単に比較できるように、30桁の10進数で評価します。3番目の数値は、Pythonの浮動小数点数を使用した倍精度評価です。
この場合、キャンセルはないようです。ただし、他の式の場合、直接の倍精度評価は十分に正確ではない場合があり、級数展開はそれを評価する1つの方法です。もう1つは有理近似MiniMaxApproximation
です。過去にMathematicaで使用して大きな成功を収めました。