2016-08-09 2 views
-1

私はポリマー溶融物のモンテカルロシミュレーションのFORTRANプログラムを書いています。モンテカルロサブルーチンの特定の点で、小数点のボルツマン重みの合計の値をチェックしながら、変数をサブルーチンに出力した後、NANを取得しています。 サブルーチンはかなり大きいです。私はここに投稿することができません。誰かがアイデアを持っている場合、変数の値を印刷した後にNANを取得する理由は何ですか?私はさらに進めることができないので、助けてください。私のコードでboltzmannの値を印刷してチェックしようとすると、NANの問題が起こる

私たちはNANを避けるためにこのような状況をどのように克服できますか? 私はプログラムを書くためにgfortranコンパイラを使用しています。

+0

あなたは自分自身をFortranではなくFORTRANに制限する特別な理由はありますか? Fortranには、そのような浮動小数点例外を処理するための固有モジュール 'ieee_exceptions'が用意されています。 – jlokimlin

答えて

0

結果にNaNがある場合、問題があります(無効な算術演算)。それを修正する必要があります。このNaNが発生した場所を追跡できない場合、またはコードを段階的にプロファイリングし、問題のある変数が見つかるまで各変数をチェックすることをお勧めします。ただし、コンパイラはこのNaNを追跡するのに役立ちます。フラグ-ffpe-trap=invalidは、NaNが発生したときにプログラムを停止し、コンパイラはNaNの発生する行を通知します。 関連記事を参照してください:Force gfortran to stop program at first NaN

関連する問題