2012-02-13 18 views
6

浮動小数点のコサインとサイン関数を実装しようとしていますが(浮動小数点ハードウェアはありません)浮動小数点のコサイン

私のプロセッサには浮動小数点ハードウェアも命令もなく、浮動小数点乗算、除算、加算、減算、および平方根のアルゴリズムをすでに実装しています。だから私はコサインとサインを実装するために私が利用できるツールです。私はCORDIC法を用いて、検討していた

at this site はしかし、私は、ニュートン法を用いた除算や平方根を実装したので、私は、最も効率的な方法を使用することを期待していました。

「紙がある」という本を見に行ったり、冗談を言ったりしてはいけません。私は、高速かつ効率的であることが知られているよく知られているアルゴリズムの名前を探しています。

+1

既存の数学ライブラリを見つけることはできませんか?それらの下の数学はかなり複雑なので!競争力のある数学図書館を書くことは博士号の価値があるかもしれません(何年もの努力が必要です)。 –

+0

私はコードジャンキーではないので、私はアルゴリズムが好きで、自分で実装を行うことができます。アセンブリのコードを自分で書き直して手作業でスケジュールする必要があります。 (これはカスタムプロセッサ用です)。 – Veridian

+0

私はその件に関して多くの本と論文があると思います。あなたは大学の図書館に行きましたか? –

答えて

4

まず、精度要件によっては、これは以前の質問よりもはるかにおしゃれになる可能性があります。

これで、入力を管理可能な範囲にするために、最初に引数modulo pi/2(または2pi、pi、またはpi/4)を減らしたいと警告されました。これは微妙な部分です。関連する問題の素敵な議論のために、K.C.のコピーをダウンロードしてください。 Ngの巨大な議論のための控訴控訴:最後のビットに良い。 (タイトルの簡単なGoogle検索はあなたにpdfを手に入れます)。これは非常に読みやすく、なぜこれが難しいのかを説明する素晴らしい仕事をしています。

これを実行した後は、多項式近似で簡単に行うことができるゼロ付近の小さな範囲で関数を近似する必要があります。それは非効率的ですが、テイラーシリーズは動作します。切断されたチェビシェフシリーズは、計算が簡単で効率的です。ミニマックス近似を計算する方が良い方法です。これは簡単な部分です。

これまで説明したとおり、正弦および余弦を完全に整数で実装しました(申し訳ありませんが、パブリックソースはありません)。ハンドチューニングされたアセンブリを使用すると、「典型的な」プロセッサで100サイクルの近傍が完全に合理的になります。あなたはどのハードウェアを扱っているのか分かりません(パフォーマンスは、ハードウェアが整数乗算の高い部分をどれくらい速く生成できるかということが主な理由です)。精度のさまざまなレベルのために

+0

@starbox:ミニマックス近似は、黒い芸術のものです。あなたがそれを使用する必要がある場合、それについて本当に知っているだけです。あなたは標準的なアプローチである "Remez交換アルゴリズム"を調べることから始めることができます。切断されたChebyshevシリーズは計算がはるかに簡単で、ほぼ同じくらい良いです。テイラー級数では、同じ精度を実現するためにはいくつかの条件が必要ですが、(明らかに)非常に簡単です。 –

+0

@starbox:既存のFPの加算および乗算ルーチンを使用したくないかもしれないことに気づくべきです。とにかく、計算の大部分を整数にすることは、いくつかの点でより簡単になることが分かります。私が整数実装を書いたプロセッサは実際にFPUを持っていましたが、使用せずに結果を速く得ることができました。 –

+1

@starbox:完全なFP演算の使用を避ける理由は、計算のすべてのステップを丸める必要がないからです。少し余分な精度を持ち、最後まで丸めロジックを遅らせることができます。 –

-1

基本的な算術演算を実装しているので、テイラー級数展開を使って正弦と余弦を実装することもできます。

+0

私はそれを行うことができますが、私は最も効率的で最速の方法が欲しいと思います。私はいくつかの方法がルックアップテーブルを使用していることを知っています。 – Veridian

+0

ミニマックス近似はどうですか? – Veridian

+0

申し訳ありませんが、私はミニマックスアルゴリズムに精通していません – ardnew

1

、あなたはここでいくつかの良い近似を見つけることができます:彼らは応じて乱暴に変えることができ、様々な「収束シリーズ」のオプションとは異なり、実行時に確定的付加的な利点で

http://www.ganssle.com/approx.htm

入力値に依存します。あなたがリアルタイムで何かをしている場合(ゲーム、モーションコントロールなど)

関連する問題