4章:関数とサブルーチン
4.1 組み込み関数
組み込み関数とは、あらかじめFortranのプログラミング言語の中に用意されている関数のことである。
- 数値関数…基本的な数値演算や型変換を行う
- 数学関数…基本的な数学計算を行う
- 文字関数…文字列の演算・操作を行う
- ビット関数…ビットの演算・操作を行う
- 配列関数…配列の演算・操作を行う
など、多くの組み込み関数が用意されている。
4.1.1 組み込み関数の利用
組み込み関数を利用する場合は、関数名と引数(実引数)を、次のように記述する。
組み込み関数名(引数1,引数2,……,引数n)
(例)SQRT関数を用いて、直角三角形の斜辺ともう一辺の長さから、残りの一辺の長さを求める。
PROGRAM NOKORI_NO_NAGASA
REAL A,B,C
READ(*,*) A,B
C=SQRT(ABS(A**2-B**2))
WRITE(*,*) 'NAGASA = ',C
STOP
END PROGRAM NOKORI_NO_NAGASA
実引数記述時の注意点
組み込み関数には、実引数が1つだけのものもあれば、2つ以上必要な場合もある。この場合、実引数の型はすべて同じでなければならない。
また、実引数の値の範囲や単位にも注意が必要である。
対数関数の実引数 → 正の実数でなければならない
三角関数の実引数 → 実数で、単位はラジアン(度数の場合は変換が必要)
(例)角度を0度から360度まで10度刻みで変化させたときの、角度とsinの値を出力。
PROGRAM SHUTSURYOKU_SIN
INTEGER KAKU
REAL RAD,Y
WRITE(*,*) ' DEGREE SIN(X)'
DO 10 KAKU=0,360,10
RAD=3.1415926*KAKU/180.0
Y=SIN(RAD)
WRITE(*,*) KAKU,Y
10 CONTINUE
STOP
END PROGRAM SHUTSURYOKU_SIN
数値関数の利用例
ABS(-3.7) + AINT(-1.7)
「-3.7の絶対値」+「-1.7を整数値切り捨て」
→ 3.7 - 1 = 2.7
DIM(3,7) * INT(6.2) / FLOOR(2.7)
「3と7の差分」*「6.2を整数値切り捨て変換」/「2.7以下で最大の整数」
→ 4 * 6 / 2 = 12
NINT(7.1) * MOD(37,5)
「7.1を四捨五入した整数値」*「37を5で割った余り」
→ 7 * 2 = 14
数学関数の利用例
SQRT(25.0) - 1.3
→ 5 - 1.3 = 3.7
ABS(-7.1) + LOG10(10.0)
→ 7.1 + 1.0 = 8.1
LOG(10.0)
→ 2.3025851の近似値
COS(1.0)
→ 0.540.023の近似値
文字関数の利用例
(例)「123」を「文字型」で入力し、「整数型」で出力する。
PROGRAM HENKAN
INTEGER NUM,D1,D2,D3
CHARACTER*10 WORD
WORD='123'
D1=ICHAR(WORD(1:1))-48 !文字のコード化(0の文字コードは48)
D2=ICHAR(WORD(2:2))-48
D3=ICHAR(WORD(3:3))-48
NUM=D1*100+D2*10+D3
PRINT *,WORD,num
STOP
END PROGRAM HENKAN
(例)「abc123xyz」を「文字型」で入力し、中の「123」を取り出して出力する。
PROGRAM TORIDASHI
INTEGER P,Q
CHARACTER*20 WORD1,WORD2
WORD='abc123xyz'
P=INDEX(WORD,'123') !「123」は「abc123xyz」の中で何番目か?
Q=INDEX(WORD,'xyz') !「xyz」は「abc123xyz」の中で何番目か?
WORD2=WORD(P:Q-1)
PRINT *,WORD2
STOP
END PROGRAM TORIDASHI
ビット関数の利用例
(例)ビットの設定、消去、検査。
PROGRAM BITTO_SOUSA
I = 4
J = IBSET (I,5) ! J=36
PRINT *, J
K = IBCLR (J,2) ! K=32
PRINT *, K
PRINT *, BTEST(K,2) ! Kの2ビット目はF
END PROGRAM BITTO_SOUSA
配列関数の利用例
(例)要素の合計を行う。
PROGRAM GOUKEI
INTEGER A(3),B
DATA A/1,2,3/
B=SUM(A,1)
PRINT *,B
STOP
END PROGRAM GOUKEI
4.1.2 組み込み関数一覧
以下に、組み込み関数の一覧を挙げる。
定義 | 総称名 | 個別名 | 引数の型 | 省略可能 引数 |
---|---|---|---|---|
引数実在問せ関数 | ||||
引数が実在するかどうか PRESENT(A) |
PRESENT | |||
数値関数 | ||||
絶対値 ABS (A) |
ABS | IABS ABS DABS CABS |
整数型 実数型 倍精度実数型 複素数型 |
|
複素数の虚部 AIMG (Z) |
AIMG | 複素数型 | ||
整数値への切捨て AINT (A,KIND) |
AINT |
AINT DINT |
実数型 倍精度実数型 |
KIND |
四捨五入 ANINT (A,KIND) |
ANINT | ANINT DNINT |
実数型 倍精度実数型 |
KIND |
引数以上で最小の整数 CEILING (A) |
CEILING | 実数型 | ||
複素数型への変換 CMPLX (X,Y,KIND) |
CMPLX | - - - |
整数型 実数型 複素数型 |
Y,KIND |
共役複素数 CONJG (Z) |
CONJG | 複素数型 | ||
倍精度実数型への変換 DBLE (A) |
DBLE | - - - |
整数型 実数型 複素数型 |
|
超過分 DIM (X,Y) |
DIM | IDIM DIM DDIM |
整数型 実数型 倍精度実数型 |
|
倍精度実数型の積 DPROD (X,Y) |
DPROD | 実数型 | ||
引数以下で最大の整数 FLOOR (A) |
FLOOR | 実数型 | ||
整数型への変換(切捨て) INT (A,KIND) |
INT | INT IFIX IDINT INT |
整数型 実数型 倍精度実数型 複素数型 |
KIND |
最大値 MAX (A1,A2,A3,…) |
MAX | MAX 0 AMAX 1 DMAX 1 |
整数型 実数型 倍精度実数型 |
A3,… |
AMAX 0 MAX 1 |
整数型 実数型 |
|||
最小値 MIN (A1,A2,A3,…) |
MIN | MIN 0 AMIN 1 DMIN 1 |
整数型 実数型 倍精度実数型 |
A3,… |
AMIN 0 MIN 1 |
整数型 実数型 |
|||
余り MOD (A,P) |
MOD | MOD AMOD DMOD |
整数型 実数型 倍精度実数型 |
|
剰余 MODULO (A,P) |
MODULO | - - - |
整数型 実数型 倍精度実数型 |
|
四捨五入 NINT (A,KIND) |
NINT | NINT IDNINT |
実数型 倍精度実数型 |
KIND |
実数型への変換 REAL (A,KIND) |
REAL | REAL FLOAT REAL SNGL REAL |
整数型 整数型 実数型 倍精度実数型 複素数型 |
KIND |
符号の変更 SIGN (A,B) |
SIGN | ISIGN SIGN DSIGN |
整数型 実数型 倍精度実数型 |
|
数学関数 | ||||
逆余弦 ACOS (X) |
ACOS | ACOS DACOS |
実数型 倍精度実数型 |
|
逆正弦 ASIN (X) |
ASIN | ASIN DASIN |
実数型 倍精度実数型 |
|
逆正接 ATAN (X) |
ATAN | ATAN DTAN |
実数型 倍精度実数型 |
|
逆正接 ATAN2 (X) |
ATAN2 | ATAN2 DTAN2 |
実数型 倍精度実数型 |
|
余弦 COS (X) |
COS | COS DCOS CCOS |
実数型 倍精度実数型 複素数型 |
|
双曲線余弦 COSH (X) |
COSH | COSH DCOSH |
実数型 倍精度実数型 |
|
指数 EXP (X) |
EXP | EXP DEXP CEXP |
実数型 倍精度実数型 複素数型 |
|
自然対数 LOG (X) |
LOG | ALOG DLOG CLOG |
実数型 倍精度実数型 複素数型 |
|
常用対数 LOG10 (X) |
LOG10 | ALOG10 DLOG10 |
実数型 倍精度実数型 |
|
正弦 SIN (X) |
SIN | SIN DSIN CSIN |
実数型 倍精度実数型 複素数型 |
|
双曲線正弦 SINH (X) |
SINH | SINH DSINH |
実数型 倍精度実数型 |
|
平方根 SQRT (X) |
SQRT | SQRT DSQRT CSQRT |
実数型 倍精度実数型 複素数型 |
|
正接 TAN (X) |
TAN | TAN DTAN |
実数型 倍精度実数型 |
|
双曲線正接 TANH (X) |
TANH | TANH DTANH |
実数型 倍精度実数型 |
|
文字関数 | ||||
ACSII 大小順序における指定した番号の文字 ACHAR (I) |
ACHAR | 整数型 | ||
左詰め ADJUSTL (STRING) |
ADJUSTL | 文字型 | ||
右詰め ADJUSTR (STRING) |
ADJUSTR | 文字型 | ||
文字型への変換 CHAR (I,KIND) |
CHAR | 整数型 | KIND | |
ACSII 大小順序における文字の番号 IACHAR (C) |
IACHAR | 文字型 | ||
整数型への変換 ICHAR (C) |
ICHAR | 文字型 | ||
部分列の開始位置 INDEX (STRING, SUBSTRING,BACK) |
INDEX | 文字型 | BACK | |
末尾の空白を除いた文字長 LEN_TRIM (STRING) |
LEN_TRIM | 文字型 | ||
辞書順で以上 LGE (STRING_A, STRING_B ) |
LGE | 文字型 | ||
辞書順でより大きい LGT (STRING_A, STRING_B) |
LGT | 文字型 | ||
辞書順で以下 LLE (STRING_A STRING_B) |
LLE | 文字型 | ||
辞書順でより小さい LLT (STRING_A STRING_B) |
LLT | 文字型 | ||
連結の繰返し REPEAT (STRING, NCOPIES) |
REPEAT | 文字型 | ||
集合中の文字についての文字列の検索 SCAN (STRING,SET, BACK) |
SCAN | 文字型 | BACK | |
末尾の空白の削除 TRIM (STRING) |
TRIM | 文字型 | ||
集合中の文字についての包含の検査 VERIFY (STRING,SET, BACK) |
VERIFY | 文字型 | BACK | |
文字問合せ関数 | ||||
文字型要素の長さ LEN (STRING) |
LEN | 文字型 | ||
種別関数 | ||||
種別型パラメタ値 KIND (X) |
KIND | - - - |
整数型 実数型 倍精度実数型 複素数型 |
|
指定した指数範囲を表現できる整数型の種別型パラメタ値 SELECTED_INT_KIND (R) |
SELECTED_ INT_KIND |
整数型 | ||
指定した精度と指数範囲を表現できる実数型の種別型パラメタ値 SELECTED_REAL_KIND (P,R) |
SELECTED_ REAL_KIND |
整数型 | P,Rの どちらか 一方 |
|
論理関数 | ||||
論理型の種別型パラメタの変更 LOGICAL (L,KIND) |
LOGICAL | 論理型 | KIND | |
数値問合せ関数 | ||||
数体系の有効けた数 DIGITS (X) |
DIGITS | - - - |
整数型 実数型 倍精度実数型 |
|
1に対してほとんど無視できる値 EPSILON (X) |
EPSILON | - - - |
実数型 倍精度実数型 |
|
数体系における最大数 HUGE (X) |
HUGE | - - - |
整数型 実数型 倍精度実数型 |
|
数体系における最大指数 MAXEXPONENT (X) |
MAX- EXPONENT |
- - |
実数型 倍精度実数型 |
|
数体系における最小指数 MINEXPONENT (X) |
MIN- EXPONENT |
- - |
実数型 倍精度実数型 |
|
10進精度 PRECISION (X) |
PRECISION | - - - |
実数型 倍精度実数型 複素数型 |
|
数体系の基数 RADIX (X) |
RADIX | - - - |
整数型 実数型 倍精度実数型 |
|
10進指数範囲 RANGE (X) |
RANGE | - - - - |
整数型 実数型 倍精度実数型 複素数型 |
|
数体系における正の最小数 TINY (X) |
TINY | - - |
実数型 倍精度実数型 |
|
ビット問合せ関数 | ||||
数体系のビット数 BIT_SIZE (I) |
BIT_SIZE | 整数型 | ||
ビット操作手続き | ||||
ビットの検査 BTEST (I,POS) |
BTEST | 整数型 | ||
論理積 IAND (I,J) |
IAND | 整数型 | ||
ビットの消去 IBCLR (I,POS) |
IBCLR | 整数型 | ||
ビット列の取出し IBITS (I,POS,LEN) |
IBITS | 整数型 | ||
ビットの設定 IBSET (I,POS) |
IBSET | 整数型 | ||
排他的論理和 IEOR (I,J) |
IEOR | 整数型 | ||
論理和 IOR (I,J) |
IOR | 整数型 | ||
論理けた移動 ISHFT (I,SHIFT) |
ISHIFT | 整数型 | ||
循環けた移動 ISHFTC (I,SHIFT,SIZE) |
ISHIFTC | 整数型 | SIZE | |
論理否定 NOT (I) |
NOT | 整数型 | ||
転換関数 | ||||
第1引数を第2引数の型として扱う TRANSFER (SOURCE, MODE,SIZE ) |
TRANSFER | SIZE | ||
浮動小数点操作関数 | ||||
数体系の数の指数部 EXPONENT (X) |
EXPONENT | - - |
実数型 倍精度実数型 |
|
数体系の数の小数部 FRACTION (X) |
FRACTION | - - |
実数型 倍精度実数型 |
|
指定した方向で最も近い数 NEAREST (X,S) |
NEAREST | - - |
実数型 倍精度実数型 |
|
指定した数の前後での数体系の数の相対間隔の逆数 RRSPACING (X) |
RRSPACING | - - |
実数型 倍精度実数型 |
|
実数と基数の整数べきとの積 SCALE (X,I) |
SCALE | |||
指数部の設定 SET_EXPONENT (X,I) |
SET_ EXPONENT |
- - |
実数型 倍精度実数型 |
|
指定した数の前後での数体系の数の絶対間隔 SPACING (X) |
SPACING | - - |
実数型 倍精度実数型 |
|
ベクトルおよび行列の乗算関数 | ||||
2つの1次元配列の内積 DOT_PRODUCT (VECTOR_A, VECTOR_B) |
DOT_ PRODUCT |
|||
行列積 MATMUL (MATRIX_A, MATRIX_B) |
MATMUL | |||
配列集計関数 | ||||
配列要素の値がすべて真のとき真 ALL (MASK,DIM) |
ALL | DIM | ||
配列要素の値が1つでも真のとき真 ANY (MASK,DIM) |
ANY | DIM | ||
真である配列要素の個数 COUNT (MASK,DIM) |
COUNT | DIM | ||
配列要素の最大値 MAXVAL (ARRAY,DIM, MASK) |
MAXVAL | DIM, MASK |
||
配列要素の最小値 MINVAL (ARRAY,DIM, MASK) |
MINVAL | DIM, MASK |
||
全配列要素の積 PRODUCT (ARRAY, DIM,MASK) |
PRODUCT | DIM, MASK |
||
全配列要素の和 SUM (ARRAY,DIM, MASK) |
SUM | DIM, MASK |
||
配列問合せ関数 | ||||
配列の割付状態 ALLOCATED (ARRAY) |
ALLOCATED | |||
配列の次元の下限 LBOUND (ARRAY,DIM) |
LBOUND | DIM | ||
配列またはスカラの形状 SHAPE (SOURCE) |
SHAPE | |||
配列要素の総数 SIZE (ARRAY,DIM) |
SIZE | DIM | ||
配列の次元の上限 UBOUND (ARRAY,DIM) |
UBOUND | DIM | ||
配列構成関数 | ||||
選別式に従った配列の選択的な併合 MERGE (TSOURCE, FSOURCE,MASK) |
MERGE | |||
選別式に従った多次元配列の1次元配列への詰込み PACK (ARRAY,MASK, VECTOR) |
PACK | VECTOR | ||
次元追加による配列の拡張 SPREAD (SOURCE, DIM,NCOPIES ) |
SPREAD | |||
選別式に従った1次元配列の多次元配列への配布 UNPACK (VECTOR, MASK,FIELD) |
UNPACK | |||
配列変形関数 | ||||
配列の再構成 RESHAPE (SOURCE, SHAPE,PAD,ORDER) |
RESHAPE | PAD, ORDER |
||
配列操作関数 | ||||
循環移動 CSHIFT (ARRAY, SHIFT,DIM ) |
CSHIFT | DIM | ||
切捨て移動 EOSHIFT (ARRAY, SHIFT,BOUNDARY, DIM) |
EOSHIFT | BOUNDARY, DIM |
||
2次元配列の転置 TRANSPOSE (MATRIX) |
TRANSPOSE | |||
ポインタ結合状態問合わせ関数 | ||||
結合状態を調べるまたは比較する ASSOCIATED(POINTER, TARGET) |
ASSOCIATED | TARGET |
【注意】表中の引数キーワードの用途
・KIND … 結果の種別
・STRING … 任意の文字列
・BACK … 文字列操作を右から左(逆順)にすることを示す
・MASK … 配列要素を選別する論理式(マスク)
・DIM … 配列の次元を選択する