この章では、以前の FORTRAN 77 から Fortran 95 へのプログラムの移行をサポートするために f95 に組み込まれ、提供される FORTRAN 77 組み込み関数のセットを一覧で示します。
f95 は、この章で一覧表示している FORTRAN 77 および VMS 関数すべてを組み込み関数として認識します。前の章で一覧表示した Fortran 95 の関数すべても同様です。以前の FORTRAN 77 プログラムを f95 に移行するサポートとして、-f77=intrinsics を指定してコンパイルすると、コンパイラは FORTRAN 77 および VMS 関数のみを組み込み関数として認識し、Fortran 95 組み込み関数は認識しません。
ANSI FORTRAN 77 規格以外の組み込み関数には、¤ 印を付けています。非標準組み込み関数およびライブラリ関数を使用するプログラムは、ほかのプラットフォームへの移植性がない可能性があります。
組み込み関数が複数のデータ型の引数を受け取る場合、組み込み関数には「個別名」と「総称名」があります。通常、個別名を使用した場合の戻り値は、引数と同じデータ型になりますが、型変換関数 (表 3–2) や照会関数 (表 3–7) などの例外もあります。特定のデータ型の引数を扱う場合には個別名によって関数を呼び出します。
複数のデータ項目 (たとえば sign(a1,a2) ) を扱う関数では、すべての引数が同じデータ型である必要があります。
それぞれの組み込み関数について、次の項目が示されています。
組み込み関数 – 関数の説明
定義 – 数学的な定義
引数の数– 関数が受け取る引数の個数
総称名 – 関数の総称名
個別名 – 関数の個別名
引数のデータ型 – 各個別名に対応するデータ型
関数のデータ型 – 特定のデータ型の引数に対する戻り値のデータ型
-xtypemap オプションを指定すると、変数のデフォルトのサイズが変わり、組み込み関数の引用に影響があります。「3.4 注意」 および『Fortran ユーザーズガイド』を参照してください。
算術関数、型変換関数、三角関数、およびその他の数学関数について説明します。a は、関数の 1 つの引数を表わします。 a1 および a2 はそれぞれ、関数の 1 つ目の引数、2 つ目の引数を表わしています。 ar および ai はそれぞれ、関数の複素の引数の実部と虚部を表わしています。
組み込み関数 |
定義 |
引数 の数 |
総称 名 |
個別 名 |
引数の 型 |
関数の型 |
---|---|---|---|---|---|---|
絶対値 注 (6) 参照。 |
|a|= (ar2+ai2)1/2 |
1 |
ABS |
IABS ABS DABS CABS QABS ¤ ZABS ¤ CDABS ¤ CQABS ¤ |
INTEGER REAL DOUBLE COMPLEX REAL*16 DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
INTEGER REAL DOUBLE REAL REAL*16 DOUBLE DOUBLE REAL*16 |
切り捨て 注 (1) 参照。 |
int(a) |
1 |
AINT |
AINT DINT QINT ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
四捨五入 |
a ≥ 0 の場合 int(a+.5) a < 0 の場合 int(a-.5) |
1 |
ANINT |
ANINT DNINT QNINT ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
四捨五入の整数化 |
a ≥ 0 の場合 int(a+.5) a < 0 の場合 int(a-.5) |
1 |
NINT |
NINT IDNINT IQNINT ¤ |
REAL DOUBLE REAL*16 |
INTEGER INTEGER INTEGER |
剰余 注 (1) 参照。 |
a1-int(a1/a2)*a2 |
2 |
MOD |
MOD AMOD DMOD QMOD ¤ |
INTEGER REAL DOUBLE REAL*16 |
INTEGER REAL DOUBLE REAL*16 |
符号の付け替え |
a2 ≥ 0 の場合 |a1| a2 < 0 の場合 -|a1| |
2 |
SIGN |
ISIGN SIGN DSIGN QSIGN ¤ |
INTEGER REAL DOUBLE REAL*16 |
INTEGER REAL DOUBLE REAL*16 |
超過分 |
a1 > a2 の場合 a1-a2 a1≤ a2 の場合 0 |
2 |
DIM |
IDIM DIM DDIM QDIM ¤ |
INTEGER REAL DOUBLE REAL*16 |
INTEGER REAL DOUBLE REAL*16 |
倍精度化または 4 倍精度化乗算 |
a1 * a2 |
2 |
- |
DPROD QPROD ¤ |
REAL DOUBLE |
DOUBLE REAL*16 |
最大値の選択 |
max(a1, a2, …) |
≥2 |
MAX |
MAX0 AMAX1 DMAX1 QMAX1 ¤ |
INTEGER REAL DOUBLE REAL*16 |
INTEGER REAL DOUBLE REAL*16 |
AMAX0 |
AMAX0 |
INTEGER |
REAL |
|||
MAX1 |
MAX1 |
REAL |
INTEGER |
|||
最小値の選択 |
min(a1, a2, …) |
≥2 |
MIN |
MIN0 AMIN1 DMIN1 QMIN1 ¤ |
INTEGER REAL DOUBLE REAL*16 |
INTEGER REAL DOUBLE REAL*16 |
AMIN0 |
AMIN0 |
INTEGER |
REAL |
|||
MIN1 |
MIN1 |
REAL |
INTEGER |
変換型 (以下の型への変換) |
引数の数 |
総称名 |
個別 名 |
引数の型 |
関数の型 |
||
---|---|---|---|---|---|---|---|
INTEGER
|
1 |
INT |
- INT IFIX IDINT - - - IQINT ¤ |
INTEGER REAL REAL DOUBLE COMPLEX COMPLEX*16 COMPLEX*32 REAL*16 |
INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER |
||
REAL
|
1 |
REAL |
REAL FLOAT - SNGL SNGLQ ¤ - - - FLOATK |
INTEGER INTEGER REAL DOUBLE REAL*16 COMPLEX COMPLEX*16 COMPLEX*32 INTEGER*8 |
REAL REAL REAL REAL REAL REAL REAL REAL REAL*4 |
||
DOUBLE
|
1 |
DBLE |
DBLE DFLOAT DFLOATK DREAL ¤ - - - - - DBLEQ ¤- |
INTEGER INTEGER INTEGER*8 REAL DOUBLE COMPLEX COMPLEX*16 REAL*16 COMPLEX*32REAL*16COMPLEX*32 |
DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISIONDOUBLE PRECISION DOUBLE PRECISION |
||
|
1 |
QREAL¤ QEXT ¤ |
QREAL ¤ QFLOAT ¤ - QEXT ¤ QEXTD ¤ - - - - |
INTEGER INTEGER REAL INTEGER DOUBLE REAL*16 COMPLEX COMPLEX*16 COMPLEX*32 |
REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 REAL*16 |
||
|
1 または 2 |
|
- - - - - - - |
INTEGER REAL DOUBLE REAL*16 COMPLEX COMPLEX*16 COMPLEX*32 |
COMPLEX COMPLEX COMPLEX COMPLEX COMPLEX COMPLEX COMPLEX |
||
|
1 または 2 |
|
- - - - - - - |
INTEGER REAL DOUBLE REAL*16 COMPLEX COMPLEX*16 COMPLEX*32 |
DOUBLE COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX |
||
|
1 または 2 |
|
- - - - - - - |
INTEGER REAL DOUBLE REAL*16 COMPLEX COMPLEX*16 COMPLEX*32 |
COMPLEX*32 COMPLEX*32 COMPLEX*32 COMPLEX*32 COMPLEX*32 COMPLEX*32 COMPLEX*32 |
||
|
1 |
|
ICHAR IACHAR ¤ |
CHARACTER |
INTEGER |
||
|
1 |
|
CHAR ACHAR ¤ |
INTEGER |
CHARACTER |
ASCII プラットフォーム (Sun システムも含む) では、次のようになります。
ACHAR は、CHAR の規格外の同義語
IACHAR は、ICHAR の規格外の同義語
ACHAR と IACHAR は、ASCII 以外のプラットフォームで ASCII を直接処理するために提供されていました。
組み込み関数 |
定義 |
引数 |
総称名 |
個別 名 |
引数の型 |
関数の型 |
---|---|---|---|---|---|---|
正弦 注 (7) 参照。 |
sin(a) |
1 |
SIN |
SIN DSIN QSIN ¤ CSIN ZSIN ¤ CDSIN ¤ CQSIN ¤ |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
正弦 (度) 注 (7) 参照。 |
sin(a) |
1 |
SIND ¤ |
SIND ¤ DSIND ¤ QSIND ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
余弦 注 (7) 参照。 |
cos(a) |
1 |
COS |
COS DCOS QCOS ¤ CCOS ZCOS ¤ CDCOS ¤ CQCOS ¤ |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
余弦 (度) 注 (7) 参照。 |
cos(a) |
1 |
COSD ¤ |
COSD ¤ DCOSD ¤ QCOSD ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
正接 注 (7) 参照。 |
tan(a) |
1 |
TAN |
TAN DTAN QTAN ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
正接 (度) 注 (7) 参照。 |
tan(a) |
1 |
TAND ¤ |
TAND ¤ DTAND ¤ QTAND ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
逆正弦 注 (7) 参照。 |
arcsin(a) |
1 |
ASIN |
ASIN DASIN QASIN ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
逆正弦 (度) 注 (7) 参照。 |
arcsin(a) |
1 |
ASIND ¤ |
ASIND ¤ DASIND ¤ QASIND ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
逆余弦 注 (7) 参照。 |
arccos(a) |
1 |
ACOS |
ACOS DACOS QACOS ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
逆余弦 (度) 注 (7) 参照。 |
arccos(a) |
1 |
ACOSD ¤ |
ACOSD ¤ DACOSD ¤ QACOSD ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
逆正接 注 (7) 参照。 |
arctan(a) |
1 |
ATAN |
ATAN DATAN QATAN ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
arctan (a1/a2) |
2 |
ATAN2 |
ATAN2 DATAN2 QATAN2 ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
|
逆正接 (度) 注 (7) 参照。 |
arctan(a) |
1 |
ATAND ¤ |
ATAND ¤ DATAND ¤ QATAND ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
arctan (a1/a2) |
2 |
ATAN2D¤ |
ATAN2D ¤ DATAN2D ¤ QATAN2D ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
|
双曲線正弦 注 (7) 参照。 |
sinh(a) |
1 |
SINH |
SINH DSINH QSINH ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
双曲線余弦 注 (7) 参照。 |
cosh(a) |
1 |
COSH |
COSH DCOSH QCOSH ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
双曲線正接 注 (7) 参照。 |
tanh(a) |
1 |
TANH |
TANH DTANH QTANH ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
組み込み関数 |
定義 |
引数の数 |
総称名 |
個別名 |
引数の型 |
関数の型 |
---|---|---|---|---|---|---|
複素数の虚部 注 (6) 参照。 |
ai |
1 |
IMAG |
AIMAG DIMAG ¤ QIMAG ¤ |
COMPLEX DOUBLE COMPLEX COMPLEX*32 |
REAL DOUBLE REAL*16 |
複素数の共役 注 (6) 参照。 |
(ar,-ai) |
1 |
CONJG |
CONJG DCONJG ¤ QCONJG ¤ |
COMPLEX DOUBLE COMPLEX COMPLEX*32 |
COMPLEX DOUBLE COMPLEX COMPLEX*32 |
平方根 |
a**(1/2) |
1 |
SQRT |
SQRT DSQRT QSQRT ¤ CSQRT ZSQRT ¤ CDSQRT ¤ CQSQRT ¤ |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
立方根 注 (8') 参照。 |
a**(1/3) |
1 |
CBRT |
CBRT ¤ DCBRT ¤ QCBRT ¤ CCBRT ¤ ZCBRT ¤ CDCBRT ¤ CQCBRT ¤ |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
指数関数 |
e**a |
1 |
EXP |
EXP DEXP QEXP ¤ CEXP ZEXP ¤ CDEXP ¤ CQEXP ¤ |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
自然対数 |
log(a) |
1 |
LOG |
ALOG DLOG QLOG ¤ CLOG ZLOG ¤ CDLOG ¤ CQLOG ¤ |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
REAL DOUBLE REAL*16 COMPLEX DOUBLE COMPLEX DOUBLE COMPLEX COMPLEX*32 |
常用対数 |
log10(a) |
1 |
LOG10 |
ALOG10 DLOG10 QLOG10 ¤ |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
誤差関数 (脚注を参照) |
erf(a) |
1 |
ERF |
ERF ¤ DERF ¤ |
REAL DOUBLE |
REAL DOUBLE |
誤差関数 |
1.0 - erf(a) |
1 |
ERFC |
ERFC ¤ DERFC ¤ |
REAL DOUBLE |
REAL DOUBLE |
誤差関数: 2/sqrt(pi) に 0 から exp(-t*t) dt の a の値を掛ける
組み込み関数 |
定義 |
引数の数 |
個別 名 |
引数の型 |
関数の型 |
---|---|---|---|---|---|
変換 注 (5) 参照。 |
文字への変換 整数への変換 参照: |
1 1 |
CHAR ACHAR ¤ ICHAR IACHAR ¤ |
INTEGER CHARACTER |
CHARACTER INTEGER |
部分列の索引 |
文字列 a1 の中の部分列 a2 の位置 注 (10) 参照。 |
2 |
INDEX |
CHARACTER |
INTEGER |
長さ |
文字本体の長さ 注 (11) 参照 |
1 |
LEN |
CHARACTER |
INTEGER |
字句的に等しいか大きい |
a1 ≥ a2 注 (12) 参照。 |
2 |
LGE |
CHARACTER |
LOGICAL |
字句的に大きい |
a1 > a2 注 (12) 参照。 |
2 |
LGT |
CHARACTER |
LOGICAL |
字句的に等しいか小さい |
a1≤ a2 注 (12) 参照。 |
2 |
LLE |
CHARACTER |
LOGICAL |
字句的に小さい |
a1 < a2 注 (12) 参照。 |
2 |
LLT |
CHARACTER |
LOGICAL |
ASCII プラットフォーム (Sun システムも含む) では、次のようになります。
ACHAR は、CHAR の規格外の同義語
IACHAR は、ICHAR の規格外の同義語
ACHAR と IACHAR は、ASCII 以外のプラットフォームで ASCII を直接処理するために提供されていました。
ビット単位関数、環境照会関数、記憶領域の割り当ておよび割り当て解除関数について説明します。
次の関数はすべて FORTRAN 77 の規格外です。
表 3–6 FORTRAN 77 ビット単位関数
ビット単位操作 |
引数の数 |
個別名 |
引数の型 |
関数の型 |
---|---|---|---|---|
補数 |
1 |
NOT |
INTEGER |
INTEGER |
論理積 |
22 |
AND IAND |
INTEGER |
INTEGER |
内包的論理和 |
22 |
OR IOR |
INTEGER |
INTEGER |
排他的論理和 |
22 |
XOR IEOR |
INTEGER |
INTEGER |
シフト 注 (14) 参照。 |
2 |
ISHFT |
INTEGER |
INTEGER |
左シフト 注 (14) 参照。 |
2 |
LSHIFT |
INTEGER |
INTEGER |
右シフト 注 (14) 参照。 |
2 |
RSHIFT |
INTEGER |
INTEGER |
論理的右シフト 注 (14) 参照。 |
2 |
LRSHFT |
INTEGER |
INTEGER |
循環シフト |
3 |
ISHFTC |
INTEGER |
INTEGER |
ビット抽出 |
3 |
IBITS |
INTEGER |
INTEGER |
ビットセット |
2 |
IBSET |
INTEGER |
INTEGER |
ビットテスト |
2 |
BTEST |
INTEGER |
LOGICAL |
ビットクリアー |
2 |
IBCLR |
INTEGER |
INTEGER |
前述の関数は、組み込み関数または外部関数として使用可能です。ライブラリのビット単位操作ルーチンについての詳細は、『Fortran ライブラリ・リファレンス』を参照してください。
次の関数はすべて FORTRAN 77 の規格外です。
表 3–7 FORTRAN 77 環境照会関数
定義 |
引数の数 |
総称名 |
引数の型 |
関数の型 |
---|---|---|---|---|
進法の基底 |
1 |
EPBASE |
INTEGER REAL DOUBLE REAL*16 |
INTEGER INTEGER INTEGER INTEGER |
有効ビット数 |
1 |
EPPREC |
INTEGER REAL DOUBLE REAL*16 |
INTEGER INTEGER INTEGER INTEGER |
最小指数 |
1 |
EPEMIN |
REAL DOUBLE REAL*16 |
INTEGER INTEGER INTEGER |
最大指数 |
1 |
EPEMAX |
REAL DOUBLE REAL*16 |
INTEGER INTEGER INTEGER |
最小非ゼロ数 |
1 |
EPTINY |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
表現可能の最大 |
1 |
EPHUGE |
INTEGER REAL DOUBLE REAL*16 |
INTEGER REAL DOUBLE REAL*16 |
イプシロン 注 (16) 参照。 |
1 |
EPMRSP |
REAL DOUBLE REAL*16 |
REAL DOUBLE REAL*16 |
次の関数はすべて FORTRAN 77 の規格外です。
表 3–8 FORTRAN 77 メモリー関数
組み込み関数 |
定義 |
引数の数 |
個別名 |
引数の型 |
関数の型 |
---|---|---|---|---|---|
位置 |
アドレス 注 (17) 参照。 |
1 |
LOC |
任意 |
INTEGER*4INTEGER*8 |
割り当て |
記憶領域の割り当てアドレスを戻す。 注 (17) 参照。 |
1 |
MALLOC MALLOC64 |
INTEGER*4 INTEGER*8 |
INTEGER INTEGER*8 |
割り当て解除 |
MALLOC で割り当てられた記憶領域の割り当て解除。注 (17) 参照。 |
1 |
FREE |
任意 |
- |
サイズ |
引数のサイズをバイト数で戻す。 注 (18) 参照。 |
1 |
SIZEOF |
任意の式 |
INTEGER |
次の注意は、本章のすべての組み込み関数表に適用されます。
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 と宣言されている必要があります。
この節では、f95 が識別する VMS Fortran 組み込みルーチンを表にして示します。これらは規格外です。¤
総称名 |
個別名 |
関数 |
引数の型 |
結果の型 |
---|---|---|---|---|
|
CDABS CDEXP CDLOG CDSQRT |
絶対値 指数、e**a 自然対数 平方根 |
COMPLEX*16 COMPLEX*16 COMPLEX*16 COMPLEX*16 |
REAL*8 COMPLEX*16 COMPLEX*16 COMPLEX*16 |
|
CDSIN CDCOS |
正弦 余弦 |
COMPLEX*16 COMPLEX*16 |
COMPLEX*16 COMPLEX*16 |
DCMPLX |
DCONJG DIMAG DREAL |
倍精度複素数への変換 共役複素数 複素数の虚部 複素数の実部 |
任意の数字 COMPLEX*16 COMPLEX*16 COMPLEX*16 |
COMPLEX*16 COMPLEX*16 REAL*8 REAL*8 |
総称名 |
個別名 |
関数 |
引数の型 |
結果の型 |
---|---|---|---|---|
SIND |
SIND DSIND QSIND |
正弦 |
- REAL*4 REAL*8 REAL*16 |
- REAL*4 REAL*8 REAL*16 |
COSD |
COSD DCOSD QCOSD |
余弦 |
- REAL*4 REAL*8 REAL*16 |
- REAL*4 REAL*8 REAL*16 |
TAND |
TAND DTAND QTAND |
正接 |
- REAL*4 REAL*8 REAL*16 |
- REAL*4 REAL*8 REAL*16 |
ASIND |
ASIND DASIND QASIND |
逆正弦 |
- REAL*4 REAL*8 REAL*16 |
- REAL*4 REAL*8 REAL*16 |
ACOSD |
ACOSD DACOSD QACOSD |
逆余弦 |
- REAL*4 REAL*8 REAL*16 |
- REAL*4 REAL*8 REAL*16 |
ATAND |
ATAND DATAND QATAND |
逆正接 |
- REAL*4 REAL*8 REAL*16 |
- REAL*4 REAL*8 REAL*16 |
ATAN2D |
ATAN2D DATAN2D QATAN2D |
a1/a2 の 逆正接 |
- REAL*4 REAL*8 REAL*16 |
- REAL*4 REAL*8 REAL*16 |
総称名 |
個別名 |
関数 |
引数の型 |
結果の型 |
---|---|---|---|---|
IBITS |
IIBITS JIBITS KIBITS |
a1 から、初期ビット a2、 a3 ビット抽出 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
ISHFT |
IISHFT JISHFT KISHFT |
a1 を論理的に a2 ビットシフト。a2 が正ならば左へ、a2 が負ならば右へシフト |
- INTEGER*2 INTEGER*4 INTEGER*8 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
ISHFTC |
IISHFTC JISHFTC |
a1 の右 a3 ビット、a2 桁だけ循環シフト |
- INTEGER*2 INTEGER*4 |
- INTEGER*2 INTEGER*4 |
IAND |
IIAND JIAND |
a1 と a2 のビット単位論理積 |
- INTEGER*2 INTEGER*4 |
- INTEGER*2 INTEGER*4 |
IOR |
IIOR JIOR KIOR |
a1 と a2 のビット単位論理和 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
IEOR |
IIEOR JIEOR KIEOR |
a1 と a2 のビット単位排他的論理和 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
NOT |
INOT JNOT KNOT |
ビット単位補数 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
IBSET |
IIBSET JIBSET KIBSET |
a1 で、ビット a2 を 1 に設定し、新しい a1 を戻す |
- INTEGER*2 INTEGER*4 INTEGER*8 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
BTEST |
BITEST BJTEST BKTEST |
a1 のビット a2 が 1 ならば .TRUE. を戻す |
- INTEGER*2 INTEGER*4 INTEGER*8 |
- LOGICAL LOGICAL LOGICAL |
IBCLR |
IIBCLR JIBCLR KIBCLR |
a1 で、ビット a2 を 0 に設定し、新しい a1 を戻す |
- INTEGER*2 INTEGER*4 INTEGER*8 |
- INTEGER*2 INTEGER*4 INTEGER*8 |
Fortran 規格では多重整数型を扱えるかどうかは表明されていません。 コンパイラでは特定の INTEGER から INTEGER 関数名 (IABS 等) を総称名の特別な種類として扱うことによって、複数の整数型に対処します。引数型を使用して適当な実行時ルーチン名が選択されますが、プログラマはこの名前を関知できません。
VMS Fortran は同じような方法を取りますが、個別名が使用できます。
表 3–12 VMS 整数関数
個別名 |
関数 |
引数の型 |
結果の型 |
---|---|---|---|
IIABS JIABS KIABS |
絶対値 |
INTEGER*2 INTEGER*4 INTEGER*8 |
INTEGER*2 INTEGER*4 INTEGER*8 |
IMAX0 JMAX0 |
最大 |
INTEGER*2 INTEGER*4 |
INTEGER*2 INTEGER*4 |
IMIN0 JMIN0 |
最小 |
INTEGER*2 INTEGER*4 |
INTEGER*2 INTEGER*4 |
IIDIM JIDIM KIDIM |
超過分 |
INTEGER*2 INTEGER*4 INTEGER*8 |
INTEGER*2 INTEGER*4 INTEGER*8 |
IMOD JMOD |
a1/a2 の剰余 |
INTEGER*2 INTEGER*4 |
INTEGER*2 INTEGER*4 |
IISIGN JISIGN KISIGN |
符号の付け替え、|a1|*sign(a2) |
INTEGER*2 INTEGER*4 INTEGER*8 |
INTEGER*2 INTEGER*4 INTEGER*8 |