Fortran 入門

前へ   上へ   次へ

5 演算、代入

5.1 変数への代入

変数への値の代入は、代入演算子 = を用いて行います。

[ assignment.f90 ] - 代入を行うサンプル
program assignment
  implicit none
  integer a
  real b
  double precision c
  character(len=3) d
  a = 55      ! a に 55 を代入する
  b = 1.23    ! b に 1.23 を代入する
  c = 1.23d0  ! c に 1.23(倍精度)を代入する
  d = 'ABCD'  ! d に ABCD を代入する
  print *, a, b, c, d
end program assignment

出力例:
 55   1.2300000   1.2300000000000000 ABC

5.2 演算

5.2.1 算術演算子

以下の Fortran で利用できる算術演算子を示します。

演算 意味 優先度
a+b a と b を足す
a-b a から b を引く
a*b a かける b
a/b a わる b
a**b a の b 乗

計算は優先度の高い順に行われます。 優先度を明示的に指定する場合にはカッコを用います。

【演算の優先順位を示す例】
program main
  print *, "4+3*2 =", 4+3*2
  print *, "4*3**2 =", 4*3**2
end program main

出力例:
 4+3*2 = 10
 4*3**2 = 36

[ operation.f90 ] - 演算を行うサンプル
program operation
  implicit none
  integer a, b, c, d
  real e, f
  double precision g
  a = 1+3           ! a に 1+3 の結果(4)を代入
  b = a-2           ! b に a-2 を代入
  c = a*2           ! c に a*2 を代入
  d = 1/a           ! d に 1/a を代入(小数点以下切り捨て)
  print *, a, b, c, d
  e = 6.0/2.0       ! e に 6÷2 を代入
  f = e**3.0        ! e の 3 乗を f へ代入
  g = 4d0*(2d0+1d0) ! かっこを使って足し算を先に行う例
  print *, e, f, g
end program operation

出力例:
 4 2 8 0
   3.0000000  27.0000000  12.0000000000000000

5.2.2 演算結果の型について

通常演算結果の型は演算対象の型と同じになりますが、異なる型の演算対象が含まれる演算においては、以下に示す型の強い方の型(種別も含む)が使用されます。

異なる型の場合のルール

型の強さ
整数
実数
複素数
例)
 整数   + 実数  → 実数
 複素数 + 実数  → 複素数
 実数  * 整数  → 実数
 複素数 - 整数  → 複素数

演算が実数及び複素数の場合の結果精度についてのルール

演算対象が実数もしくは複素数のみで構成される場合には高い方の精度が採用されます。

例)
 単精度実数  + 倍精度実数  → 倍精度実数
 単精度複素数 + 倍精度複素数 → 倍精度複素数
 倍精度複素数 + 単精度実数  → 倍精度複素数
 倍精度実数  + 単精度複素数 → 倍精度複素数

補足:初心者が間違いやすい点に整数の割り算があります。 整数の割り算の結果は整数になり、割り切れない場合は切り捨てが行われます。
例)
7/3 --> 2
3/2 --> 1
3/10 --> 0

5.2.3 型変換について

型変換は代入や式の中では自動的に行われます。 明示的に型変換を行いたい場合には以下のように組込み関数を用いて行うことが可能です。
変換  組込み関数 用例
実数から整数へ(切捨て) int() i = int(x)
実数から整数へ(四捨五入) nint() i = nint(x)
整数から単精度実数へ real() x = real(i)
整数から倍精度実数へ dble() x = dble(i)
整数、実数から単精度複素数へ cmplx() z = cmplx(x)
整数、実数から倍精度複素数へ cmplx() z = cmplx(x,0,kind(0d0))


[ type-conversion.f90 ] - 型変換を行うサンプル
program type_conversion
  implicit none
  integer i
  real x
  double precision d
  x = 5.67
  i = x
  print *, "i = x とした場合(自動的に変換される):", i
  i = int(x)
  print *, "i = int(x) とした場合(明示的に変換される):", i
  i = nint(x)
  print *, "i = nint(x) とした場合(四捨五入):", i
  x = real(i)
  print *, "x = real(i) とした場合(明示的に単精度実数に変換される):", x
  d = dble(i)
  print *, "d = dble(i) とした場合(明示的に倍精度実数に変換される):", d
end

出力例
 i = x とした場合(自動的に変換される): 5
 i = int(x) とした場合(明示的に変換される): 5
 i = nint(x) とした場合(四捨五入): 6
 x = real(i) とした場合(明示的に単精度実数に変換される):   6.0000000
 d = dble(i) とした場合(明示的に倍精度実数に変換される):   6.0000000000000000



前へ   上へ   次へ
大学生協限定キャンペーン情報
ご案内
関連情報
© 譌・譛ャ繝九Η繝シ繝。繝ェ繧ォ繝ォ繧「繝ォ繧エ繝ェ繧コ繝�繧コ繧ー繝ォ繝シ繝玲�ェ蠑丈シ夂、セ 2025
Privacy Policy  /  Trademarks