Oracle® Solaris Studio 12.4: 数値計算ガイド

印刷ビューの終了

更新: 2015 年 1 月
 
 

5.5.1 超越関数

指数関数、対数関数、三角関数など、プログラミング言語で標準化された一般的な数学ライブラリ関数のほとんどは、有理数演算や、平方根 (sqrt()) などの代数関数と比べ、正しく丸めるにはコストがかかります。ほぼ正しく丸められる関数は、ほとんどの目的に適しており、非常に高速です。ただし、もっとも高速でほぼ正しく丸められる関数は、プラットフォームによって異なります。

  • アプリケーションが使用する関数に応じた移植可能なコードを使用してください。このようなコードのソースの 1 つが、自由に配布可能な数学ライブラリである fdlibm です。これは Netlib ソフトウェアリポジトリから入手できます。

  • –xvector オプションは使用しないでください。超越関数のベクトル化バージョンは、特定のプラットフォームに最適化されており、別のプラットフォームでは生成される結果がわずかに異なります。

  • x86 ハードウェア超越命令を使用しないでください。これらの命令でエラーバウンドをできるかぎり小さくしたとしても、完全に正しくは丸められません。また、Intel バージョンと AMD バージョンでは、どちらも非常に適切であったとしても、異なる場合があります。Oracle Solaris Studio C/C++ コンパイラでは、特に –fast に続けて –xbuiltin=%default を使用して、どの超越命令も、コンパイラによって組み込み超越関数の代わりにインラインが使用されていないことを確認することができます。同様に、–fast に続けて –xnolibmilオプションを使用すると、インラインテンプレートが無効になります。Oracle Solaris Studio の libm.il には、超越命令を呼び出す複数のテンプレートが含まれています。