XL C/C++ Advanced Edition V7.0 for Linux は、数学関数加速サブシステム (MASS) を出荷しています。これは、対応する libm.a ライブラリー関数で改善されたパフォーマンスを提供する、調整された数学組み込み関数のライブラリー・セットです。 MASS 関数と libm.a 関数では、精度と例外処理が異なる場合があります。
Linux の MASS ライブラリーは、ベクトル・ライブラリーの使用で説明されているベクトル関数のライブラリーで構成されます。 MASS によるプログラムのコンパイルとリンクでは、MASS ライブラリーを使用するプログラムのコンパイル方法とリンク方法について説明します。
Linux 用の MASS ライブラリーは、AIX 用 MASS ライブラリーのサブセットです。Linux では、32 ビットのオブジェクトと 64 ビットのオブジェクトを 1 つのライブラリーに混在させてはなりません。そこで、MASS ライブラリーには 2 つのバージョン、libmassvp4.a (32 ビット) と libmassvp4_64.a (64 ビット) が用意されています。
ベクトル・ライブラリーに含まれている単精度関数と倍精度関数については、表 7 にまとめられています。関数のプロトタイプを提供するには、ソース・ファイルに
massv.h を追加します。
C および C++ アプリケーションでは、スカラー引き数を使用する場合でも、サポートされているのは参照による呼び出しのみです。
倍精度関数 | 単精度関数 | 説明 | 倍精度関数プロトタイプ | 単精度関数プロトタイプ |
vrec | vsrec | i=0,..,*n-1 の場合に、y[i] を x[i] の逆数に設定する | void vrec (double y[], double x[], int *n); | void vsrec (float y[], float x[], int *n); |
vrsqrt | vsrsqrt | i=0,..,*n-1 の場合に、y[i] を x[i] の平方根の逆数に設定する | void vrsqrt (double y[], double x[], int *n); | void vsrsqrt (float y[], float x[], int *n); |
vsqrt | vssqrt | i=0,..,*n-1 の場合に、y[i] を x[i] の平方根に設定する | void vsqrt (double y[], double x[], int *n); | void vssqrt (float y[], float x[], int *n); |
一定の入力値は、ベクトル内の位置やベクトルの長さに関係なく、常に同じ結果をもたらすという点で、MASS ベクトル・ライブラリー内のすべての関数には一貫性があります。
MASS ライブラリーでルーチンを呼び出すアプリケーションをコンパイルするには、-l リンカー・オプションで、massvp4 (32 ビット) または massvp4_64 (64 ビット) を指定します。例えば、デフォルト・ディレクトリーに MASS ライブラリーがインストールされている場合は、以下のいずれかを指定できます。
xlc progc.c -o progf -lmassvp4 xlc progc.c -o progf -lmassvp4_64 -q64
MASS 関数を実行する際には、最近似値への丸めモードにし、浮動小数点例外トラッピングを使用不可にしてください。
(これが、デフォルトのコンパイル設定です。)