- ベストアンサー
試行回数を多くするとなぜ動かないの?
お世話になっております、皆様のおかげでwindows上でCを動かせるようになりましたプログラマー猿のein_heldenlebenです。 Borlandの無償配布をインストールしてスペクトルのプログラム書いています。適当な乱数[srand(time(NULL)), rand()]を発生させてお決まりのモンテカルロ法でやってます。 正常にコンパイルできて、試行回数が少ないときは正常に動いてくれるのですが、試行回数を多くすると動かなくなります。たまーに最後まで動いて結果が出てくれたりします。非常に気まぐれです。 メモリーが解放されないなど私の知り得ないコンピューター内部で異常が起きてたりするのでしょうか?正常に働かせるにはどうしたらいいのでしょう? 環境はWindows XPあるいは2000です。何か思いつく対策を教えて下さい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これだけの情報ではさすがに原因までは分かりません。単に処理に時間がかかっているだけかもしれませんし、どこかで無限ルーチンに入り込んでいるのかもしれません。テキストファイルにログを書き出すようにしてみてそれを追ってみてはどうでしょうか?
その他の回答 (1)
- terra5
- ベストアンサー率34% (574/1662)
プログラムにバグがあるが、たまたま試行回数が少ないと 問題が発生しない、 回数が多くても常に発生するとは限らないということだろうと思います。 カウンタ等のオーバーフロー、バッファオーバーフロー、 初期化していない変数の使用、ポインタの使用ミス、 配列の添え字のオーバー、malloc等を使用していて未使用になっても開放していない、・・・あたりでしょうか。 プログラムをもう一度よくチェックしてください。 知りえない異常がおきるケースより、 単純なバグの可能性のほうがはるかに高いです。 あと、動かないというのは状況説明としては不十分ですね。 実行できない、実行すると***のエラーが出てとまる、 実行するといつまでも終わらない等、 正確に書かないと他の人にはわかりませんよ。 それぞれの場合でチェックする項目がかわってきますから。
お礼
回答ありがとうございました。
補足
失礼しました。エラーの表示も何も出ず、計算中のままでストップし、ctrl+Cを押して強制終了してやらねばならない状況に陥ってます。挙げて下さった項目を確かめてみます。
お礼
zero divisionが発生するためだと言う事が分かりました。だから回数を多くするとダメになる事が多かったんです。プログラムミスですね。 回答ありがとうございました。
補足
ありがとうございます。 途中結果を打ち出すようにしてみれば止まる箇所が特定できるかもしれませんね。ちょっとやってみます。