[itbase2019]Fortran 実習 演算

演算

Fortran では様々な演算のために, 予め演算子と組み込み関数が用意されています. プログラムを作って計算してみましょう.

演算子と関数

Fortran で用意されている演算子は下のようなものです.

演算子意味用例
+足すx+y
-引くx-y
*掛けるx * y
/割るx / y
**べき乗x**y (x の y 乗)
=代入x = y (x に y の値を代入)

また, Fortran で用意されている関数は下のようなものです.

関数意味備考
sin(x)正弦 (sine)x の単位は radian
cos(x)余弦 (cosine)x の単位は radian
tan(x)正接 (tangent)x の単位は radian
asin(x)逆正弦 (arcsine)出力の単位は radian
acos(x)逆余弦 (arccosine)出力の単位は radian
atan(x)逆正接 (arctangent)出力の単位は radian
sqrt(x)平方根
exp(x)指数関数
log(x)自然対数
log10(x)10 を底とする対数
mod(x,y)x を y で割った余り
abs(x)x の絶対値
max(x1,x2,...)x1, x2, ... の最大値
min(x1,x2,...)x1, x2, ... の最小値
int(x)整数への変換 (切り捨て)
nint(x)整数への変換 (四捨五入)
real(x)実数への変換
dble(x)倍精度実数への変換
cmplx(x)複素数への変換
len(a)文字列長a は文字型変数
len_trim(a)後ろの空白を除いた文字列長a は文字型変数
trim(a)後ろの空白を除くa は文字型変数

では, 上の演算子や関数を使って計算してみましょう.

下のようなプログラムを calc.f90 というファイル名で作成しましょう.

program calc

  implicit none

  real, parameter :: pi = 3.141592            ! 円周率

  print *, "sin & cos: ", sin( 0.0 ), sin(pi/2.0), cos(pi)
  print *, "**       : ", 2**5, 2**0.5
  print *, "int, real: ", int( 2.5 ), real( 2 )
  print *, "sqrt     : ", sqrt( 2.0 )
  print *, "exp      : ", exp( 2.0 )
  print *, "log      : ", log( 100.0 ), log10( 100.0 )
  print *, "mod      : ", mod( 10, 3 )

end program calc

コンパイルして実行してみましょう.

$ gfortran -o calc calc.f90                 <- コンパイル
$ ./calc                                    <- 実行
 sin & cos:    0.00000000       1.00000000      -1.00000000
 **       :           32   1.41421354
 int, real:            2   2.00000000
 sqrt     :    1.41421354
 exp      :    7.38905621
 log      :    4.60517025       2.00000000
 mod      :            1

それぞれの演算の意味を確認してみてください.

異なる型同士の演算

異なる型の変数同士の演算を行うと, 結果はどの型になるでしょうか?

下のプログラムを試してみましょう.

program calcmix

  implicit none

  integer       :: num
  real          :: val4
  real(8)       :: val8

  num      = 3
  val4     = 1.2
  val8     = 1.2d0

  print *, "integer          :", num
  print *, "real             :", val4
  print *, "real(8)          :", val8
  print *, "integer * real   :", num * val4
  print *, "real    * real(8):", val4 * val8
  print *, "integer * real(8):", num * val8

end program calcmix

コンパイルして実行してみましょう.

$ gfortran -o calcmix calcmix.f90                 <- コンパイル
$ ./calcmix                                       <- 実行
integer          :           3
real             :   1.20000005
real(8)          :   1.2000000000000000
integer * real   :   3.60000014                   <- 結果は実数型
real    * real(8):   1.4400000572204590           <- 結果は倍精度実数型
integer * real(8):   3.5999999999999996           <- 結果は倍精度実数型

上の結果からわかる通り,

  • 整数型と実数型の演算の結果は実数型
  • 実数型と倍精度実数型の演算の結果は倍精度実数型
  • 倍精度実数型と整数型の演算の結果は倍精度実数型

となります. 上の例は, 掛け算ですが, 四則演算ではすべて上のようになります.

Last modified:2019/10/26 19:07:30
Keyword(s):
References:[[itbase2019]惑星学実験実習の基礎II] [[itbase2020]惑星学実験実習の基礎II]