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関数の総乗なので、こちらの関数仕様の方が分かりやすい気がします。


コメント