プロが教えるわが家の防犯対策術!

お忙しい所、NaNについて回答お願い致します。

fortranでプログラムを使用して数値計算を行っていますが、計算途中で結果がNaNとなり困っています。
NaNは、0で除算を行なったり、負の数の指数を求めようとした時に出る無限大や定義できない値のようなのですが、式を見ても0で除算を行なったり、負の数の指数を求めようとしている所はありません。

もし同じような経験をされて見事解決された方、居られましたらその時の対処法をお聞かせ願えないでしょうか。
何卒よろしくお願い致します。

A 回答 (3件)

環境(OSとコンパイラ)がわからないのでできるとは断言できないのですが、


浮動小数点レジスタの制御フラグをいじって、NaNが生成されたときに
例外が起きるようにしておけば、どこでNaNになるのかが絞れるのではないでしょうか?

いずれにしろ、注意深く値の変化を追っていくよりないと思います。

参考URL:http://www.xlsoft.com/jp/products/intel/cvf/docs …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

再度一から作り直しました。

かなり長い間苦戦しましたが,一応エラーは回避できました。

今後また同じようなエラーが起きた場合,ここで教えていただいたアドバイスを活かしたいと思います。

改めてありがとうございました。

お礼日時:2006/07/21 12:00

コンパイラがわからないので、自信は無しとしますが



リテラルプールを破壊しているという可能性が高いですね。プログラム上では直接数値が書いてあったとしても、コンパイル後、この数値は変数のような扱いで、リテラルプールという場所に格納されます。ですから、アドレスエラー等でこのリテラルプールを破壊してしまえば、プログラム上では数値で割っていてもDivide Errorが起こってしまうというのはあり得ます。

コンパイル直後にデバッガに掛けてリテラルの場所を探しておき。NaN発生後のダンプと比較してみると良いでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

再度一から作り直しました。

かなり長い間苦戦しましたが,一応エラーは回避できました。

今後また同じようなエラーが起きた場合,ここで教えていただいたアドバイスを活かしたいと思います。

改めてありがとうございました。

お礼日時:2006/07/21 12:00

どこかに必ずおかしな代入などがあるはずです。


(もちろん出所不明のFORTRANコンパイラでしたら、間違いもあるかも知れませんが...)
1ステップごとに実行するか1ステップごとにそれぞれの変数の状態を出力してチェックすることをお勧めします。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

再度一から作り直しました。

かなり長い間苦戦しましたが,一応エラーは回避できました。

今後また同じようなエラーが起きた場合,ここで教えていただいたアドバイスを活かしたいと思います。

改めてありがとうございました。

お礼日時:2006/07/21 11:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています