Fortran90(sum)

旧2-5. Fortran毎日学習

前回使ったmatmulは配列で使える関数でしたが、他にも配列用関数はあります。
今回は、sumを使ってみます。
まずはsumを使わないプログラムです。

takk@deb9:~$ cat func-sum1.f90
      program main
        integer a(5),s
        data a /1,2,3,4,5/

        s = 0
        do i = 1,5
          s = s + a(i)
        end do
        write(*,*) s

        stop
      end
takk@deb9:~$ gfortran func-sum1.f90
takk@deb9:~$ ./a.out
          15
takk@deb9:~$

1~5までの和なので結果は15で合ってますね。

takk@deb9:~$ cat func-sum2.f90
      program main
        integer a(5)
        data a /1,2,3,4,5/

        write(*,*) sum(a)

        stop
      end
takk@deb9:~$

ものすごく簡単になりました。
結果はこれです。

takk@deb9:~$ gfortran func-sum2.f90
takk@deb9:~$ ./a.out
          15
takk@deb9:~$

配列の要素の総和ですので、初期化されていない要素があるとこういうことになります。

takk@deb9:~$ cat func-sum3.f90
      program main
        integer a(10)

        a(1)=1
        a(2)=2
        a(3)=3
        a(4)=4
        a(5)=5

        write(*,*) sum(a)

        stop
      end
takk@deb9:~$ gfortran func-sum3.f90
takk@deb9:~$ ./a.out
       65442
takk@deb9:~$

初期化されていない値と計算されて、よく分からない結果になりました。
このようなときは、計算したい要素の範囲を指定すればよいです。

takk@deb9:~$ cat func-sum4.f90
      program main
        integer a(10)

        a(1)=1
        a(2)=2
        a(3)=3
        a(4)=4
        a(5)=5

        write(*,*) sum(a(1:5))

        stop
      end
takk@deb9:~$ gfortran func-sum4.f90
takk@deb9:~$ ./a.out
          15
takk@deb9:~$

コメント

タイトルとURLをコピーしました