VC++6で実行可能だったプログラムがあるのですが、
VC++2008で動かしたところ止まってしましました。
なんでだろうといろいろ調べた結果、ループさせすぎ、ということがわかりました。
コードは
t=0;
dt=(1./ramda)/100.;
tfinal=50;
while(t<tfinal){
(処理)
t=t+dt;
}
なんて感じなんですが、このtfinal=が50なら途中で止まり、15なら正常に終わります。
しかし50はしんどいけど15までならええよ、なんて怠慢な処理をされたくありません。
VC++6のほうがぜんぜんがんばり屋です。最近の若いヤツといったらなまけものでしょうがないですね。
どうすれば良いでしょうか。
No.3ベストアンサー
- 回答日時:
必要なループ回数を先に求めてから for 等で処理してみたらどうですか?
ループのカウンタは余裕をみて64ビットの符合なし整数を使っています。
unsigned long long loopmax = (unsigned long long)(tfinal / dt);
if( dt * (dtの型と同じ型へキャスト)loopmax == tfinal ) {
--loopmax; //余りが無いなら一つ減らします。 while の処理が t < tfinal なので!
}
for( unsigned long long cnt = 0 ; cnt < loopmax ; ++cnt ) {
(処理)
}
No.5
- 回答日時:
≻t=0;
≻dt=(1./ramda)/100.;
≻tfinal=50;
≻while(t<tfinal){
≻(処理)
≻t=t+dt;
≻}
このプログラムに問題はありません。
≻dt=0.020000 t=18.000000 tfinal=50.000000
このデータで止まった場合はここにあるプログラム以外で止まっています。
他の部分を疑ってください。
No.4
- 回答日時:
Windows アプリケーションなら、長時間メッセージループを処理しないと、アプリケーションが無限ループに入った、もしくは暴走していると判断されかねません。
時間の掛かる処理をしている間も、メッセージループを処理する様に実装しましょう。
コンソールアプリケーションなら、この回答は無視してください。
No.2
- 回答日時:
t,dt,tfinalの型は?doubleやfloatでは無いですか?
・t=t+dt; こんな書き方は誤差がどんどん蓄積されていくので、基本使わない方がよいです。
できるならループ回数から直接計算するようにした方がよいです(t=dt *N とか)
・VC++6と2005以降で、doubleやfloatを使用したときに生成されるコードが変ったそうです。そのため、精度に違いが出るようです。
http://homepage1.nifty.com/herumi/prog/prog90.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(SNS・コミュニケーションサービス) ゲームでボイスチャットを使いたいんですが、親にどう説明したらいいですか 2 2022/08/03 14:07
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- オンラインゲーム VCしながらゲームしたい… 2 2022/06/11 16:04
- 夫婦 メンヘラ女にはメルタル持ちません... 旦那がモンハンやってて、VCしたりしてて女の子と仲良くメッセ 4 2022/08/08 18:55
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- 発達障害・ダウン症・自閉症 数ヶ月前、ASD/ADHDの検査と共に、IQテストのようなものも受けたのですが、見方がよく分からない 2 2022/08/08 11:20
- 出会い・合コン 彼氏ができなくて焦ってきました 7 2022/10/09 23:28
- IT・エンジニアリング 不具合の現状認識をしないプログラマって信用できる人? できない人? 8 2023/07/28 09:09
- Java Java 南京錠 2 2023/02/04 11:46
- 物理学 Va=1/4πε × (q1/a + q2/b + q3/c) Vc=1/4πε × (q1+q2+ 2 2023/04/16 14:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ノットイコールを教えて下さい
-
win10で、正確な待ち時間の作り方
-
Excelでのセル内容の高速消去方法
-
VC++2010 GDIオブジェクトの解...
-
SQLの速度をあげるには・・・
-
基本情報技術者試験詳しい方へ...
-
DoEvents関数って何?
-
エクセルVBAで教えて頂きたいの...
-
C言語で、文字とか入力されなく...
-
VBでの簡易電卓の作成(減算方...
-
If Not c Is Nothing Then ~延...
-
ナップザック問題?をエクセル...
-
C言語プログラミングで、多項式...
-
LINUX QT上でパソコンのシャッ...
-
小数点を含む数値かどうか判断...
-
絶対パスの取得について
-
pgmファイルをC言語で読込、処...
-
実行時のCPU使用率を増やしたい
-
減色処理について
-
符号付きにすべきか、符号なし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
win10で、正確な待ち時間の作り方
-
小数点を含む数値かどうか判断...
-
SQLの速度をあげるには・・・
-
絶対パスの取得について
-
Excel VBAにて、2GB超の点群デ...
-
VBでの簡易電卓の作成(減算方...
-
C言語:関数を使うメリットとデ...
-
テキストファイルの空行をスキ...
-
プログラム上のCPU稼働率低減に...
-
Excel(VBA)でSetTimer関数を使...
-
ナップザック問題?をエクセル...
-
If Not c Is Nothing Then ~延...
-
プログラム 擬似コードとはどん...
-
基本情報技術者試験詳しい方へ...
-
ノットイコールを教えて下さい
-
符号付きにすべきか、符号なし...
-
C言語 時刻差分の算出方法
-
実行時のCPU使用率を増やしたい
おすすめ情報