前回使った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:~$
コメント