やりたいと思っていても、本当はやりたくないのかもしれません。Python 初心者は通常、浮動小数点数を評価すると予期しない結果 (1.0/10 = 0.100000000000001 など) が得られるため、浮動小数点数を丸める必要があると考えています。式で間抜けな文字列置換を行うのではなく、 の変数を作成し、round(49/200,n)フォーマットのクリーンアップを少し行いました。またexp(49/200)、13 回評価する必要はなく、1 回だけ実行して計算値を参照します。
zz = round(49/200,n)
e_zz = exp(zz)
ans = (e_zz +
e_zz * (x-zz) +
1/2 * e_zz * (x-zz)**2 +
1/6 * e_zz * (x-zz)**3 +
1/24 * e_zz * (x-zz)**4 +
1/120 * e_zz * (x-zz)**5 +
1/720 * e_zz * (x-zz)**6 +
1/5040 * e_zz * (x-zz)**7 +
1/40320 * e_zz * (x-zz)**8 +
1/362880 * e_zz * (x-zz)**9 +
1/3628800 * e_zz * (x-zz)**10 +
1/39916800 * e_zz * (x-zz)**11)
e を四捨五入することは、ほとんど適切ではありません。丸められた数値を 11 乗する場合も同様です。(Python では、べき乗演算子は**ではなくであることに注意してください^。)
編集: S.Lott が代数的単純化を提案していなければ、私はこれをそのままにしていたでしょう。しかし、* e_zzすべての用語から因数分解することができ、より単純な (そしておそらくより高速な) ものを与えることができます:
zz = round(49/200,n)
e_zz = exp(zz)
ans = e_zz * (1 +
(x-zz) +
1/2 * (x-zz)**2 +
1/6 * (x-zz)**3 +
1/24 * (x-zz)**4 +
1/120 * (x-zz)**5 +
1/720 * (x-zz)**6 +
1/5040 * (x-zz)**7 +
1/40320 * (x-zz)**8 +
1/362880 * (x-zz)**9 +
1/3628800 * (x-zz)**10 +
1/39916800 * (x-zz)**11)