[解決済み] 三角関数の仕組み [クローズド]
質問
高校の数学で、そしておそらく大学でも、三角関数の使い方、三角関数が何をするのか、三角関数がどんな問題を解決するのかを教わるわけです。しかし、それらは常にブラックボックスとして提示されてきました。何かのサインやコサインが必要な場合、電卓のサインやコスのボタンを押せば、それで完了です。それはそれでいいのですが。
私が不思議に思うのは、三角関数が一般的にどのように実装されているかということです。
どのように解くのですか?
まず、ある種の範囲の縮小を行う必要があります。 三角関数は周期的なものなので、引数を標準的な間隔に縮小する必要があります。 手始めに、角度を 0 度から 360 度の間に縮小することができます。しかし、いくつかの恒等式を使うことで、もっと少ない値で済むことに気づきます。 0度から45度の間の角度のサインとコサインを計算すれば、すべての角度のすべての三角関数を計算する方法をブートストラップすることができます。
引数を減らすと、ほとんどのチップは コーディック アルゴリズムを使用して正弦波と余弦波を計算します。コンピュータはテイラー級数を使っていると言われることがあります。 それは合理的に聞こえますが、真実ではありません。 CORDIC アルゴ リ ズ ムは、 よ り 効率的な ハードウェア 実装に最適です。 ( ソフトウェア ライブラリは、三角関数をサポートしないハードウェア上で、例えばテイラー級数を使用することがあります)。 CORDIC アルゴリズムを使用してかなり良い答えを得つつ、精度を向上させるために何か他の処理を行うといった、追加的な処理もあるかもしれません。
上記にはいくつかの改良点があります。 たとえば、非常に小さな角度 theta (ラジアン単位) では、sin(theta) = theta がすべての精度になるので、他のアルゴリズムを使用するよりも、単に theta を返す方が効率的です。 したがって、実際には、可能な限りの性能と精度を引き出すために、多くの特殊ケースロジックが存在します。 市場規模が小さいチップでは、それほど多くの最適化の努力は必要ないかもしれません。
関連
-
[解決済み] このHeld-Karp TSP Pseudocodeの説明をお願いします。
-
[解決済み] 線形時間でのソート?[クローズド]
-
[解決済み] あるアルゴリズムの計算量がO(log log n)になる原因は何でしょうか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] NaN値をチェックするにはどうすればよいですか?
-
[解決済み] 円周率の計算が正確かどうかを判断するにはどうしたらよいですか?
-
[解決済み] 任意の2頂点間の全接続を求めるグラフアルゴリズム
-
[解決済み] あるアルゴリズムの計算量がO(log n)になる原因は何でしょうか?
-
[解決済み] 重なり合う円の面積の合計
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Dijkstraのアルゴリズムが負の重みのエッジに対して機能しないのはなぜですか?
-
[解決済み] ポイントルック アット ポイント
-
[解決済み] ベルマンフォードとダイクストラの比較。どのような状況下でベルマンフォードが優れているか?
-
[解決済み] log(n!)=Θ(n-log(n))でしょうか?
-
[解決済み] 複雑さ O(log(n)) は O(sqrt(n)) と同等か?
-
[解決済み] 整数の絶対値の計算方法
-
[解決済み】C言語ではsin()などの数学関数はどのように計算されるのですか?
-
[解決済み] ユダヤ人の足の爪を切る最適なアルゴリズムとは?
-
[解決済み] トライ式と基幹トライ式のデータ構造の違いは何ですか?
-
[解決済み] ユークリッド・アルゴリズムの時間計算量