コンピューターはどのようにsin値を計算しますか?[閉まっている]


28

コンピューターはどのようにsin値を計算しますか?論理的に、私がそれについて考えるとき、唯一の明らかな方法は多くのsin値をメモリに入れることであり、sin値を「計算」する必要があるとき、それは特定のメモリアドレスからデータをプルするだけです(例えば、sin(x)はsin(x)の値を含むメモリアドレスからデータをプルします)それが唯一の可能な方法のようです。または、値のサインを計算するために使用できる関数はありますか?私は、コンピューターが基本レベルでどのように罪を計算するかを本当に質問しようとしています。より多くの「基本」演算で構成される別の関数を使用してsin値を近似する方法はありますか。ALUは複数の「基本」演算を実行してsin値を近似できますか、それともメモリから値をプルするだけですか?


10
Google「CORDIC」。Google「テイラーシリーズ」。そして、記憶についてのあなたの考えは明確ではありません。
ユージーンSh。

8
「メモリ」メソッドは最適化手法であり、頻繁に使用されます(名前は「ルックアップテーブル」です)。しかし、いいえ、最初はコンピューターにはありません。しかし、コンピューターの計算方法について迷っている場合は<placeholder>、Googleの「<placeholder>計算アルゴリズム」を使用してください。これは、ほとんどの場合、SEに求めてより良い作品...
ユージンのShを。

5
CORDICとTaylors 'に加えて、非線形ミニマックス手法と組み合わせたチェビシェフも探してください。テイラーは平均誤差を制限しますが、チェビシェフは最大誤差を制限し、より速く閉じます。定数は無限に正確ではなく、演算でもないため、ミニマックスが必要です。そして、あなたは狂気のような対称性を活用する必要があります!
ジャンク

3
あなただけのCOS、ログ、指数、パイ、平方根などのためにそこにあるとして計算罪に使用することができますシリーズがあることを知っています
アンディ別名

2
もちろん、「そもそも」コンピューターのメモリにコンテンツを置くことができます-コンピューターはどのように起動すると思いますか?初期値を回路に配線し、読み取り専用メモリセルまたはICのメタライゼーション層に組み込み、ヒューズに焼き付け、トラップ電荷として保存し、ディスク、パンチテープ、またはトグルスイッチから読み取ることができます-ソフトウェアで使用可能な任意の方法原則として、事前計算されたテーブルにも役立ちます。実際、多くのアルゴリズムにはさまざまな定数が必要です。最適なものは、要件、技術、さらには他のニーズの後に残っているリソースに基づいて決定する必要があります。
クリスストラットン

回答:


30

通常、高解像度のsin(x)関数は、CORDIC(座標回転デジタルコンピューター)アルゴリズムを使用して実装されます。これは、シフトと加算/減算、および小さなルックアップテーブルのみを使用した少数の反復で実現できます。原稿用紙 CORDICコンピューティング技術ジャックVolderによっては、FPGA内のハードウェアで実現するときにもうまく動作(及び同様のアルゴリズムは、FPUを有するものMICROSのハードウェアFPUに実装される)1959年からです。

たとえば、インバーターまたはモーターVFD(可変周波数ドライブ)の合成正弦波を作成するための低解像度の場合、補間の有無にかかわらずルックアップテーブル(LUT)が適切に機能します。対称性のため、正弦波の1つの象限の値を保存するだけです。

@Temlibが指摘しているように、最新のFPU内で使用されるアルゴリズムは、範囲の縮小とそれに続くRemezアルゴリズムなどを使用した評価を使用して、最大絶対誤差を制限します。詳細については、このインテルのペーパーで、浮動小数点三角関数の形式的検証を参照してください


2
CORDICは、純粋なハードウェア固定関数変換(その最初の歴史的なアプリケーション)用です。FPUを搭載したコンピューターの場合、多項式近似は特別なCORDICシフトアンドアドマシンの代わりに既存の算術演算子を再利用するため、より高速で適切です。
TEMLIB

1
@TEMLIBはい、それは有効なポイントです。答えに追加します。CORDICは、HP-35などの最初の科学計算機でも使用されました。
スペロペファニー16年

私の知る限り、CORDICはHP 9100A卓上計算機で初めてハードウェアを実装しました。CORDICアルゴリズムで使用されるパラメーターを格納するROMとして機能する、ダイオードで覆われた1平方フィートあたりのプリント回路カードがありました。
ホットリックス

@HotLicks-間違いです。CORDICは、HP 9100Aの10年近く前に機内ナビゲーションコンピューター用に開発され、使用されていました。
クリスストラットン

@ChrisStratton-私は訂正しました。
ホットリックス

14

ほとんどのコンピュータートリガーライブラリは、多項式近似に基づいており、速度と精度の最適なバランスを提供します。たとえば、サインとコサインの完全な単精度精度を得るには、十数個の乗算と加算/減算演算で十分です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.