Previous Next Contents Index Doc Set Home


組み込み関数

6


本章では、Sun Fortran の一部である組み込み関数を表に示します。Fortran のライブラリルーチンについての詳細は、『Fortran ライブラリ・リファレンスマニュアル』を参照してください。

ANSI Fortran 規格以外の組み込み関数には、 印を付けています。

組み込み関数が複数のデータ型の引数を受け取る場合、組み込み関数には個別名と総称名があります。通常、個別名を使用した場合の戻り値は、引数と同じデータ型です。特定のデータ型の引数を扱う場合には、個別名によって関数を呼び出します。

複数のデータ項目 (たとえば sign(a1,a2)) を扱う関数では、すべての引数が同じデータ型である必要があります。

それぞれの組み込み関数について、以下の項目が示されています。


注 - -dbl-i2-r8-xtypemap オプションを指定すると、変数のデフォルトのサイズが変わり、組み込み関数の引用に影響があります。548 ページの「注意」を参照してください。


算術関数と数学関数

算術関数、型変換関数、三角関数、その他の数学関数について説明します。

a は、関数の 1 つの引数を表わします。a1 および a2 はそれぞれ、関数の 1 つ目の引数、2 つ目の引数を表わしています。ar および ai はそれぞれ、関数の複素の引数の実部と虚部を表わしています。

REAL*16 および COMPLEX*12 は、SPARC および PowerPC でのみ有効です。

「注 (1) 参照」のような記述がある場合は、551 ページの「関数の注記」の該当する番号を参照してください。

算術関数

表 6-1 算術関数

組み込み関数 定義 引数の数 総称名 個別名
引数 関数
絶対値
注 (6) 参照
|a|

(ar2 + ai2)**(1/2)

1 ABS IABS INTEGER INTEGER
ABS REAL REAL
DABS DOUBLE DOUBLE
CABS CONPLEX REAL
QABS REAL*16 REAL*16
ZABS DOUBLE COMPLEX DOUBLE
CDABS DOUBLE COMPLEX DOUBLE
CQABS COMPLEX*32 REAL*16
切り捨て
注 (1) 参照
int(a) 1 AINT AINT REAL REAL
DINT DOUBLE DOUBLE
QINT REAL*16 REAL*16
四捨五入 a0 の場合 int(a+.5)

a<0 の場合 int(a-.5)

1 ANINT ANINT REAL REAL
DNINT DOUBLE DOUBLE
QNINT REAL*16 REAL*16
四捨五入の整数化 a0 の場合 int(a+.5)

a<0 の場合 int(a-.5)

1 NINT NINT REAL INTEGER
IDNINT DOUBLE INTEGER
IQNINT REAL*16 INTEGER
剰余
注 (1) 参照
a1-int(a1/a2)*a2 2 MOD MOD INTEGER INTEGER
AMOD REAL REAL
DMOD DOUBLE DOUBLE
QMOD REAL*16 REAL*16
符号の付け替え a20 の場合|a1|

a2<0 の場合 -|a1|

2 SIGN ISIGN INTEGER INTEGER
SIGN REAL REAL
DSIGN DOUBLE DOUBLE
QSIGN REAL*16 REAL*16
超過分 a1>a2 の場合 a1-a2

a1a2 の場合 0

2 DIM IDIM INTEGER INTEGER
DIM REAL REAL
DDIM DOUBLE DOUBLE
QDIM REAL*16 REAL*16
倍精度化または 4 倍精度化乗算 a1 * a2 2 - DPROD REAL DOUBLE
QPROD DOUBLE REAL*16
最大値の選択 max(a1, a2, ...) 2 MAX MAX0 INTEGER INTEGER
AMAX1 REAL REAL
DMAX1 DOUBLE DOUBLE
QMAX1 REAL*16 REAL*16
AMAX0 AMAX0 INTEGER REAL
MAX1 MAX1 REAL INTEGER
最小値の選択 min(a1, a2, ...) 2 MIN MIN0 INTEGER INTEGER
AMIN1 REAL REAL
DMIN1 DOUBLE DOUBLE
QMIN1 REAL*16 REAL*16
AMAX0 AMIN0 INTEGER REAL
MAX1 MIN1 REAL INTEGER

 型変換関数

表 6-2 型変換関数

変換型
(以下の型への変換)
引数の数 総称名 個別名
引数 関数
整数
注 (1) 参照
1 INT - INTEGER INTEGER
INT REAL INTEGER
IFIX REAL INTEGER
IDINT DOUBLE INTEGER
- COMPLEX INTEGER
- COMPLEX*16 INTEGER
- COMPLEX*32 INTEGER
IQINT REAL*16 INTEGER
実数
注 (2) 参照
1 REAL REAL INTEGER REAL
FLOAT INTEGER REAL
- REAL REAL
SNGL DOUBLE REAL
SNGLQ REAL*16 REAL
- COMPLEX REAL
- COMPLEX*16 REAL
- COMPLEX*32 REAL
倍精度
注 (3) 参照
1 DBLE DBLE INTEGER DOUBLE PRECISION
DFLOAT INTEGER DOUBLE PRECISION
DREAL REAL DOUBLE PRECISION
DBLEQ DOUBLE DOUBLE PRECISION
- REAL*16 DOUBLE PRECISION
- COMPLEX DOUBLE PRECISION
- COMPLEX*16 DOUBLE PRECISION
- COMPLEX*32 DOUBLE PRECISION
4 倍精度実数
注 (3') 参照
1 QREAL

QEXT

QREAL INTEGER REAL*16
QFLOAT INTEGER REAL*16
- REAL REAL*16
QEXT INTEGER REAL*16
QEXTD DOUBLE REAL*16
- REAL*16 REAL*16
- COMPLEX REAL*16
- COMPLEX*16 REAL*16
- COMPLEX*32 REAL*16
複素数
注 (4) と (8) 参照
1

または

2

CMPLX - INTEGER COMPLEX
- REAL COMPLEX
- DOUBLE COMPLEX
- REAL*16 COMPLEX
- COMPLEX COMPLEX
- COMPLEX*16 COMPLEX
- COMPLEX*32 COMPLEX
倍精度複素数
注 (8) 参照
1

または

2

DCMPLX - INTEGER DOUBLE COMPLEX
- REAL DOUBLE COMPLEX
- DOUBLE DOUBLE COMPLEX
- REAL*16 DOUBLE COMPLEX
- COMPLEX DOUBLE COMPLEX
- COMPLEX*16 DOUBLE COMPLEX
- COMPLEX*32 DOUBLE COMPLEX
4 倍精度複素数
注 (8) 参照
1

または

2

QCMPLX - INTEGER COMPLEX*32
- REAL COMPLEX*32
- DOUBLE COMPLEX*32
- REAL*16 COMPLEX*32
- COMPLEX COMPLEX*32
- COMPLEX*16 COMPLEX*32
- COMPLEX*32 COMPLEX*32
整数
注 (5) 参照
1 - ICHAR CHARACTER INTEGER
- IACHAR
文字
注 (5) 参照
1 - CHAR INTEGER CHARACTER
- ACHAR

ASCII マシン (Sun システムも含む) では、次のようになります。

ACHARIACHAR は、非 ASCII マシン用に ASCII を直接処理するための目的で提供されていました。

三角関数

表 6-3 三角関数

組み込み関数 定義 引数の数 総称名 個別名
引数 関数
正弦
注 (7) 参照
sin(a) 1 SIN SIN REAL REAL
DSIN DOUBLE DOUBLE
QSIN REAL*16 REAL*16
CSIN COMPLEX COMPLEX
ZSIN DOUBLE COMPLEX DOUBLE COMPLEX
CDSIN DOUBLE COMPLEX DOUBLE COMPLEX
CQSIN COMPLEX*32 COMPLEX*32
正弦 (度)
注 (7) 参照
sin(a) 1 SIND SIND REAL REAL
DSIND DOUBLE DOUBLE
QSIND REAL*16 REAL*16
余弦
注 (7) 参照
cos(a) 1 COS COS REAL REAL
DCOS DOUBLE DOUBLE
QCOS REAL*16 REAL*16
CCOS COMPLEX COMPLEX
ZCOS DOUBLE COMPLEX DOUBLE COMPLEX
CDCOS DOUBLE COMPLEX DOUBLE COMPLEX
CQCOS COMPLEX*32 COMPLEX*32
余弦 (度)
注 (7) 参照
cos(a) 1 COSD COSD REAL REAL
DCOSD DOUBLE DOUBLE
QCOSD REAL*16 REAL*16
正接
注 (7) 参照
tan(a) 1 TAN TAN REAL REAL
DTAN DOUBLE DOUBLE
QTAN REAL*16 REAL*16
正接 (度)
注 (7) 参照
tan(a) 1 TAND TAND REAL REAL
DTAND DOUBLE DOUBLE
QTAND REAL*16 REAL*16
逆正弦
注 (7) 参照
arcsin(a) 1 ASIN ASIN REAL REAL
DASIN DOUBLE DOUBLE
QASIN REAL*16 REAL*16
逆正弦 (度)
注 (7) 参照
arcsin(a) 1 ASIND ASIND REAL REAL
DASIND DOUBLE DOUBLE
QASIND REAL*16 REAL*16
逆余弦
注 (7) 参照
arccos(a) 1 ACOS ACOS REAL REAL
DACOS DOUBLE DOUBLE
QACOS REAL*16 REAL*16
逆余弦 (度)
注 (7) 参照
arccos(a) 1 ACOSD ACOSD REAL REAL
DACOSD DOUBLE DOUBLE
QACOSD REAL*16 REAL*16
逆正接
注 (7) 参照
arctan(a) 1 ATAN ATAN REAL REAL
DATAN DOUBLE DOUBLE
QATAN REAL*16 REAL*16
arctan(a1/a2) 2 ATAN2 ATAN2 REAL REAL
DATAN2 DOUBLE DOUBLE
QATAN2 REAL*16 REAL*16
逆正接 (度)
注 (7) 参照
arctan(a) 1 ATAND ATAND REAL REAL
DATAND DOUBLE DOUBLE
QATAND REAL*16 REAL*16
arctan(a1/a2) 2 ATAN2D ATAN2D REAL REAL
DATAN2D DOUBLE DOUBLE
QATAN2D REAL*16 REAL*16
双曲線正弦
注 (7) 参照
sinh(a) 1 SINH SINH REAL REAL
DSINH DOUBLE DOUBLE
QSINH REAL*16 REAL*16
双曲線余弦
注 (7) 参照
cosh(a) 1 COSH COSH REAL REAL
DCOSH DOUBLE DOUBLE
QCOSH REAL*16 REAL*16
双曲線正接
注 (7) 参照
tanh(a) 1 TANH TANH REAL REAL
DTANH DOUBLE DOUBLE
QTANH REAL*16 REAL*16

その他の数学関数

表 6-4 その他の数学関数

組み込み関数 定義 引数の数 総称名 個別名
引数 関数
複素数の虚部
注 (6) 参照
ai 1 IMAG AIMAG COMPLEX REAL
DIMAG DOUBLE COMPLEX DOUBLE
QIMAG COMPLEX*32 REAL*16
複素数の共役
注 (6) 参照
(ar, -ai) 1 CONJG CONJG COMPLEX COMPLEX
DCONJG DOUBLE COMPLEX DOUBLE COMPLEX
QCONJG COMPLEX*32 COMPLEX*32
平方根 1 SQRT SQRT REAL REAL
DSQRT DOUBLE DOUBLE
QSQRT REAL*16 REAL*16
CSQRT COMPLEX COMPLEX
ZSQRT DOUBLE COMPLEX DOUBLE COMPLEX
CDSQRT DOUBLE COMPLEX DOUBLE COMPLEX
CQSQRT COMPLEX*32 COMPLEX*32
立方根
注 (8') 参照
1 CBRT CBRT REAL REAL
DCBRT DOUBLE DOUBLE
QCBRT REAL*16 REAL*16
CCBRT COMPLEX COMPLEX
ZCBRT DOUBLE COMPLEX DOUBLE COMPLEX
CDCBRT DOUBLE COMPLEX DOUBLE COMPLEX
CQCBRT COMPLEX*32 COMPLEX*32
指数関数 ea 1 EXP EXP REAL REAL
DEXP DOUBLE DOUBLE
QEXP REAL*16 REAL*16
CEXP COMPLEX COMPLEX
ZEXP DOUBLE COMPLEX DOUBLE COMPLEX
CDEXP DOUBLE COMPLEX DOUBLE COMPLEX
CQEXP COMPLEX*32 COMPLEX*32
自然対数 log a 1 LOG ALOG REAL REAL
DLOG DOUBLE DOUBLE
QLOG REAL*16 REAL*16
CLOG COMPLEX COMPLEX
ZLOG DOUBLE COMPLEX DOUBLE COMPLEX
CDLOG DOUBLE COMPLEX DOUBLE COMPLEX
CQLOG COMPLEX*32 COMPLEX*32
常用対数 log 10a 1 LOG10 ALOG10 REAL REAL
DLOG10 DOUBLE DOUBLE
QLOG10 REAL*16 REAL*16
誤差関数 1 ERR ERF REAL REAL
DERF DOUBLE DOUBLE
誤差関数 1.0 - erfa 1 ERR ERFC REAL REAL
DERFC DOUBLE DOUBLE


文字関数

表 6-5 文字関数

組み込み関数 定義 引数の数 総称名 個別名
引数 関数
変換
注 (5) 参照
文字への変換 1 - CHAR INTEGER CHARACTER
- ACHAR
整数への変換 1 - ICHAR CHARACTER INTEGER
- IACHAR
(表 6-2 参照)
部分列の索引 文字列 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 システムも含む) では、次のようになります。

ACHARIACHAR は、非 ASCII マシン用に ASCII を直接処理するための目的で提供されていました。


その他の関数

ビット単位関数、環境照会関数、記憶領域の割り当ておよび割り当て解除関数について説明します。

ビット操作

表 6-6 ビット単位関数

ビット単位操作 引数の数 個別名
引数 関数
補数 1 NOT INTEGER INTEGER
論理積 2 AND INTEGER INTEGER
2 IAND INTEGER INTEGER
内包的論理和 2 OR INTEGER INTEGER
2 IOR INTEGER INTEGER
排他的論理和 2 XOR INTEGER INTEGER
2 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 ライブラリ・リファレンスマニュアル』を参照してください。

環境照会関数

表 6-7 環境照会関数

定義 引数の数 総称 個別名
引数 関数
進法の基底 1 EPBASE - INTEGER INTEGER
REAL INTEGER
DOUBLE INTEGER
REAL*16 INTEGER
有効ビット数 1 EPPREC - INTEGER INTEGER
REAL INTEGER
DOUBLE INTEGER
REAL*16 INTEGER
最小指数 1 EPEMIN - REAL INTEGER
DOUBLE INTEGER
REAL*16 INTEGER
最大指数 1 EPEMAX - REAL INTEGER
DOUBLE INTEGER
REAL*16 INTEGER
最小非ゼロ数 1 EPTINY - REAL REAL
DOUBLE DOUBLE
REAL*16 REAL*16
表現可能の最大 1 EPHUGE - INTEGER INTEGER
REAL REAL
DOUBLE DOUBLE
REAL*16 REAL*16
イプシロン
注 (16) 参照
1 EPMRSP - REAL REAL
DOUBLE DOUBLE
REAL*16 REAL*16

メモリー

表 6-8 メモリー関数

組み込み関数 定義 引数の数 総称名 個別名
引数 関数
位置 アドレス
注 (17) 参照
1 - LOC 任意 INTEGER
割り当て 記憶領域の割り当てアドレスを戻す。
注 (17) 参照
1 - MALLOC INTEGER INTEGER
割り当て解除 MALLOC で割り当てられた記憶領域の割り当て解除 1 - FREE 任意 -
サイズ 引数のサイズをバイト数で戻す。
注 (18) 参照
1 - SIZEOF 任意の式または型名 INTEGER

正確には、mallocfree は組み込み関数ではありません。これらについては、『Fortran ライブラリ・リファレンスマニュアル』でも説明しています。


注意

以下の注意は、本章のすべての組み込み関数表に適用されます。

以下の関数は、整数型または論理型の引数を扱うことができます。引数のサイズには制限はありません。

and iand ieor iiand iieor iior inot ior jiand
jieor jior jnot lrshft lshift not or rshift xor
jnot lrshft              


関数の注記

表および、以下の注記 (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

AREAL*16 型ならば、QREAL(A)A です。

A が整数型、実数型、または倍精度型ならば、QREAL(A)REAL*16 データが持ち得るのと同じ精度の、A の有効部分です。

A が複素数型または倍精度複素数型ならば、QREAL(A)REAL*16 データが持ち得るのと同じ精度の、A の実部の有効部分です。

ACONPLEX*16 型または COMPLEX*32 型ならば、QREAL(A)A の実部です。

(4) CMPLX

A が複素数型ならば、CMPLX(A)A です。

A が整数型、実数型、または倍精度型ならば、CMPLX(A)REAL(A) + 0i です。

A1A2 が整数型、実数型、または倍精度型ならば、CMPLX(A1,A2)REAL(A1) + REAL(A2)*i です。

A が倍精度複素数型ならば CMPLX(A)REAL(DBLE(A))+ i*REAL(DIMAG(A)) です。

CMPLX に引数が 2 個ある場合、同じ型でなければなりません。また、型は整数、実数、または倍精度のいずれかです。

CMPLX の引数が 1 個の場合、整数、実数、倍精度、複素数、CONPLEX*16 または COMPLEX*32 のいずれかです。

(4') DCMPLX

ACONPLEX*16 型ならば、DCMPLX(A)A です。

A が整数型、実数型、または倍精度型ならば、DCMPLX(A)DBLE(A) + 0i です。

A1A2 が整数型、実数型、または倍精度型ならば、DCMPLX(A1,A2)DBLE(A1) + DBLE(A2)*i です。

DCMPLX に引数が 2 個ある場合、同じ型でなければなりません。また、型は整数、実数、または倍精度のいずれかです。

DCMPLX の引数が 1 個の場合、整数、実数、倍精度、複素数、CONPLEX*16 型または COMPLEX*32 のいずれかです。

(5) ICHAR

ICHAR(A) は照合シーケンスの中の A の位置です。

先頭の位置は 0 で、最後は N-10ICHAR(A)N-1 です。ここで、N は照合シーケンスの中の文字数で、A は長さが 1 の文字型です。

CHAR および ICHAR は次に示すように逆の関係です。

(6) 複素数

複素数値は順に並べた実数の組み合わせ (ar,ai) で表します。ここで、ar は実部で、ai は虚部です。

(7) ラジアン

角度はすべてラジアンで表します。ただし、"組み込み関数"の列に"(度)"の表記がある場合は除きます。

(8) 複素数の関数

複素数型の関数の結果は、主値です。

(8') CBRT

aCOMPLEX 型ならば、CBRT の結果は COMPLEX RT1=(A, B) となります。
このとき、 A 0.0、 -60 度 arctan (B/A) < +60 度 です。

以下のようになる場合もあります。

(9) 引数型

組み込み関数引用の中のすべての引数は、同じ型でなければなりません。

(10) INDEX

INDEX(X,Y) は、X の中の Y が始まる場所です。つまり、文字列 X の中で文字列 Y が最初に始まる位置です。

YX の中にない場合は、INDEX(X,Y) は 0 です。

LEN(X) < LEN(Y) ならば、INDEX(X,Y) は 0 です。

(11) LEN の引数

LEN 関数の引数の値は、関数引用が実行される時点で定義される必要はありません。

(12) 字句比較

LGE(X, Y) は、X=Y または照合シーケンスの中で XY に続くならば真です。その他の場合は偽です。

LGT(X, Y) は、照合シーケンスの中で XY に続くならば真です。その他の場合は偽です。

LLE(X, Y) は、X=Y または照合シーケンスの中で、XY の前にあるならば真です。その他の場合は偽です。

LLT(X, Y) は、照合シーケンスの中で XY の前にあるならば真です。その他の場合は偽です。

LGELGTLLE、および LLT のオペランドの長さが違うと、短い方のオペランドの右を空白で拡張したように見なされます。

(13) ビット関数

ビット単位操作の詳細については、付録 D「VMS 言語拡張」を参照してください。

(14) シフト

LSHIFT は、a1a2 ビットだけ論理的に左にシフトします (インラインコード)。
LRSHFT は、a1a2 ビットだけ論理的に右にシフトします (インラインコード)。
RSHIFT は、a1a2 ビットだけ算術的に右にシフトします。
ISHIFT は、a1a2>0 ならば論理的に左に、a2<0 ならば論理的に右にシフトします。

LSHIFTRSHIFT 関数は、C<< および >> 演算子の Fortran の類似機能です。C と同様、その意味はハードウェアにより異なります。

範囲外のシフトカウントによるシフト関数の動作は、ハードウェアによって異なり、通常は予測できません。このリリースの Fortran では、31 を超えるシフトカウントは、ハードウェアによってことなります。

(15) 環境照合

引数の型だけに意味があります。

(16) イプシロン

イプシロンは、1.0 + e1.0 であるような最小の e です。

(17) LOCMALLOC

LOC 関数は変数または外部手続きの 32 ビットアドレスを返します。MALLOC(n) 関数呼び出しは、少なくとも n バイトのブロックを割り当て、そのブロックの 32 ビットアドレスを返します。

(18) SIZEOF

SIZEOF 組み込み関数は、大きさ引き継ぎ配列、引き渡された文字の長さ、サブルーチン呼び出しや名前には適用できません。


VMS 組み込み関数

本節では、f77 が識別する VMS Fortran 組み込みルーチンを表にして示します。これらは規格外です。

倍精度複素数

表 6-9 倍精度複素数関数

総称名 個別名 関数 引数の型 結果の型
  CDABS 絶対値 COMPLEX*16 REAL*8
CDEXP 指数、e**a COMPLEX*16 COMPLEX*16
CDLOG 自然対数 COMPLEX*16 COMPLEX*16
CDSQRT 平方根 COMPLEX*16 COMPLEX*16
  CDSIN 正弦 COMPLEX*16 COMPLEX*16
CDCOS 余弦 COMPLEX*16 COMPLEX*16
DCMPLX   倍精度複素数への変換 任意の数字 COMPLEX*16
DCONJG 共役複素数 COMPLEX*16 COMPLEX*16
DIMAG 複素数の虚部 COMPLEX*16 REAL*8
DREAL 複素数の実部 COMPLEX*16 REAL*8

度単位を用いる三角関数

表 6-10 度単位を用いる三角関数

総称名 個別名 関数 引数の型 結果の型
SIND   正弦 - -
SIND 正弦 REAL*4 REAL*4
DSIND 正弦 REAL*8 REAL*8
QSIND 正弦 REAL*16 REAL*16
COSD   余弦 - -
COSD 余弦 REAL*4 REAL*4
DCOSD 余弦 REAL*8 REAL*8
QCOSD 余弦 REAL*16 REAL*16
TAND   正接 - -
TAND 正接 REAL*4 REAL*4
DTAND 正接 REAL*8 REAL*8
QTAND 正接 REAL*16 REAL*16
ASIND   逆正弦 - -
ASIND 逆正弦 REAL*4 REAL*4
DASIND 逆正弦 REAL*8 REAL*8
QASIND 逆正弦 REAL*16 REAL*16
ACOSD   逆余弦 - -
ACOSD 逆余弦 REAL*4 REAL*4
DACOSD 逆余弦 REAL*8 REAL*8
QACOSD 逆余弦 REAL*16 REAL*16
ATAND   逆正接 - -
ATAND 逆正接 REAL*4 REAL*4
DATAND 逆正接 REAL*8 REAL*8
QATAND 逆正接 REAL*16 REAL*16
ATAN2D   a1/a2 の 逆正接 - -
ATAN2D a1/a2 の 逆正接 REAL*4 REAL*4
DATAN2D a1/a2 の 逆正接 REAL*8 REAL*8
QATAN2D a1/a2 の 逆正接 REAL*16 REAL*16

ビット操作

表 6-11 ビット操作関数

総称名 個別名 関数 引数の型 結果の型
IBITS   a1 から、初期ビット a2a3 ビット抽出 - -
IIBITS a1 から、初期ビット a2a3 ビット抽出 INTEGER*2 INTEGER*2
JIBITS a1 から、初期ビット a2a3 ビット抽出 INTEGER*4 INTEGER*4
ISHFT   a1 を論理的に a2 ビットシフト * - -
IISHFT a1 を論理的に左に a2 ビットシフト INTEGER*2 INTEGER*2
JISHFT a1 を論理的に左に a2 ビットシフト INTEGER*4 INTEGER*4
ISHFTC   a1 の右 a3 ビット、 a2 桁だけ循環シフト - -
IISHFTC a1 の右 a3 ビット、 a2 桁だけ循環シフト INTEGER*2 INTEGER*2
JISHFTC a1 の右 a3 ビット、 a2 桁だけ循環シフト INTEGER*4 INTEGER*4
IAND   a1a2 のビット単位論理積 - -
IIAND a1a2 のビット単位論理積 INTEGER*2 INTEGER*2
JIAND a1a2 のビット単位論理積 INTEGER*4 INTEGER*4
IOR   a1a2 のビット単位論理和 - -
IIOR a1a2 のビット単位論理和 INTEGER*2 INTEGER*2
JIOR a1a2 のビット単位論理和 INTEGER*4 INTEGER*4
IEOR   a1a2 のビット単位排他的論理積 - -
IIEOR a1a2 のビット単位排他的論理積 INTEGER*2 INTEGER*2
JIEOR a1a2 のビット単位排他的論理積 INTEGER*4 INTEGER*4
NOT   ビット単位補数 - -
INOT ビット単位補数 INTEGER*2 INTEGER*2
JNOT ビット単位補数 INTEGER*4 INTEGER*4
IBSET   a1 で、ビット a2 を 1 に設定 - -
IIBSET a1 で、ビット a2 を 1 に設定し、新しい a1 を戻す INTEGER*2 INTEGER*2
JIBSET a1 で、ビット a2 を 1 に設定し、新しい a1 を戻す INTEGER*4 INTEGER*4
BTEST   a1 のビット a2 が 1 ならば、.TURE. を戻す - -
BITEST a1 のビット a2 が 1 ならば、.TURE. を戻す INTEGER*2 INTEGER*2
BJTEST a1 のビット a2 が 1 ならば、.TURE. を戻す INTEGER*4 INTEGER*4
IIBCLR   a1 で、ビット a2 を 0 に設定し、新しい a1 を戻す - -
IIBCLR a1 で、ビット a2 を 0 に設定し、新しい a1 を戻す INTEGER*2 INTEGER*2
JIBCLR a1 で、ビット a2 を 0 に設定し、新しい a1 を戻す INTEGER*4 INTEGER*4

*ISHIFT -- a2 が正ならば左へシフトし、負ならば右へシフト。

多重整数型

Fortran 77 規格では多重整数型を扱えるかどうかは表明されていません。f77 では特定の INTEGER INTEGER 関数名 (IABS 等) を総称名の特別な種類として扱うことによって、複数の整数型に対処します。引数型を使用して適当な実行時ルーチン名が選択されますが、プログラマはこの名前を関知できません。

VMS Fortran は同じような方法を取りますが、個別名が使用できます。

表 6-12 整数関数

個別名 関数 引数の型 結果の型
IIABS 絶対値 INTEGER*2 INTEGER*2
JIABS 絶対値 INTEGER*4 INTEGER*4
IMAX0 最大 1 INTEGER*2 INTEGER*2
JMAX0 最大 1 INTEGER*4 INTEGER*4
IMIN0 最小 1 INTEGER*2 INTEGER*2
JMIN0 最小 1 INTEGER*4 INTEGER*4
IIDIM 超過分 2 INTEGER*2 INTEGER*2
JIDIM 超過分 2 INTEGER*4 INTEGER*4
IMOD a1/a2 の剰余 INTEGER*2 INTEGER*2
JMOD a1/a2 の剰余 INTEGER*4 INTEGER*4
IISIGN 符号の付け替え、|a1|* sign(a2) INTEGER*2 INTEGER*2
JISIGN 符号の付け替え、|a1|* sign(a2) INTEGER*4 INTEGER*4
1 引数は少なくても 2 個 でなければならない

2 超過分 a1-min(a1,a2)

特定型に強制的に解釈される関数

VMS Fortran 関数の中には、強制的に特定の INTEGER 型にする関数があります。

表 6-13 VMS が特定型へ強制的に変換する関数

個別名 関数 引数の型 結果の型
IINT ゼロへ切り捨て REAL*4 INTEGER*2
JINT ゼロへ切り捨て REAL*4 INTEGER*4
IIDINT ゼロへ切り捨て REAL*8 INTEGER*2
JIDINT ゼロへ切り捨て REAL*8 INTEGER*4
IIQINT ゼロへ切り捨て REAL*16 INTEGER*2
JIQINT ゼロへ切り捨て REAL*16 INTEGER*4
ININT 四捨五入、INT(a+.5*sign(a)) REAL*4 INTEGER*2
JNINT 四捨五入、INT(a+.5*sign(a)) REAL*4 INTEGER*4
IIDNNT 四捨五入、INT(a+.5*sign(a)) REAL*8 INTEGER*2
JIDNNT 四捨五入、INT(a+.5*sign(a)) REAL*8 INTEGER*4
IIQNNT 四捨五入、INT(a+.5*sign(a)) REAL*16 INTEGER*2
JIQNNT 四捨五入、INT(a+.5*sign(a)) REAL*16 INTEGER*4
IIFIX 固定 REAL*4 INTEGER*2
JIFIX 固定 REAL*4 INTEGER*4
IMAX1(a,a2, ...) 2 つ以上の引数の最大値 REAL*4 INTEGER*2
JMAX1(a,a2, ...) 2 つ以上の引数の最大値 REAL*4 INTEGER*4
IMIN1(a,a2, ...) 2 つ以上の引数の最小値 READ*4 INTEGER*2
JMIN1(a,a2, ...) 2 つ以上の引数の最小値 READ*4 INTEGER*4

総称名へ変換される関数

場合によっては、VMS 個別名は f77 総称名へ変換されます。

表 6-14 f77 総称名へ変換される VMS 関数

個別名 関数 引数の型 結果の型
FLOATI REAL*4 へ変換 INTEGER*2 REAL*4
FLOATJ REAL*4 へ変換 INTEGER*4 REAL*4
DFLOTI REAL*8 へ変換 INTEGER*2 REAL*8
DFLOTJ REAL*8 へ変換 INTEGER*4 REAL*8
AIMAX0 最大 INTEGER*2 REAL*4
AJMAX0 最大 INTEGER*4 REAL*4
AIMIN0 最小 INTEGER*2 REAL*4
AJMIN0 最小 INTEGER*4 REAL*4

ゼロ拡張

次のゼロ拡張関数は、f77 により識別されます。最初使用されない上位ビットはゼロに設定され、表で示された幅まで最上位ビットの方向へ拡張されます。

表 6-15 ゼロ拡張変換

総称名 個別名 関数 引数の型 結果の型
ZEXT 総称 ゼロ拡張 - -
  IZEXT ゼロ拡張 BYTE
LOGICAL*1
LOGICAL*2 INTEGER*2
INTEGER*2
  JZEXT ゼロ拡張 BYTE
LOGICAL*1 LOGICAL*2
LOGICAL*4
INTEGER
INTEGER*2
INTEGER*4
INTEGER*4




Previous Next Contents Index Doc Set Home