Matlab/C はどのように正弦波を生成しますか?つまり、すべての角度の値を保存するのですか? しかし、そうであれば、保存する必要がある無限の値があります。
3 に答える
最新のデジタル コンピューターで利用できる基本的な算術演算子だけを使用して、角度のサインを計算するための非常に多くのルーチンがあります。そのようなものの 1 つにすぎませんが、CORDIC アルゴリズムは 1 つの例にすぎません。Matlab が三角関数に使用するアルゴリズムがわかりません。
現在使用されているアルゴリズムの中には、保存されたテーブルで重要な値を検索するものもありますが、コンピューターは保存された値のテーブルで三角関数の値を検索するだけではありません。これらのテーブルに含まれるものはアルゴリズム固有であり、おそらく三角テーブルの単純な期待とは一致しないでしょう。
この質問は SO で何度も尋ねられていることに注意してください。この回答はそれらの選択のようです。
いいえ、通常はありません。たとえそうだったとしても、「無限の値」はありません。デジタルの有限 (実) コンピューターは無限をうまく処理できませんが、それは角度 (正弦関数への入力) にも同様に当てはまります。角度自体は有限のビット セットで表現する必要があるため、「すべての」角度を要求することはできません。
テイラー級数を使用するのが一般的だと思います。または、補間に基づく他のソリューションです。
また、最新の CPU には正弦を計算するための命令がありますが、もちろんそれは、それがどのように実装されているかという問題を 1 つまたは 3 つのレベルに押し下げるだけです。
詳細については、この非常によく似た質問も参照してください。
90 年代以前のコンピュータは、基本関数の加算、減算、乗算、および除算を使用して、サインおよびその他の三角関数を数値的に計算していました。それらを計算するためのアルゴリズムは、通常、基本的なコンパイラ ライブラリに含まれていました。ある時点で、浮動小数点プロセッサ ( FPU ) と呼ばれるオプションのハードウェア プロセッサを追加できるようになります。FPU についての私の理解では、FPU には三角関数のハード値が格納されていました。三角関数を計算する速度は、FPU を含めることで劇的に向上します。ただし、90 年代以降、FPU は CPU にバンドルされています。
正弦関数やその他の三角関数が FPU によってどのように実装されているかについての明確な説明を見つけることができないようです。一般に、これはチップを設計する電気技術者に委ねられた実装の詳細です。ただし、実際には 0 から pi/2 までの値を知る必要があるだけです。他のすべては、これらの値から簡単に計算できます。
編集:FPUで使用される実装は次のとおりです: CORDIC 、私はこの回答で見つけました。