マニュアルページ clibmvec.3m
名前
clibmvec - ベクトル版複素数関数
形式
f95 [ flag ... ] file ... -lmvec [ library ... ]
または
f95 [ flag ... ] file ... -lmvec_mt [ library ... ]
subroutine vc_abs(n, a, stridea, r, strider)
subroutine vc_exp(n, a, stridea, b, strideb, rtmp)
subroutine vc_log(n, a, stridea, b, strideb)
subroutine vc_pow(n, a, stridea, b, strideb, c, stridec,
rtmp3)
subroutine vz_abs(n, x, stridex, d, strided)
subroutine vz_exp(n, x, stridex, y, stridey, dtmp)
subroutine vz_log(n, x, stridex, y, stridey)
subroutine vz_pow(n, x, stridex, y, stridey, z, stridez,
dtmp3)
integer n, stridea, strideb, stridec, strider
integer stridex, stridey, stridez, strided
complex a(1+(n-1)*stridea), b(1+(n-1)*strideb), c(1+(n-
1)*stridec)
real r(1+(n-1)*strider), rtmp(n), rtmp3(3*n)
complex*16 x(1+(n-1)*stridex), y(1+(n-1)*stridey), z(1+(n-
1)*stridez)
real*16 d(1+(n-1)*strided), dtmp(n), dtmp3(3*n)
機能説明
これらのルーチンは、値のベクトル全体に対して同時に、共通複素
数基本関数を評価します。最初のパラメータは計算する値の数を示
します。後続のパラメータは引数ベクトルと結果ベクトルを指定し
ます。各ベクトルは、使用される最初の配列要素と刻み幅 (連続す
る要素間の増分) で記述されます。
vc_abs(n, a, stridea, r, strider) は、i = 1,2, ..., n のそれ
ぞ れ に対して、r(1+(i-1)*strider) = abs(a(1+(i-1)*stridea))
を計算します。出力ベクトルは実数型であることに注意してくださ
い。
vc_exp(n, a, stridea, b, strideb, rtmp) は、
b(1+(i-1)*strideb) = exp(a(1+(i-1)*stridea)) を計算します。
rtmp パラメータには、実数型の要素 n 個分を格納できる一時領域
を指定します。
vc_log(n, a, stridea, b, strideb) は b(1+(i-1)*strideb) =
log(a(1+(i-1)*stridea)) を計算します。
vc_pow(n, a, stridea, b, strideb, c, stridec, rtmp3) は
c(1+(i-1)*stridec) = a(1+(i-1)*stridea)**b(1+(i-1)*strideb)
を計算します。rtmp3 パラメータには、実数型の要素 3*n 個分 を
格納できる一時領域を指定します。
サブルーチン、vc_abs 、vc_exp、vc_log および vc_pow は上記の
単精度複素数関数の倍精度複素数版です。
各関数において、要素数 n はゼロより大きくなければな り ま せ
ん。 引 数配列と結果配列に対する刻み幅は任意の整数です。しか
し、引数配列と結果配列の一部またはすべてが重複してはなりませ
ん。たとえば、vc_log(n, a, 1, a, 1) の呼び出しの結果は正しく
ありません。刻み幅にはゼロも指定できることに注意してく だ さ
い。 こ の場合、ベクトル全体が単一の要素に効果的に縮小されま
す。したがって、たとえば、vc_pow を使用して、b の値 を 固 定
し、strideb をゼロに設定して、a(i)**b の値を計算できます。最
後に、刻み幅には負の値も指定できることに注意してください。た
だし、対応する配列パラメータはベクトル内でアクセスされる最初
の要素を参照する必要があります。刻み幅が負の場合、これはメモ
リー内で最も高いアドレスの要素となります (この規約は Level 1
BLAS とは異なります。Level 1 BLAS では、負の増分を使用する場
合でも、配列パラメータは常に、メモリー内で最も低いアドレスの
要素を参照します)。たとえば、b(i) = exp(a(n-i+1)) を設定する
には、vc_exp(n, a(n), -1, b, 1, rtmp) を呼び出します。
属性
次の属性については、 attributes(5) を参照してください。
_________________________________
| 属性タイプ 属性値 | |
|_____________________|__________|
| 使用条件 | SPROlang|
| インタフェース安定性| 開発中 |
| MT レベル | MT-安全 |
|_____________________|__________|
関連項目
libmvec(3M) 、 attributes(5)
診断
ベクトル関数は、例外を IEEE 754 の考え方で扱い、 対 応 す る
Fortran スカラー関数と本質的には同じ結果を作成します。ベクト
ル関数によっては、引数配列のすべての要素について数値結果が正
しい場合でも、不正確な例外を発生することがあります。
注意事項
上記ベクトル関数 は、 2 つ の ラ イ ブ ラ リ libmvec.a と
libmvec_mt.a で提供されます。後者には、コンパイラが提供する
自動並列化と連結して動作する、並列化バージョンの関数が入って
い ま す。 libmvec_mt.a を 使 用 するには、並列化オプション
-xparallel、-xexplicitpar、または -xautopar の 1 つとリン ク
しなければなりません。
このライブラリ内の関数を呼び出すときは、自分でデフォル ト の
round-to-nearest モードを有効にする必要があります。ベクトル
関数は、デフォルトの round-to-nearest モードであることを前提
にしています。呼び出し元のプログラムが丸めモードをデフォルト
以外のモードに変更している場合は、ベクトル関数を呼び出 す 前
に、 round-to-nearest モー ドに再設定する必要があります。デ
フォルト以外の丸めモードでベクトル関数を呼び出したときの結果
は定義されていません。
-xvector=yesか -xlibmopt、 -fast のどれかを使い、間接的に ベ
ク ト ル 関数を呼び出すことができます。 -fast コンパイルオプ
ションは、プログラムがデフォルトの丸めモードのみ使用するよう
宣 言 し ま す。このため丸めモードを変更してはいけません。 -
xlibmopt および -xvector=yesの場合は、プログラムから数学関数
を 呼 び 出 すとき、必ず、丸めモードをデフォルトの round-to-
nearest に設定する必要があります。デフォルト以外の丸めモード
は、数学ライブラリの外部の算術関数に使用できます。
ベクトルおよび並列実行では、 要 素 は x(1)、 x[1*stridex]、
x[1+2*stridex]、などの自然な順序で評価する必要はありません。
そのため、発生する例外も順序通りになるとは限りません。たとえ
ば、 引 数 exp(x(1)) で オー バー フロー例外が発生し、また
exp(x(9)) で無効な演算例外が発生する場合は、vc_exp の呼び 出
しでオーバーフローが最初に発生する保証はありません。