Fortran90(product)

旧2-5. Fortran毎日学習

productを使って配列の積を求めます。
全要素を掛けた結果、つまり総乗を求めたいので、このような計算となります。

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

        write(*,*) a(1) * a(2) * a(3) * a(4) * a(5)

        stop
      end
takk@deb9:~$ gfortran func-product-1.f90
takk@deb9:~$ ./a.out
         120
takk@deb9:~$

productを使えば一発です。

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

        write(*,*) product(a)

        stop
      end
takk@deb9:~$ gfortran func-product-2.f90
takk@deb9:~$ ./a.out
         120
takk@deb9:~$

sumと同じくdimやmaskを指定してフィルタリングすることができます。

takk@deb9:~$ cat func-product-3.f90
      program main
        integer a(2,5)
        data a /1,10,2,20,3,30,4,40,5,50/

        write(*,*) product(a,dim=1)
        write(*,*) product(a,dim=2,mask=a.le.30)

        stop
      end
takk@deb9:~$ gfortran func-product-3.f90
takk@deb9:~$ ./a.out
          10          40          90         160         250
         120        6000
takk@deb9:~$

product関数というと、他言語だと掛け合わせのリストを生成するタイプだと思いますが、Fortranでは単純に掛け算なんですね。sum関数の総和に対して、product関数の総乗なので、こちらの関数仕様の方が分かりやすい気がします。

コメント

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