Oracle® Solaris Studio 12.4: 数値計算ガイド

印刷ビューの終了

更新: 2015 年 1 月
 
 

3.6.2 三角関数の引数還元

[–π/4,π/4] の範囲外にあるラジアン引数の三角関数は通常、π/2 の整数倍を引いて引数を示された範囲に還元することによって計算されます。

π は、マシンで表現可能な数値ではないため、近似する必要があります。最終的に計算される三角関数の誤差は、近似のπや丸めによる引数還元での丸め誤差と、還元された引数の三角関数の計算での近似誤差に依存します。かなり小さい引数の場合でも、最終的な結果の相対的な誤差より、引数還元誤差の方が大きくなることがあります。一方、かなり大きい引数の場合でも、引数還元による誤差が、その他の誤差よりは大きくならないことがあります。

すべての大きい引数の三角関数は本質的に不正確であり、すべての小さい引数の三角関数は比較的正確であるという、広く信じられている誤解があります。これは、マシンで表現可能な十分に大きい数値がπを超える間隔で区切られているという単純な観察に基づいています。

計算された三角関数の値が突然悪化するような固有の境界もなければ、不正確な関数値が役に立たなくなることもありません。引数還元が一貫して実行されている場合は、すべての基本的な同一性や関係が大きい引数に対して、小さい引数に対してと同様に保持されるため、引数還元がπへの近似によって実行されていることにはほとんど気付きません。

libm および libsunmath 三角関数は、引数還元のために「無限に」正確なπを使用します。 値 2/πは 16 進数 916 桁に計算され、引数還元中に使用するルックアップテーブル内に格納されます。

関数 sinpicospi、および tanpi のグループ (Table 3–3 を参照) は、範囲縮小によって導入される誤りを回避するために π で入力引数をスケーリングします。