お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2012-04-17 18:07:48

synq
新しいメンバ
登録日: 2012-04-17

gfortranのREADについて

はじめまして。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


よろしくお願いします。

オフライン

 

#2 2012-04-19 11:50:50

vine_user
メンバ
From: Tokyo
登録日: 2006-11-15

Re: gfortranのREADについて

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

オフライン

 

#3 2012-04-19 16:35:10

synq
新しいメンバ
登録日: 2012-04-17

Re: gfortranのREADについて

vine_userさん
返事が遅くなってすみません。

なるほど。Intel Fortran 準拠だったんですね。
納得です。

g77などの別のコンパイラを使用するようにします。
Intel Fortran は候補から外します;)

ありがとうございました!

オフライン

 

Board footer

Powered by FluxBB