
Ubuntu日本語フォーラム

ログインしていません。
はじめまして。Ubuntuのフォーラムに質問してよいのか悩みましたが、
解決できないので質問させてください。
Ubuntu 10.04 LTS を利用しています。
gfortran は 4.4.3-4ubuntu5.1 です。
以下のプログラムとファイルを作成しました。
a.f
integer*2 i
open(10,file="aa")
i=-32768
write(6,*) "代入",i
read(10,*) i
write(6,*) "READ", i
close(10)
end
aa
-32768
コンパイルは gfortran で行いました。
gfortran a.f
これを実行させると以下の結果となります。
代入 -32768
At line 6 of file a.f (unit = 10, file = 'aa')
Fortran runtime error: Integer overflow while reading item 1
-32768 は integer*2 の最小値ですが、代入ではOKで
ファイルから読み込むとエラーになります。
gfortran のオプションなどでこのエラーを回避する方法はないでしょうか?
ちなみに g77, fort77 でコンパイルすると正常に読み込みます。
以下はg77, fort77での結果です。
代入 -32768
READ -32768
よろしくお願いします。
オフライン
INTEGERのrangeはコンパイラによって異なるようで、データファイルaaの数値を-32767とするとエラーは出ません。
Intel® Fortranの仕様だと、
INTEGER(2):-32,768 to 32,767
INTEGER overflow on input:-32,767 to 32,768
となっているので、gfortranの場合はそれに準拠しているのではないかと思います。
http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/fortran/lin/compiler_f/bldaps_for/common/bldaps_datarepov.htm
↑INTEGER(2)の項目
http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/fortran/lin/compiler_f/bldaps_for/common/bldaps_rterrs.htm
↑INTEGER overflow on inputの項目
実際、直接代入する方で最大値の i=32768 とすると、同様なエラーが出ます。
※ Ubuntu 12.04 Betaで確認。gfortranのバージョン:4.6.3-1ubuntu5
オフライン
vine_userさん
返事が遅くなってすみません。
なるほど。Intel Fortran 準拠だったんですね。
納得です。
g77などの別のコンパイラを使用するようにします。
Intel Fortran は候補から外します;)
ありがとうございました!
オフライン