2017-06-01 188 views
1

私はFortranを初めて使用し、一般的にコーディングしていますので、私の用語が正しくない場合はお詫び申し上げます。IEEE_UNDERFLOW_FLAG IEEE_DENORMAL in Fortran 77

gfortranコンパイラを備えたLinuxマシンを使用しています。

私は今年の夏に研究をしています。これは、1980年頃に書かれたプログラムを再び手に入れています。これはFortran 77で書かれています。私はすべてのコードとそれに関するいくつかの文書を持っています。

現在のフォームでは、 "IEEE_UNDERFLOW_FLAG IEEE_DENORMAL"というエラーが発生しています。私の最初の考えは、このコードは異なる環境/アーキテクチャの下で開発されることを意図していたことです。

「このプログラムは、HARRISコンピュータシステムで実行するように設計されています。単精度変数がメインコードとサブルーチンパッケージの両方で倍精度変数に変更された場合、VAXシステムでも実行できます。それは間違っています。これが洞察力を発揮する正しいものであれば素晴らしいだろう。

-std = legacyと-m32を使用してコーディングをコンパイルしようとしました。私もこれと同じエラーが表示されます。

正しい方向に向かうためのアドバイスをいただければ幸いです。

+0

おそらく、異常な状態の生成が予想されます。ビルド手順の選択に問題があるとは限りません。 – tim18

+0

ieee754 singleのプロパティがvaxよりも優れていない可能性があるため、倍精度に切り替える方法が重要になる場合があります。 – tim18

+0

Gfortranには、single by doubleの自動置換オプションがあります。これを考慮するには、ドキュメントを読むべきです。 – tim18

答えて

3

「IEEE_UNDERFLOW_FLAG IEEE_DENORMALはシグナリングです」というのは珍しいことではありません。 エラーメッセージではありません。

意味は、コード実行時にdenormal numbersが生成されていることです。

コード内の数値的な問題についてのヒントかもしれませんが、それ自体エラーではありません。プログラムが正常に終了したことを意味します。

Fortranの最新版では、STOPステートメントが実行されたときに、シグナリングであるすべての浮動小数点例外が報告される必要があります。 gfortran IEEE exception inexact BTWを参照してください。これは、プログラムがFortran 77ではなくFortran 2003以上としてコンパイルされていることを意味します。

-std=f95でFortran 95標準を要求しても、メモは引き続き表示されますが、-ffpe-summary=listフラグで制御できることに注意してください。

これらの警告を回避する方法は、STOPステートメントでプログラムを終了するのではなく、END PROGRAMまで実行することです。あなたのコード内

STOP 
END 

または

STOP 
END PROGRAM 

のようなものを持っている場合は、単にSTOPを削除しても有害ではない場合、それは、役に立たないです。

倍精度を使用して、それを取り除くことに成功する必要はありません。アルゴリズムに数値的な問題がある場合、それらは倍精度でもそこにとどまるでしょう。しかし、それはあまり明らかにならないかもしれません。そうでないかもしれません。そのためにコードを書き直す必要はありません。-fdefault-real-8または-freal-4-real-8などを使用してください。 gfortran manualでこれらのオプションについて詳しく読む。あなたは4倍精度を試すことさえできますが、通常は2倍であればすべての合理的なアルゴリズムで十分です。

+0

「終わり」ではなく、「STOP」権利に遭遇したときのみですか?したがって、コードが 'STOP;で正常終了した場合、 'STOP'を削除すると' END 'が修正されます。 (?) – agentp

+0

はい、それはリンクされた答えの結論です。私はここでもそれを強調すべきです。 –

+0

@VladimirFこれがエラーを引き起こす可能性があるかどうかはわかりませんが、HARRISシステムについて詳しくは、コードが48ビットコンピュータで開発されたように見えます。また、私はgfortranのマニュアルを読んだことがありますが、私のプログラムをFortran 77としてコンパイルすることはできませんが、それは正しいのですか?これまでのご協力ありがとうございます。 – Robert

関連する問題