- 締切済み
ほぼ同じプログラムで結果が違う問題
プログラムAとBが以下のようになっています。 プログラムA ------------- do n=1,100000 write(*,*) n コード 300行ぐらい enddo プログラムB -------------- do n=1,100000 if(mod(n,100).eq.1) write(*,*) n 同じソースコード enddo 両者の違いはループカウンタの画面表示頻度です。Aは毎回、Bは100回に1回印刷します。それだけですね。 ところが、プログラムAは淡々と走っていきますが、BはNaNなどを生じてしまい結果が違います。このような問題の原因は何でしょうか。出力頻度なので内容とは関係ないはずだと思うのですが。 実はコンパイラを変えたらBの問題が消えました。NaNの出力がなくなり大体想定した値が出てきています。2つのコンパイラはともにgfortranですが、何か仕様が違うということがあるでしょうか。 プログラムとしてはせいぜい10万点ぐらいの2次元配列を何度も繰り返し計算するということで、今のPCの演算速度では大したことはありません。 大昔、パソコンFortranは計算の規模(配列の規模と反復計算の回数など)に応じてコンパイラオプションを付けたり、コンパイラ自体が別物であったりしていました。そういう問題があるのかなと思うのですが。もし、何か心当たりがありましたらよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- akayoroshi
- ベストアンサー率50% (46/91)
回答No.1
最適化をしないあるいは最低限にしてコンパイルしたらどうなりますか こういうとき、原因として最適化機能に不具合があることが多いので