FORTRAN 77 言語リファレンス ホーム目次前ページへ次ページへ索引


第 6 章

組み込み関数

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

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

組み込み関数が複数のデータ型の引数を受け取る場合、組み込み関数には個別名と総称名があります。通常、個別名を使用した場合の戻り値は、引数と同じデータ型になりますが、型変換関数 (表 6-2) や照会関数 (表 6-7) などの例外もあります。特定のデータ型の引数を扱う場合には、個別名によって関数を呼び出します。

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

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

算術関数と数学関数

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

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

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

算術関数

表 6-1   算術関数
組み込み関数 定義 引数の数 総称名 個別名 引数の型 関数の型
絶対値
 注 (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 の場合nt(a-.5) 1
ANINT
ANINT
DNINT
QNINT ©
REAL
DOUBLE
REAL*16
REAL
DOUBLE
REAL*16 
四捨五入の
整数化

a 0 の場合 int(a+.5) a < 0 の場合 nt(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-a20 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


 型変換関数

表 6-2   型変換関数  
変換型
(以下の型への変換)
引数の数 総称名 個別名
引数 関数
整数
注 (1) 参照
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
実数
注 (2) 参照
1
REAL
REAL
FLOAT
-
SNGL
SNGLQ ©
-
-
-
INTEGER
INTEGER
REAL
DOUBLE
REAL*16
COMPLEX
COMPLEX*16
COMPLEX*32
REAL
REAL
REAL
REAL
REAL
REAL
REAL
REAL
倍精度
注 (3) 参照

1
DBLE
DBLE
DFLOAT
DREAL ©
-
-
-
DBLEQ ©
-
INTEGER
INTEGER
REAL
DOUBLE
COMPLEX
COMPLEX*16
REAL*16
COMPLEX*32
REAL*16
COMPLEX*32
DOUBLE PRECISION
DOUBLE PRECISION
DOUBLE PRECISION
DOUBLE PRECISION
DOUBLE PRECISION
DOUBLE PRECISION
DOUBLE PRECISION
DOUBLE PRECISION
DOUBLE PRECISION
DOUBLE PRECISION
4 倍精度実数
注 (3') 参照

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
複素数
注 (4) と (8) 参照

1

または

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

1

 
または

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

1

または

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


ASCII プラットフォーム (Sun システムも含む) では、次のようになります。

ACHARIACHAR は、非 ASCII プラットフォーム用に ASCII を直接処理するための目的で提供されていました。

三角関数

表 6-3   三角関数  
組み込み
関数
定義 引数の数 総称名 個別名
引数 関数
正弦
注 (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-4   その他の数学関数 
組み込み関数 定義 引数の数 総称名 個別名
引数 関数
複素数の虚部
注 (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
ERR
ERF ©
DERF ©
REAL
DOUBLE

REAL
DOUBLE

誤差関数
1.0 - 
erf(a)
1
ERR
ERFC ©
DERFC ©
REAL
DOUBLE
REAL
DOUBLE


文字関数

表 6-5   文字関数
I組み込み関数 定義 引数の数 個別名 引数の型 関数の型
変換
注 (5) 参照

文字への変換

 
整数への変換
(表 6-2 参照)

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 システムも含む) では、次のようになります。

ACHARIACHAR は、非 ASCII プラットフォーム用に ASCII を直接処理するための目的で提供されていました。

その他の関数

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

ビット操作 \xa9

以下の関数はすべて FOTRAN 77 の規格外です。

表 6-6   ビット単位関数
ビット単位操作

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

環境照会関数 \xa9

以下の関数はすべて FOTRAN 77 の規格外です。

表 6-7   環境照会関数
定義 引数の数 総称
引数 関数
進法の基底
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


メモリー \xa9

以下の関数はすべて FOTRAN 77 の規格外です。

表 6-8   メモリー関数
組み込み関数 定義 引数の数 個別名
引数 関数
位置
アドレス 
注 (17) 参照
1
LOC
任意
INTEGER*4
INTEGER*8
割り当て
記憶領域の割り当てアド
レスを戻す。
注 (17) 参照
1
MALLOC
MALLOC64
INTEGER*4
INTEGER*8
INTEGER
INTEGER*8
割り当て解除
MALLOC で割り当てられ
た記憶領域の割り当て解
除
注 (17) 参照
1
FREE
任意
-
サイズ
引数のサイズをバイト数
で戻す。
注 (18) 参照
1
SIZEOF
任意の式
INTEGER 


正確には、malloc (3F) と free (3F) は組み込み関数ではありません。これらについては、『Fortran ライブラリ・リファレンス』でも説明しています。さらに、isetjmp(3F)、longjmp(3F)、date_and_time(3F) などの規格外の組込み関数については、『Fortran ライブラリ・リファレンス』やマニュアルページで説明しています。

注意

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

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

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


関数の注記

表および、以下の注記 (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 は次に示すように逆の関係です。

  • ICHAR(CHAR(I)) = I、このとき 0IN-1
  • CHAR(ICHAR(C)) = C、ここで C はその CPU で表現できる任意の文字。

(6) 複素数

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

(7) ラジアン

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

(8) 複素数の関数

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

(8')CBRT

aCOMPLEX 型ならば、CBRT の結果は COMPLEX RT1=(A, B) となります。
このとき、 A >= 0.0、 -60 度 <= arctan (B/A) < +60 度 です。
以下のようになる場合もあります。

  • RT2 = RT1 * (-0.5, )
  • RT3 = RT1 * (-0.5, )

(9) 引数型

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

(10)INDEX

INDEX(X,Y) は、X の中の Y が始まる場所です。つまり、文字列 X の中で文字列 Y が最初に始まる位置です。
YX の中にない場合は、INDEX(X,Y) は 0 です。
LEN(X) < LEN(Y) ならば、INDEX(X,Y) は 0 です。

INDEX はデフォルトの INTEGER*4 のデータを返します。64 ビット環境のコンパイルでは、結果が INTEGER*4 のデータ範囲を超えると警告が出されます。64 ビット環境で、INDEX 文に INTEGER*4 の上限 (2 G バイト) を超える文字列を使用する場合は、INDEX 関数と結果を受け取る変数が INTEGER*8 に宣言されていなければなりません。

(11)LEN の引数

LEN は、引数の CHARACTER 変数の宣言された長さを返します。引数の実際の値には重要性はありません。

LEN はデフォルトの INTEGER*4 のデータを返します。64 ビット環境のコンパイルでは、結果が INTEGER*4 のデータ範囲を超えると警告が出されます。64 ビット環境で、LEN 文に INTEGER*4 の上限 (2 Gバイト) を超える文字変数を使用する場合は、LEN 関数と結果を受け取る変数が INTEGER*8 に宣言されていなければなりません。

(12)字句比較

LGE(X, Y) は、X=Y または照合シーケンスの中で XY に続くならば真です。その他の場合は偽です。
LGT(X, Y) は、照合シーケンスの中で XY に続くならば真です。その他の場合は偽です。
LLE(X, Y) は、X=Y または照合シーケンスの中で、XY の前にあるならば真です。その他の場合は偽です。
LLT(X, Y) は、照合シーケンスの中で XY の前にあるならば真です。その他の場合は偽です。
LGE、LGT、LLE、および LLT のオペランドの長さが違うと、短い方のオペランドの右を空白で拡張したように見なされます。

(13)ビット関数

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

(14)シフト

LSHIFT は、a1a2 ビットだけ論理的に左にシフトします (インラインコード)。
LRSHFT は、a1a2 ビットだけ論理的に右にシフトします (インラインコード)。
RSHIFT は、a1a2 ビットだけ算術的に右にシフトします。
ISHIFT は、a1a2>0 ならば論理的に左に、a2<0 ならば論理的に右にシフトします。
LSHIFTRSHIFT 関数は、C<< および >> 演算子の Fortran の類似機能です。C と同様、その意味はハードウェアにより異なります。
範囲外のシフトカウントによるシフト関数の動作は、ハードウェアによって異なり、通常は予測できません。このリリースの Fortran では、31 を超えるシフトカウントは、ハードウェアによってことなります。

(15)環境照合

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

(16)イプシロン

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

(17)LOCMALLOCFREE

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

LOC は、32 ビット環境ではデフォルトの INTEGER*4 を返し、64 ビット環境では INTEGER*8 を返します。

MALLOC はライブラリ関数であり、組み込み関数ではありません。MALLOC も同様に 32 ビット環境ではデフォルトの INTEGER*4 を返し、64 ビット環境では INTEGER*8 を返します。ただし、64 ビット環境用にコンパイルする場合は、MALLOC は明示的に INTEGER*8 と宣言されていなければなりません。

LOC または MALLOC から戻される値は、POINTERINTEGER*4、または 64 ビット環境では INTEGER8* の型の変数 に格納されます。FREE に渡す引数は、その前の MALLOC への呼び出しによって戻された値でなければなりません。したがって、データ型は POINTERINTEGER*4、または INTEGER8* になります。

MALLOC64 は、常に INTEGER*8 の引数 (バイト単位のメモリー要求のサイズ) を受け取り、常に INTEGER*8 の値を返します。32 ビット環境と 64 ビット環境の両方で稼働するプログラムをコンパイルしなければならない場合は、MALLOC ではなくこのルーチンを使用します。受け取る変数は POINTER または INTEGER*8 に宣言されていなければなりません。

(18)SIZEOF

SIZEOF 組み込み関数は、大きさ引き継ぎ配列、引き渡された文字の長さ、サブルーチン呼び出しや名前には適用できません。SIZEOF はデフォルトの INTEGER*4 のデータを返します。64 ビット環境用にコンパイルする場合は、結果が INTEGER*4 のデータ範囲を超えると警告が出されます。64 ビット環境で、SIZEOF 文に INTEGER*4 の上限 (2 Gバイト) を超える配列を使用する場合は、SIZEOF 関数と結果を受け取る変数が INTEGER*8 に宣言されていなければなりません。

VMS 組み込み関数 \xa9

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

VMS 倍精度複素数

表 6-9   VMS 倍精度複素数関数
総称名 個別名 関数 引数の型 結果の型

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 


VMS 度単位を用いる三角関数

表 6-10   vms 度単単位を用いる三角関数
総称名 個別名 関数 引数の型 結果の型
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


VMS ビット操作

表 6-11   vms ビット操作関数
総称名 個別名
関数
引数の型 結果の型
IBITS

 
IIBITS
JIBITS
a1 から、初期ビット a2、a3 ビット抽
出

-
INTEGER*2
INTEGER*4
-
INTEGER*2
INTEGER*4
ISHFT

 

 
IISHFT
JISHFT
a1 を論理的に a2 ビットシフト。a2 が
正ならば左へ、負ならば右へシフト。
a1 を論理的に左に a2 ビットシフト
a1 を論理的に左に a2 ビットシフト

-

 
INTEGER*2
INTEGER*4
-

 
INTEGER*2
INTEGER*4
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
a1 と a2 のビット単位論理和

-
INTEGER*2
INTEGER*4
-
INTEGER*2
INTEGER*4
IEOR

 
IIEOR
JIEOR
a1 と a2 のビット単位排他的論理積

-
INTEGER*2
INTEGER*4
-
INTEGER*2
INTEGER*4
NOT

 
INOT
JNOT
ビット単位補数

-
INTEGER*2
INTEGER*4
-
INTEGER*2
INTEGER*4
IBSET


 
IIBSET
JIBSET
a1 で、ビット a2 を 1 に設定
a1 で、ビット a2 を 1 に設定し、
新しい a1 を戻す
a1 で、ビット a2 を 1 に設定し、
新しい a1 を戻す
-
INTEGER*2
INTEGER*4
-
INTEGER*2
INTEGER*4
BTEST

BITEST
BJTEST
a1 のビット a2 が 1 ならば、
.TURE. を戻す
-
INTEGER*2
INTEGER*4
-
INTEGER*2
INTEGER*4
IBCLR

IIBCLR
JIBCLR
a1 で、ビット a2 を 0 に設定し、
新しい a1 を戻す
-
INTEGER*2
INTEGER*4
-
INTEGER*2
INTEGER*4


VMS 多重整数型

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

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

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

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


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

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

表 6-13   VMS が特定型へ強制的に変換する関数
個別名 関数 引数の型 結果の型
IINT
JINT
LINT
ゼロへ切り捨て
ゼロへ切り捨て
ゼロへ切り捨て
REAL*4
REAL*4
REAL*4
INTEGER*2 
INTEGER*4 
INTEGER*8
IIDINT
JIDINT
ゼロへ切り捨て
ゼロへ切り捨て
REAL*8
REAL*8
INTEGER*2 
INTEGER*4 
IIQINT
JIQINT
ゼロへ切り捨て
ゼロへ切り捨て
REAL*16
REAL*16
INTEGER*2 
INTEGER*4 
ININT
JNINT
四捨五入、INT(a+.5*sign(a))
四捨五入、INT(a+.5*sign(a))

REAL*4
REAL*4
INTEGER*2 
INTEGER*4 
IIDNNT
JIDNNT
四捨五入、INT(a+.5*sign(a))
四捨五入、INT(a+.5*sign(a))

REAL*8
REAL*8
INTEGER*2 
INTEGER*4 
IIQNNT
JIQNNT
四捨五入、INT(a+.5*sign(a)) 四捨五入、INT(a+.5*sign(a))
REAL*16
REAL*16
INTEGER*2 
INTEGER*4 
IIFIX
JIFIX
固定
固定
REAL*4
REAL*4
INTEGER*2 
INTEGER*4 
IMAX1(a,a2,...)
JMAX1(a,a2,...)
2 つ以上の引数の最大値
2 つ以上の引数の最大値
REAL*4
REAL*4
INTEGER*2 
INTEGER*4 
IMIN1(a,a2,...)
JMIN1(a,a2,...)
2 つ以上の引数の最小値
2 つ以上の引数の最小値
READ*4
READ*4
INTEGER*2 
INTEGER*4


総称名へ変換される関数

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

表 6-14   f77 総称名へ変換される VMS 関数
Specific Names Function Argument Type Result Type
FLOATI
FLOATJ
REAL*4 へ変換
REAL*4 へ変換
INTEGER*2
INTEGER*4
REAL*4
REAL*4
DFLOTI
DFLOTJ
REAL*8 へ変換
REAL*8 へ変換
INTEGER*2
INTEGER*4
REAL*8
REAL*8
AIMAX0
AJMAX0
最大
最大
INTEGER*2
INTEGER*4
REAL*4
REAL*4
AIMIN0
AJMIN0
最小
最小
INTEGER*2
INTEGER*4
REAL*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 



サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.
ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引