この記事では四則演算と組込み関数について説明します。
記事の最後にサンプルプログラムを掲載しています。
四則演算
fortranで用いる演算子を下記します。これは簡単ですね。
足し算: +
引き算: –
掛け算: *
割り算: /
べき乗: **
計算負荷は、足し算、引き算 < 掛け算 < 割り算 < べき乗 の順に高くなります。計算速度を意識してコーディングする場合は、割り算やべき乗をなるべく減らす(掛け算に置き換える)というのがポイントです。
組込み関数
よく使う組み込み関数を以下に列挙します。数学関数については、関数の先頭に”d“が付いた倍精度実数型の関数を挙げています。
mod(i,j) ! i÷jの余り
int(x) ! 整数へ変換(切り捨て)
nint(x) ! 整数へ変換(四捨五入)
dble(i) ! 倍精度実数へ変換
dsqrt(x) ! 平方根
dabs(x) ! 絶対値
dmin1(a,b,..) ! 最小値
dmax1(a,b,..) ! 最大値
dexp(x) ! 指数
dlog(x) ! 自然対数
dlog10(x) ! 常用対数
dsin(x) ! 正弦
dcos(x) ! 余弦
len(o) ! 文字長
len_trim(o) ! 後ろの空白を除いた文字長
trim(o) ! 後ろの空白を除いた文字
サンプルプログラム
サンプルプログラムを下記します。プログラムの15, 16行目では計算順序を変えて組み込み関数dble()のテストをしています。出力の違いを確認してみて下さい。単純ですが発見が困難なバグに繋がることがあるので、あえて例示しています。
以下のFortranプログラムをコピペし、****.f90の名前で保存して下さい(****の部分は適当でいいです)。コピペが面倒な場合は、こちらからダウンロードして下さい(右クリックメニューから保存)。→ sample04.f90
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | program sample04 implicit none !-------------------------------------------------------------------- 1 integer :: i, j, n real(8) :: a, b, c, x character(len=80) :: o !-------------------------------------------------------------------- 2 i = 10 j = 3 write(*,'(i2,a,i1,a,i4)') i, ' ** ', j, ' = ', i ** j write(*,'(a,i2,a,i1,a,i1)') 'mod(', i, ',', j, ') = ', mod(i,j) x = 1.5d0 write(*,'(a,f3.1,a,i1)') 'int(', x, ') = ', int(x) write(*,'(a,f3.1,a,i1)') 'nint(', x, ') = ', nint(x) write(*,'(a,i2,a,i1,a,f3.1)') 'dble(', i, ' / ', j, ') = ', dble(i / j) write(*,'(a,i2,a,i1,a,f3.1)') 'dble(', i, ') / dble(', j, ') = ', dble(i) / dble(j) x = 4.0d0 write(*,'(a,f3.1,a,f3.1)') 'dsqrt(', x, ') = ', dsqrt(x) x = -1.0d0 write(*,'(a,f4.1,a,f3.1)') 'dabs(', x, ') = ', dabs(x) a = 1.0d0 b = 2.0d0 c = 3.0d0 write(*,'(4(a,f3.1))') 'dmin(', a, ',', b, ',', c, ') = ', dmin1(a,b,c) write(*,'(4(a,f3.1))') 'dmax(', a, ',', b, ',', c, ') = ', dmax1(a,b,c) x = 1.0d0 write(*,'(a,f3.1,a,f7.5)') 'dexp(', x, ') = ', dexp(x) x = 2.71828183d0 write(*,'(a,f7.5,a,f3.1)') 'dlog(', x, ') = ', dlog(x) x = 10.0d0 write(*,'(a,f4.1,a,f3.1)') 'dlog10(', x, ') = ', dlog10(x) x = 3.14159265d0 write(*,'(a,f7.5,a,f3.1)') 'dsin(', x, ') = ', dsin(x) write(*,'(a,f7.5,a,f4.1)') 'dcos(', x, ') = ', dcos(x) o = 'Trading beginners have paranormal abilities for trading stocks.' write(*,'(a)') trim(o) write(*,'(a,i2)') 'len(o) = ', len(o) write(*,'(a,i2)') 'len_trim(o) = ', len_trim(o) !-------------------------------------------------------------------- end program sample04 |
使い方は、前記事と同様に、****.f90を以下の****.batにドラッグ&ドロップするだけです。
64bit用 → comp_exe_64.bat
32bit用 → comp_exe_32.bat
こんな画面が出たでしょうか?出ていれば正常終了です。
→ 次の記事へ(条件分岐(if))
← 前の記事へ(データ入出力とフォーマット指定)
目次(Fortran90)