fortran66のブログ

fortran について書きます。

maxloc, minloc の mask = .false. の時の挙動

いつの間にか、intel fortran での maxloc, minloc の mask 全部不成立時のデフォでの挙動が変わっていてちょっと焦りました。

intel fortran v.17 のヘルプより引用

If array has size zero, or every element of mask has the value .FALSE., the value of the result is controlled by compiler option assume [no]old_maxminloc, which can set the value of the result to either 1 or 0.

コンパイラ・オプションで/assume:noold_maxminlocとすると、以下のプログラムで 0 が返されます。

    program test
      implicit none
      integer :: ia(5), i
      do i = 1, 5
        ia(i) = i
      end do
      print *, maxloc(ia, mask = .false.)
    end program test


規格によると、Fortran2003 では 0 を返すことになっていますが、それ以前は処理系依存だった模様です。

しばらくぶりにリコンパイルして実行したら結果が変わったので困惑しました。