[itbase2024]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 <- 結果は倍精度実数型
上の結果からわかる通り,
- 整数型と実数型の演算の結果は実数型
- 実数型と倍精度実数型の演算の結果は倍精度実数型
- 倍精度実数型と整数型の演算の結果は倍精度実数型
となります. 上の例は, 掛け算ですが, 四則演算ではすべて上のようになります.
Keyword(s):
References:[[itbase2024]惑星学実験実習の基礎II]