既知の角度に対する sin 関数と cos 関数からの予期しない結果
C/C で sin や cos などの三角関数を扱う場合、これは非常に重要です入力要件を理解するため。よくある誤解は、これらの関数が度単位の角度を期待していると想定していることです。ただし、C/C の sin 関数と cos 関数では、入力角度がラジアン単位である必要があります。
これを説明するために、180 度の角度が sin と cos に渡される例を考えてみましょう。三角関数の恒等式に基づいて期待される結果は次のとおりです:
ただし、報告された結果は異なります大幅:
この不一致は、DegreesToRadians が原因で発生します。 ()関数は、正確な変換を実行するのではなく、丸めと double の有限精度により近似結果を提供します。さらに、π を表す定数 M_PI は、近い近似ではありますが、正確ではありません。
三角関数の計算の精度を向上させるには、sin または cos を呼び出す前に、度単位で引数の削減を実行することをお勧めします。このプロセスにより、角度が三角関数に渡される前に -45° ~ 45° の範囲に減らされることが保証されます。
提供されているコード例は、この手法を示しており、角度を指定された範囲に減じてから、 sin 関数。
extern double sind(double x) { // ... switch (quo % 4) { case 0: // Use * 1.0 to avoid -0.0 return sin(d2r(x90)* 1.0); case 1: return cos(d2r(x90)); case 2: return sin(d2r(-x90) * 1.0); case 3: return -cos(d2r(x90)); } return 0.0; }
このアプローチでは、三角関数の計算、特に 90° などの既知の角度に近い角度の場合、より正確な結果が得られます。 180°など
以上がC/C sin および cos 関数の結果が既知の角度に対して不正確になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。