マニュアルページ 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 の呼び 出
     しでオーバーフローが最初に発生する保証はありません。