2009-07-15 22 views
3

sin、cos、floor、ceil、expとlog 32ビットで同じ結果を返します。 64ビットLinux、Solaris、その他のプラットフォームで同じ結果が得られるライブラリがありますか?プラットフォームに依存しない数学ライブラリ

私は、次の選択肢を検討しています:
A)cephesgcc -mfpmath=sseと と各 プラットフォームで同じ最適化レベルが...しかし、その明確ではない、これがうまくいくことをコンパイル。
b)MPFRしかし、これは が遅すぎると心配です。

精度(編集済み)について:この特定のアプリケーションの場合 正確に数値に最も近い数字の を生成するものは本当に必要ありません。私はちょうど答え すべてのプラットフォーム、OSと "ビット"で正確に同じにする必要があります。それは が値が合理的である必要があると言われています(5桁はおそらく で十分でしょう)。私は最初の質問でこのことを明確にしていないことを謝ります。

精度が十分に低いMAPMまたはMPFRは のトリックですが、私は の「複数の精度」機械/フレーバーを持っていないものを見つけることを望んでいました。いずれにせよ、私は これを試してみます。

答えて

1

これは必要ありません。床と天井は計算が簡単なので正確です。

sin、cos、expなどのtransendentalsの最後のビットを四捨五入しています。しかし、これらはCPUのマイクロコードに固有のものであり、ライブラリに関係なく一貫して高品質で実行できます。ただし、丸めはチップアーキテクチャによって異なります。

もし、人為起源の正確な答えが実際にあなたの目標であるなら、あなたはポータブルライブラリが必要であり、そうすることによっても大きな効率をあきらめます。 MAPMのようなポータブルライブラリを使用すると、一貫したULP結果だけでなく、副次的な利点として、自由な精度を定義することができます。

あなたはSSEを使用して言及tools like this onethis one.

+0

フロアについて:cephesでの実装は少し複雑です(http://www.netlib.org/cephes)。 精度について:問題のあるコードの部分については、これらの関数が最後の2ビットの「正確な」答えを与えないかどうかは気にしません。私は答えが一貫して合理的であることが必要です。私は、MAPMまたはMPFRが低いenoug精度設定でトリックを行うかもしれないと思います。 Drepperのツールは本当に便利なようです。ありがとう! 私はtyborのlibを使うこともできません。情報にもう一度感謝します。 – Carlos

1

であなたの数学の精度を確認することができます。あなたがx86チップでしか動くことを計画していないのなら、あなたが期待している不一致はどういうものでしょうか?

MPFRについては、心配する必要はありません - テストしてください!ところで、もしそれがGCCに含まれていれば十分ですが、おそらくあなたのためには十分です。

+0

私はx86チップの数学の違いに遭遇しましたが、それは10年前のことでしたが、おそらくそれらの違いはなくなりました。 – Nosredna

+0

デフォルトでは、gccは32ビットビルドでは387を使用しますが、64ビットではSSEを使用します。だからもし私がセフェスを集めたら、私はまだ2つの異なる答えを得るかもしれません。だから私はSSEの使用を強制するでしょう。また、コードが387を使用する場合、そのユニットの精度設定の影響を受ける可能性があります。 – Carlos

+0

私はgccがmpfrをどれくらい強く使用しているのかよくわかりません(コンパイル時にsin(0.13)などの定数を計算するのにmpfrを使用しません)。とにかく、私はそれを試してみましょう。 – Carlos

1

MPFRを使用します。このライブラリは長年にわたり、太陽の下であらゆるプラットフォームに移植され、数多くの人々によって最適化されています。

MPFRがお客様のニーズに十分でない場合は、カスタムのASM実装について説明します。この場合、専用ハードウェアでの実装を検討する方が効率的です。

4

何かのようになります:これはあなたが探しているものですか(これはC99の標準数学ライブラリを置き換えることを目的としたライブラリなので、正常な場合は十分なパフォーマンスを保ちます) IEEE 754丸めモードによる丸め結果)?

4

crlibmはこのための正しいツールです。以前のポスターがリンクされています。正しく丸められているため、正しくコンパイルされていれば、IEEE-754準拠のハードウェアを備えたすべてのプラットフォームでビット一致の結果が得られます。 MPFRよりはるかに高速です。

関連する問題