第 6 章
組み込み関数
この章では、Sun WorkShop FORTRAN 77 の一部である組み込み関数を表に示します。Fortran のライブラリルーチンについての詳細は、『Fortran ライブラリ・リファレンス』を参照してください。
ANSI FORTRAN 77 規格以外の組み込み関数には、 © 印を付けています。
組み込み関数が複数のデータ型の引数を受け取る場合、組み込み関数には個別名と総称名があります。通常、個別名を使用した場合の戻り値は、引数と同じデータ型になりますが、型変換関数 (表 6-2) や照会関数 (表 6-7) などの例外もあります。特定のデータ型の引数を扱う場合には、個別名によって関数を呼び出します。
複数のデータ項目 (たとえば sign(a1,a2)
) を扱う関数では、すべての引数が同じデータ型である必要があります。
それぞれの組み込み関数について、以下の項目が示されています。
- 組み込み関数 - 関数の説明
- 定義 - 数学的な定義
- 引数の個数 - 関数が受け取る引数の個数
- 総称名 - 関数の総称名
- 個別名 - 関数の個別名
- 引数のデータ型 - 各個別名に対応するデータ型
- 関数のデータ型 - 特定のデータ型の引数に対する戻り値のデータ型
注 - -dbl、-i2、-r8、-xtypemap
オプションを指定すると、変数のデフォルトのサイズが変わり、組み込み関数の引用に影響があります。「注意」、および 「データ型のサイズと整列条件」に記述されたデフォルトサイズと整列条件を参照してください。
算術関数と数学関数
算術関数、型変換関数、三角関数、その他の数学関数について説明します。
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 システムも含む) では、次のようになります。
ACHAR
は CHAR
の規格外の同義語です。
IACHAR
は ICHAR
の規格外の同義語です。
ACHAR
と IACHAR
は、非 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
|
- 誤差関数 : 2/sqrt (pi)* x
文字関数
表 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 システムも含む) では、次のようになります。
ACHAR
は CHAR
の規格外の同義語です。
IACHAR
は ICHAR
の規格外の同義語です。
ACHAR
と IACHAR
は、非 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 ライブラリ・リファレンス』やマニュアルページで説明しています。
注意
以下の注意は、本章のすべての組み込み関数表に適用されます。
DOUBLE
は倍精度を意味します。
INTEGER
引数を取る組み込み関数は、INTEGER*2、INTEGER*4
または INTEGER*8
も使用できます。
INTEGER
値を戻す組み込み関数は、以下のような条件で INTEGER
型を返します。-i2、-dbl、-xtypemap
オプションを指定すると、実引数のデフォルトのサイズが変わります。
-
mod、sign、dim、max、min、and、iand、or、ior、xor、および
ieor
の場合、戻り値のサイズは、引数の最大サイズになります。
-
abs、ishift、lshift、rshift、lrshft、ibset、btest、ivclr、ishftc、および
ibits
の場合、戻り値のサイズは、最初の引数のサイズになります。
-
int、epbase、epprec、
および irshift、
の場合、戻り値のサイズは、デフォルトの INTEGER
のサイズになります。
-
ephuge
の場合、戻り値のサイズは、INTEGER
または引数の大きい方のサイズになります。
- デフォルトのデータサイズを変更するオプション (「データ型のサイズと整列条件」を参照) の場合、一部の組み込み関数の使用方法も変わります。たとえば、
-dbl
オプションを指定している場合、DOUBLE COMPLEX
の引数による ZCOS
への呼び出しは、自動的に CQCOS
への呼び出しになります。引数は COMPLEX*32
にならないためです。以下の関数にも、上述のような機能があります。
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
|
- (SPARC のみ) デフォルトの
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
と
-db1
があります。これらのオプションも 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
が CONPLEX*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 個の場合、整数、実数、倍精度、複素数、CONPLEX*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 個の場合、整数、実数、倍精度、複素数、CONPLEX*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) 複素数
- 複素数値は順に並べた実数の組み合わせ (
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,
)
-
RT3 = RT1 * (-0.5,
)
(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
の上限 (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
または照合シーケンスの中で 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 言語拡張」を参照してください。
(14)シフト
-
LSHIFT
は、a1 を a2 ビットだけ論理的に左にシフトします (インラインコード)。
LRSHFT
は、a1 を a2 ビットだけ論理的に右にシフトします (インラインコード)。
RSHIFT
は、a1 を a2 ビットだけ算術的に右にシフトします。
ISHIFT
は、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
はライブラリ関数であり、組み込み関数ではありません。MALLOC
も同様に 32 ビット環境ではデフォルトの INTEGER*4
を返し、64 ビット環境では INTEGER*8
を返します。ただし、64 ビット環境用にコンパイルする場合は、MALLOC
は明示的に INTEGER*8
と宣言されていなければなりません。
LOC
または MALLOC
から戻される値は、POINTER
、INTEGER*4
、または 64 ビット環境では INTEGER8*
の型の変数 に格納されます。FREE
に渡す引数は、その前の MALLOC
への呼び出しによって戻された値でなければなりません。したがって、データ型は POINTER
、INTEGER*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
|