6

整数の例外をキャッチする方法はありますgfortranifort?浮動小数点の例外をキャッチする方法はありますか?

階乗を計算する次の簡単なプログラムを検討してください。

program factorial
  use, intrinsic :: iso_fortran_env 

  implicit none
  integer(8)          :: fac
  real(REAL64)        :: facR
  integer,parameter   :: maxOrder = 30
  integer             :: i

  fac = 1 ; facR = 1.e0_REAL64
  do i=2,maxOrder
    fac=fac*i ; facR=facR*real(i,REAL64)
    write(*,*) i, fac, facR
  enddo ! i

end program

ある時点でオーバーフローが発生します -integer(8)ここに示されているように、それは約 21 で発生します。

4

2 に答える 2

1

gfortranは、 -ftrapvフラグを使用して整数オーバーフローをキャッチします。man gcc を参照してください。

-ftrapv このオプションは、加算、減算、乗算演算での符号付きオーバーフローのトラップを生成します。

ifortにはその機能がないようです。

于 2013-09-26T22:23:08.610 に答える