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 つとリンクしなければなりません。

ベクトルおよび並列実行では、要素は x(1)、 x[1*stridex]、x[1+2*stridex]、などの自然な順序で評価する 必要はありません。そのため、発生する例外も順序通りになるとは 限りません。たとえば、引数 exp(x(1)) でオーバーフロー例外が発生し、 また exp(x(9)) で無効な演算例外が発生する場合は、vc_exp の呼び出しでオーバーフローが最初に発生する保証はありません。