• ベストアンサー

fortranで長いプログラムを書き、コンパイルはできたのですが

fortranで長いプログラムを書き、コンパイルはできたのですが 実行の際、実行時間がかなりかかり実行がなかなか終わりません。 プログラムが長いと言っても、30分以上かかるようなプログラムではないと思うのですが。 実行時間が長くかかってしまう原因についてご存知の方は教えて下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8467/18126)
回答No.2

#1さんが言ってる無限ループの他には、 何らかの理由でループのカウンターが壊れていてとんでもない回数のループになっているとか、 入力待ちになっているのに気が付いていないとか、 が考えられますね。 紙上デバックもいいけど、デバッガがあるのならそれを使えばよいし、デバッガが近くになくても適当なところにPRINT文を入れてどこまで進んでいるのかを確認するだけでも見直すべき範囲が絞り込めます。

その他の回答 (2)

  • drsupple
  • ベストアンサー率38% (48/126)
回答No.3

普通のFortranプログラムの実行時間は、作った人が考えるよりはるかに短いです。 せいぜい数秒で全ての処理が終わってしまうと思います。 私も初めて作った時は10分で終わらなくて、30分回しても終わらなかったことがありました。 他の回答者様の言われるように無限ループに入っていました。 修正したところ、1000分の1秒以下で処理が終わりました。

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

単純に無限ループに入りこんでいる。 フォートランコンパイラはそれほど頭がよくない場合があって、無限ループを見落とすことがあります。 まずはソースコードを紙上でデバックして下さい。単純なデバックでは見つからなくても、無限ループがあるかも、と思って探すと一発で見つかる場合が多いです。

528612
質問者

補足

do ループの中にwrite(*,*)文を書きどこで問題がおきているのか確認しました。 やはり、ループが終わらない状態でした。 プログラムの構造は単純に書くと、 program main call sub 1 call sub 2 stop end sub1 do call sub 3 do; do;do enddo;enddo;enddo;enddo return end sub1 sub 3 do; do; do; do enddo; enddo; enddo; enddo return end sub 3 sub 1でsub 3を呼び出しています。 これが原因になる事はあるのでしょうか? よろしくお願いします。

関連するQ&A