次の注意は、本章のすべての組み込み関数表に適用されます。
DOUBLE は倍精度を意味します。
INTEGER 引数を取る組み込み関数は、INTEGER*2、INTEGER*4、または INTEGER*8 も使用できます。
INTEGER 引数をとる INTEGER 組み込み関数は、次のような条件で INTEGER 型の値を返します。-xtypemap オプションを指定すると、実引数のデフォルトのサイズが変わります。
mod、sign、dim、max、min、and、iand、or、ior、xor、ieor の場合、戻り値のサイズは、引数の最大サイズになります。
abs、ishft、lshift、rshift、lrshft、ibset、btest、ivclr、ishftc、ibits の場合、戻り値のサイズは、最初の引数のサイズになります。
int、epbase、epprecc の場合、戻り値のサイズは、デフォルトの INTEGER のサイズになります。
ephuge の場合、戻り値のサイズは、INTEGER または引数の大きい方のサイズになります。
デフォルトのデータサイズを変更するオプションの場合、一部の組み込み関数の使用方法も変わります。たとえば、-dbl オプションを指定している場合、DOUBLE COMPLEX の引数による ZCOS への呼び出しは、引数が COMPLEX*32 に拡張されているため、自動的に CQCOS への呼び出しになります。次の関数にも、前述のような機能があります。
aimag、alog、amod、cabs、ccbrt、ccos、cdabs、cdcbrt、cdcos、cdexp、cdlog、cdsin、cdsqrt、cexp、clog、csin、csqrt、dabs、dacos、dacosd、dasin、dasind、datan、datand、dcbrt、dconjg、dcos、dcosd、dcosh、ddim、derf、derfc、dexp、dimag、dint、dlog、dmod、dnint、dprod、dsign、dsin、dsind、dsinh、dsqrt、dtan、dtand、dtanh、idnint、iidnnt、jidnnt、zabs、zcbrt、zcos、zexp、zlog、zsin、zsqrt
次の関数は、整数型または論理型の引数を扱うことができます。 引数のサイズには制限はありません。
and、iand、ieor、iiand、iieor、iior、inot、ior、jiand、jieor、jior、jnot、lrshft、lshift、not、or、rshift、xor
デフォルトの REAL、DOUBLE、PRECISION、COMPLEX、または DOUBLE COMPLEX 値を戻すよう指定された組み込み関数は、特定のコンパイルオプションに応じて型を返します。たとえば- xtypemap=real:64,double:64 と指定してコンパイルした場合、結果は次のようになります。
REAL 関数への呼び出しは REAL*8 を返す
DOUBLE PRECISION 関数への呼び出しは REAL*8 を返す
COMPLEX 関数への呼び出しは COMPLEX*16 を返す
DOUBLE COMPLEX 関数への呼び出しは COMPLEX*16 を返す
そのほか、データ型のデフォルト データサイズを変更するオプションには -r8 と -dbl があります。これらのオプションも DOUBLE から QUAD に拡張されています。ただし、-xtypemap= オプションの方が順応性があるため、こちらを使用することをお勧めします。
総称名を持つ関数は、引数と同じ型の値を返します。 ただし、型変換関数、もっとも近い整数関数、複素数引数の絶対値などについては例外です。引数が複数ある場合、すべて同じ型でなければなりません。
関数名が実引数として使用される場合、この名前は個別名でなければなりません。
関数名が仮引数として使用される場合、これは副プログラムの中の組み込み関数を識別せず、そのデータ型は変数および配列の規則と同じ規則に従います。
表および、次の注記 (1) 〜 (12) は、ANSI X3.9-1978 『Programming Language Fortran 』の「組み込み関数の表」に Fortran 拡張機能を追加したものにもとづいています。
(1) INT
A が整数型ならば、INT(A) は A です。
A が実数型または倍精度ならば、次のようになります。
|A| < 1 ならば INT(A) はゼロです。 |A| ≥ 1 ならば INT(A) は A の範囲を超えない最大整数で、A と同じ符号です。このような数学的整数値は、大きすぎてこのコンピュータの整数型に合わない場合があります。
A が複素数型または倍精度複素数型ならば、前述の規則が A の実部に適用されます。
A が実数型ならばIFIX(A) は INT(A) と同じです。
(2) REAL
A が実数ならば、 REAL(A) は A です。
A が整数型または倍精度型ならば、REAL(A) は実数データが持ち得るのと同じ精度の、A の有効部分です。
A が複素数型ならば、REAL(A) は A の実部です。
A が倍精度複素数型ならば、REAL(A) は実数データが持ち得るのと同じ精度の、A の実部の有効部分です。
(3) DBLE
A が倍精度型ならば、DBLE(A) は A です。
A が整数型または実数型ならば、DBLE(A) は倍精度データが持ち得るのと同じ精度の、A の有効部分です。
A が複素数型ならば、DBLE(A) は倍精度データが持ち得るのと同じ精度の、A の実部の有効部分です。
A が複素数 *16 型ならば DBLE(A) は A の実部です。
(3') QREAL
A が、REAL*16 型ならば QREAL(A) は、A です。
A が整数型、実数型、または倍精度型ならば、QREAL(A) は REAL*16 データが持ち得るのと同じ精度の、A の有効部分です。
A が複素数型または倍精度複素数型ならば、QREAL(A) は REAL*16 データが持ち得るのと同じ精度の、 A の実部の有効部分です。
A が COMPLEX*16 型または COMPLEX*32 型ならば、QREAL(A) は A の実部です。
(4) CMPLX
A が複素数型ならば、CMPLX(A) は A です。
A が整数型、実数型、または倍精度型ならば、CMPLX(A) は REAL(A) + 0i です。
A1 と A2 が整数型、実数型、または倍精度型ならば、CMPLX(A1,A2) は REAL(A1) + REAL(A2)*i です。
A が倍精度複素数型ならば CMPLX(A) は REAL( DBLE(A) ) + i*REAL( DIMAG(A) ) です。
CMPLX に引数が 2 個ある場合、同じ型である必要があります。 また、型は整数、実数、または倍精度のいずれかです。
CMPLX の引数が 1 個の場合、整数、実数、倍精度、複素数、COMPLEX*16 または COMPLEX*32 のいずれかです。
(4') DCMPLX
A が CONPLEX*16 型ならば、DCMPLX(A) は A です。
A が整数型、実数型、または倍精度型ならば、DCMPLX(A) は DBLE(A) + 0i です。
A1 と A2 が整数型、実数型、または倍精度型ならば、DCMPLX(A1,A2) は DBLE(A1) + DBLE(A2)*i です。
DCMPLX に引数が 2 個ある場合、同じ型である必要があります。また、型は整数、実数、または倍精度のいずれかです。
DCMPLX の引数が 1 個の場合、整数、実数、倍精度、複素数、 COMPLEX*16 または COMPLEX*32 のいずれかです。
(5) ICHAR
ICHAR(A) は照合シーケンスの中の A の位置です。
先頭の位置は 0 で、最後は N-1, 0≤ ICHAR(A)≤N-1 です。ここで、N は照合シーケンスの中の文字数で、A は長さが 1 の文字型です。
CHAR および ICHAR は次に示すように逆の関係です。
ICHAR(CHAR(I)) = I、このとき 0≤ I≤N-1
CHAR(ICHAR(C)) = C、ここで C はその CPU で表現できる任意の文字
(6) COMPLEX
複素数値は順に並べた実数の組み合わせ (ar, ai) で表します。ここで、ar は実部で、ai は虚部です。
(7) ラジアン
角度はすべてラジアンで表します。ただし、"組み込み関数" の列に "(度)" の表記がある場合は除きます。
(8) 複素数の関数
複素数型の関数の結果は、主値です。
(8') CBRT
a が COMPLEX 型ならば、CBRT の結果は COMPLEX RT1=(A, B) となります。このとき、A ≥ 0.0、-60 度 ≤ arctan (B/A) < + 60 度です。
次のようになる場合もあります。
RT2 = RT1 * (-0.5, square_root (0.75))
RT3 = RT1 * (-0.5, square_root (0.75))
(9) 引数型
組み込み関数引用の中のすべての引数は、同じ型である必要があります。
(10) INDEX
INDEX(X,Y) は、X の中の Y が始まる場所です。つまり、文字列 X の中で文字列 Y が最初に始まる位置です。
Y が X の中にない場合は、INDEX(X,Y) は 0 です。
LEN(X) < LEN(Y) ならば INDEX(X,Y) は 0 です。
INDEX はデフォルトの INTEGER*4 のデータを返します。64 ビット環境用にコンパイルする場合は、結果が INTEGER*4 のデータ範囲を超えると警告が出されます。64 ビット環境で、INDEX 文に INTEGER*4 の上限 (2G バイト) を超える文字列を使用する場合は、INDEX 関数と結果を受け取る変数が INTEGER*8 と宣言されている必要があります。
(11) LEN
LEN は、引数の CHARACTER 変数の宣言された長さを返します。引数の実際の値には重要性はありません。
LEN はデフォルトの INTEGER*4 のデータを返します。64 ビット環境用にコンパイルする場合は、結果が INTEGER*4 のデータ範囲を超えると警告が出されます。64 ビット環境で、LEN 文に INTEGER*4 の上限 (2G バイト) を超える文字変数を使用する場合は、LEN 関数と結果を受け取る変数が INTEGER*8 と宣言されている必要があります。
(12) 字句比較
LGE( X, Y ) は、X=Y または照合シーケンスの中で X が Y に続くならば真です。 その他の場合は偽です。
LGT( X, Y ) は、照合シーケンスの中で X が Y に続くならば真です。 その他の場合は偽です。
LLE( X, Y ) は、X=Y または照合シーケンスの中で、X が Y の前にあるならば真です。その他の場合は偽です。
LLT( X, Y ) は、照合シーケンスの中で X が Y の前にあるならば真です。その他の場合は偽です。
LGE、LGT、LLE、および LLT のオペランドの長さが違う場合、短い方のオペランドは右側が空白で拡張されたように見なされます。
(13) ビット関数
VMS Fortran ではその他のビット単位操作も可能ですが、実装されていません。
(14) シフト
LSHIFT は a1 を a2 ビットだけ論理的に左にシフトします (インラインコード)
LRSHFT は a1 を a2 ビットだけ論理的に右にシフトします (インラインコード)
RSHIFT は a1 を a2 ビットだけ算術的に右にシフトします。
ISHFT は a1 を a2 > 0 ならば論理的に左に、a2 < 0 ならば論理的に右にシフトします。
LSHIFT と RSHIFT 関数は、C の << および >> 演算子の Fortran の類似機能です。C と同様、その意味はハードウェアにより異なります。
範囲外のシフトカウントによるシフト関数の動作は、ハードウェアによって異なり、通常は予測できません。このリリースの Fortran では、31 を超えるシフトカウントは、ハードウェアによって異なります。
(15) 環境照合
引数の型だけに意味があります。
(16) イプシロン
イプシロンは、1.0 + e ≠ 1.0 であるような最小の e です。
(17) LOC、MALLOC、FREE
LOC 関数は変数または外部手続きのアドレスを返します。MALLOC( n ) 関数呼び出しは、少なくとも n バイトのブロックを割り当て、そのブロックのアドレスを返します。
LOC は、32 ビット環境ではデフォルトの INTEGER*4 を返し、64 ビット環境では INTEGER*8 を返します。
MALLOC はライブラリ関数であり、FORTRAN 77 の組み込み関数ではありません。MALLOC も同様に 32 ビット環境ではデフォルトの INTEGER*4 を返し、64 ビット環境では INTEGER*8 を返します。ただし、64 ビット環境用にコンパイルする場合は、MALLOC は明示的に INTEGER*8 と宣言されている必要があります。
LOC または MALLOC から戻される値は、POINTER、INTEGER*4、または 64 ビット環境では INTEGER*8 の型の変数に格納されます。FREE に渡す引数は、その前の MALLOC への呼び出しによって戻された値にする必要があります。 したがって、データ型は POINTER、INTEGER*4、または INTEGER*8 になります。
MALLOC64 は、常に INTEGER*8 の引数 (バイト単位のメモリー要求のサイズ) を受け取り、常に INTEGER*8 の値を返します。32 ビット環境と 64 ビット環境の両方で稼働するプログラムをコンパイルしなければならない場合は、MALLOC ではなくこのルーチンを使用します。受け取る変数は POINTER または INTEGER*8 に宣言されている必要があります。
(18) SIZEOF
SIZEOF 組み込み関数は、大きさ引き継ぎ配列、引き渡された文字の長さ、サブルーチン呼び出しや名前には適用できません。SIZEOF はデフォルトの INTEGER*4 のデータを返します。64 ビット環境用にコンパイルする場合は、結果が INTEGER*4 のデータ範囲を超えると警告が出されます。64 ビット環境で、SIZEOF 文に INTEGER*4 の上限 (2G バイト) を超える配列を使用する場合は、SIZEOF 関数と結果を受け取る変数が INTEGER*8 と宣言されている必要があります。