• 締切済み

fortranでのNaNについて

お忙しい所、NaNについて回答お願い致します。 fortranでプログラムを使用して数値計算を行っていますが、計算途中で結果がNaNとなり困っています。 NaNは、0で除算を行なったり、負の数の指数を求めようとした時に出る無限大や定義できない値のようなのですが、式を見ても0で除算を行なったり、負の数の指数を求めようとしている所はありません。 もし同じような経験をされて見事解決された方、居られましたらその時の対処法をお聞かせ願えないでしょうか。 何卒よろしくお願い致します。

みんなの回答

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.3

コンパイラがわからないので、自信は無しとしますが リテラルプールを破壊しているという可能性が高いですね。プログラム上では直接数値が書いてあったとしても、コンパイル後、この数値は変数のような扱いで、リテラルプールという場所に格納されます。ですから、アドレスエラー等でこのリテラルプールを破壊してしまえば、プログラム上では数値で割っていてもDivide Errorが起こってしまうというのはあり得ます。 コンパイル直後にデバッガに掛けてリテラルの場所を探しておき。NaN発生後のダンプと比較してみると良いでしょう。

daitasuki
質問者

お礼

回答ありがとうございます。 再度一から作り直しました。 かなり長い間苦戦しましたが,一応エラーは回避できました。 今後また同じようなエラーが起きた場合,ここで教えていただいたアドバイスを活かしたいと思います。 改めてありがとうございました。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

環境(OSとコンパイラ)がわからないのでできるとは断言できないのですが、 浮動小数点レジスタの制御フラグをいじって、NaNが生成されたときに 例外が起きるようにしておけば、どこでNaNになるのかが絞れるのではないでしょうか? いずれにしろ、注意深く値の変化を追っていくよりないと思います。

参考URL:
http://www.xlsoft.com/jp/products/intel/cvf/docs/vf-html/pg/pg22.htm
daitasuki
質問者

お礼

回答ありがとうございます。 再度一から作り直しました。 かなり長い間苦戦しましたが,一応エラーは回避できました。 今後また同じようなエラーが起きた場合,ここで教えていただいたアドバイスを活かしたいと思います。 改めてありがとうございました。

  • yosi_yosi
  • ベストアンサー率35% (165/468)
回答No.1

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

daitasuki
質問者

お礼

回答ありがとうございます。 再度一から作り直しました。 かなり長い間苦戦しましたが,一応エラーは回避できました。 今後また同じようなエラーが起きた場合,ここで教えていただいたアドバイスを活かしたいと思います。 改めてありがとうございました。

関連するQ&A

専門家に質問してみよう