四則演算と組込み関数

この記事では四則演算と組込み関数について説明します。

記事の最後にサンプルプログラムを掲載しています。

スポンサーリンク

四則演算

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

sample04

こんな画面が出たでしょうか?出ていれば正常終了です。


→ 次の記事へ(条件分岐(if))
← 前の記事へ(データ入出力とフォーマット指定)
目次(Fortran90)

スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です