Oracle® Developer Studio 12.5: 数値計算ガイド

印刷ビューの終了

更新: 2016 年 6 月
 
 

3.2 Oracle Developer Studio の数学ライブラリ

このセクションでは、Oracle Developer Studio コンパイラに含まれている数学ライブラリについて説明します。

Oracle Developer Studio 12.5 のデフォルトのベースインストールディレクトリは、Oracle Solaris の場合は /opt/developerstudio12.5 で、Linux の場合は /opt/oracle/developerstudio12.5 です。ただし、インストール時に別のベースインストールディレクトリである install-dir を指定できます。

Oracle Developer Studio の 32 ビットの静的ライブラリは、デフォルトで install-dir/lib/compilers ディレクトリとそのサブディレクトリにインストールされます。64 ビットの静的ライブラリは、SPARC の場合は install-dir/lib/compilers/sparcv9、x86 の場合は install-dir/lib/compilers/amd64 にインストールされます。

数値計算ガイド』には、Oracle Solaris でのみ使用でき、32 ビットバージョンでは /usr/lib にインストールされ、64 ビットバージョンでは /usr/lib/64 にインストールされる共有の libm および libmvec ライブラリの説明も記載されています。

math.h および sunmath.h ライブラリヘッダーファイルは、Oracle Solaris では /usr/include にインストールされます。math.h ライブラリヘッダーファイルは、Linux では install-dir/lib/compilers/include/cc にインストールされます。

静的アーカイブ、共有オブジェクト、およびインクルードファイル用の Oracle Developer Studio install-dirsubdirectories は、リリースによって変更されることがあります。

3.2.1 Oracle 数学ライブラリ

libsunmath 数学ライブラリには、どの標準でも規定されていないが、数値ソフトウェアで役立つ関数が含まれています。また、libm.so.2 に含まれているが、libm.so.1 には含まれていない関数の多くも含まれています。libsunmath は、共有オブジェクトと静的アーカイブの両方として提供されます。

表 16 は、 libm.so.2 にない libsunmath 内の関数のリストを示しています。各数学関数について、この表では、一般に C プログラムから呼び出される倍精度バージョンの関数の名前のみを示しています。

表 16  libsunmath の内容
種類
関数名
基本超越関数
exp10
度単位の三角関数
asindacosdatandatan2dsindcosdsincosdtand
?? でスケーリングされた三角関数
asinpiacospiatanpiatan2pisinpicospisincospitanpi
倍精度の ?? の引数還元を使用した三角関数
asinpacospatanp,sinpcospsincosptanp
財務関数
annuitycompound
整数丸め関数
aintanintirintnint
IEEE 規格で推奨される関数
signbit
IEEE 分類関数
fp_classisinfisnormalissubnormaliszero
役立つ IEEE 値を提供する関数
min_subnormalmax_subnormalmin_normalmax_normalinfinitysignaling_nanquiet_nan
加法的乱数ジェネレータ
i_addran_i_addrans_i_init_addrans_i_get_addrans_i_set_addrans_r_addran_r_addrans_r_init_addrans_r_get_addrans_r_set_addrans_d_addran_d_addrans_d_init_addrans_d_get_addrans_d_set_addrans_u_addrans_
線形合同乱数ジェネレータ
i_lcran_i_lcrans_i_init_lcrans_i_get_lcrans_i_set_lcrans_r_lcran_r_lcrans_d_lcran_d_lcrans_u_lcrans_
キャリー付き乗算乱数ジェネレータ
i_mwcran_i_mwcrans_i_init_mwcrans_i_get_mwcrans_i_set_mwcransi_lmwcran_i_lmwcrans_i_llmwcran_i_llmwcrans_u_mwcran_u_mwcrans_u_lmwcran_u_lmwcransu_llmwcran_u_llmwcrans_r_mwcran_r_mwcrans_d_mwcran_d_mwcrans_smwcran_
乱数のシャッフル
i_shufrans_r_shufrans_d_shufrans_u_shufrans_
データ変換
convert_external
丸めモードと浮動小数点例外フラグの制御
ieee_flags
浮動小数点トラップの処理
ieee_handlersigfpe
ステータスの表示
ieee_retrospective
非標準の演算の有効化/無効化
standard_arithmeticnonstandard_arithmetic

3.2.2 最適化されたライブラリ

libmopt ライブラリは、libm および libsunmath 内の一部の関数のより高速なバージョンを提供します。libmopt は、静的アーカイブとしてのみ提供されます。libmopt に含まれているルーチンは、libm 内の対応するルーチンを置き換えます。通常は、libmopt バージョンの方がはるかに高速です。ただし、例外的なケースの ANSI/POSIX®、SVID、X/Open、C99/IEEE のいずれの方法の処理もサポートしている libm バージョンとは異なり、libmopt ルーチンは、これらのケースの C99/IEEE の方法の処理しかサポートしていません。(標準規格への準拠を参照してください。)また、libm 内のすべての数学関数が、浮動小数点の丸め方向モードには関係なく妥当な正確性を持つ結果を示すのに対して、libmopt 内のどの関数も、もっとも近い値への丸め以外の丸め方向を使用して呼び出した結果は未定義です。libmopt を使用するプログラムは、いずれかの標準数学関数が呼び出される場合は常に、デフォルトのもっとも近い値への丸めモードが有効になっていることを確認する必要があります。libmopt を使用してプログラムをリンクするには、–xlibmopt フラグを使用します。