Fortranのmaxloc関数でハマった。
Fortranのmaxloc関数でハマった。maxlocとは
配列中のすべての要素,配列中の要素の組,または配列の指定された次元中の要素の最大値の位置を返します。
http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/az/az08_09.htm
という関数らしいので、便利そうだと思っていたのだが。。。
位置は返すけど、indexは返さないんですね
program mx integer,dimension(8 ) :: var1 = (/1,2,3,4,2,8,3,4 /) ! indexは1〜8 integer,dimension(0:7) :: var2 ! indexは0〜7 var2 = var1 print *,var1 print *,var2 print *,repeat("-",256) print *,maxloc(var1,1),var1(maxloc(var1,1)) print *,maxloc(var2,1),var2(maxloc(var2,1)) end program mx
結果:
1 2 3 4 2 8 3 4 1 2 3 4 2 8 3 4 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 6 8 6 3
添字が1から始まるとは限らないんだから、これはまずいでしょ。
位置という表現は不正確。せめて、注意書きが欲しい。
過去のコードとの互換性もわかりますけど、deprecatedにして新しい関数作ってくださいよ。