チェビシェフ多項式は、別の回答で述べたように、関数と多項式の最大の差ができるだけ小さい多項式です。それは素晴らしいスタートです。
場合によっては、最大誤差は関心のあるものではなく、最大相対誤差です。たとえば、正弦関数の場合、x = 0付近の誤差は、大きな値の場合よりもはるかに小さくなければなりません。小さな相対誤差が必要です。したがって、sin x / xのチェビシェフ多項式を計算し、その多項式にxを乗算します。
次に、多項式を評価する方法を理解する必要があります。中間値が小さく、丸め誤差が小さくなるように評価したいとします。そうしないと、丸め誤差が多項式の誤差よりもはるかに大きくなる可能性があります。また、正弦関数などの関数では、不注意である場合、x <yであっても、sin xに対して計算した結果がsin yの結果よりも大きくなる可能性があります。したがって、計算順序を慎重に選択し、丸め誤差の上限を計算する必要があります。
たとえば、sin x = x-x ^ 3/6 + x ^ 5/120-x ^ 7/5040 ...単純にsin x = x *(1-x ^ 2/6 + x ^ 4 / 120 - X ^ / 5040 6 ...)、次いで括弧内の関数が減少していること、そしてそれがあろう yはxに次に大きい数である場合、時々 yは罪xより小さくなる罪を犯すことが起こります。代わりに、sin x = x-x ^ 3 *(1/6-x ^ 2/120 + x ^ 4/5040 ...)を計算してください。
たとえば、チェビシェフ多項式を計算するときは、通常、係数を倍精度に丸める必要があります。しかし、チェビシェフ多項式は最適ですが、倍精度に丸められた係数を持つチェビシェフ多項式は、倍精度係数を持つ最適多項式ではありません!
たとえば、sin(x)の場合、x、x ^ 3、x ^ 5、x ^ 7などの係数が必要です。次のようにします。多項式(ax + bx ^ 3 + cx ^ 5 + dx ^ 7)を倍精度より高くしてから、aを倍精度に丸め、Aを与えます。aとAの差は非常に大きくなります。次に、(sin x-Ax)の最良の近似を多項式(bx ^ 3 + cx ^ 5 + dx ^ 7)で計算します。aとAの差に適応するため、異なる係数が得られます。bを倍精度Bに丸めます。次に、(sin x-Ax-Bx ^ 3)を多項式cx ^ 5 + dx ^ 7で近似します。元のチェビシェフ多項式とほぼ同じ多項式が得られますが、倍精度に丸められたチェビシェフよりもはるかに優れています。
次に、多項式の選択で丸め誤差を考慮する必要があります。丸め誤差を無視した多項式で誤差が最小の多項式を見つけましたが、多項式と丸め誤差を最適化したいと考えています。チェビシェフ多項式を取得したら、丸め誤差の範囲を計算できます。たとえば、f(x)は関数、P(x)は多項式、E(x)は丸め誤差です。最適化したくない| f(x)-P(x)|、最適化したい| f(x)-P(x)+/- E(x)|。丸め誤差が大きい場合は多項式誤差を抑え、丸め誤差が小さい場合は多項式誤差を少し緩和するわずかに異なる多項式が得られます。
これにより、最後のビットの最大0.55倍の丸め誤差が簡単に得られます。ここで、+、-、*、/は、最後のビットの最大0.50倍の丸め誤差があります。