4章:関数とサブルーチン

4.1 組み込み関数


組み込み関数とは、あらかじめFortranのプログラミング言語の中に用意されている関数のことである。

  1. 数値関数…基本的な数値演算や型変換を行う
  2. 数学関数…基本的な数学計算を行う
  3. 文字関数…文字列の演算・操作を行う
  4. ビット関数…ビットの演算・操作を行う
  5. 配列関数…配列の演算・操作を行う

など、多くの組み込み関数が用意されている。

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 … 配列の次元を選択する



<前へ   目次へ   次へ>

Copyright ©2008 JAMSTEC All Rights Reserved.