- ベストアンサー
Visual C++でdebugとreleaseで計算結果が異なる
Visual C++ 2005 Express Edition でdebugとreleaseで計算結果が変わってしまいます. OSはwindows 2000 を使用しています. 桁数が12桁ほどの計算です. どのような原因が考えられるでしょう?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
1.メモリーの初期値が0ではないのに0だと思っている。 2.確保したつもりのメモリーよりもよけいに書き込んでいる。 3.デバッグのときは勝手に0にしてくれたり、メモリーとメモリーの間に 隙間を作ってくれたりしているようです。 リリースモードではメモリーとメモリーのあいだに隙間は無いようです。
その他の回答 (3)
- Interest
- ベストアンサー率31% (207/659)
Visual C++ に限らず、debug と release で挙動が違うというのは当然です。なぜなら、release にはデバッグ情報が入っていないし、コンパイラによる最適化もかかってくるからです。MFCなどは、debug と release で使用するライブラリが違うくらいです。 debugモードで単体テストをやって先輩から「馬鹿」って言われたのは内緒の話(汗) 文面から見て学生さんだと思いますが、「なんとなく思い通りに動いているからきっとできてる」じゃなくて、 * この値を入れたらこういう値を返す。(正常系) * 境界値、限界値で正しい挙動を示す。(境界値、限界値系) * 無効な値を入れたらちゃんとはじく。(エラー系) * 言語仕様の限界値など極端な値を入れてもちゃんとはじく。(異常系) など確認項目をちゃんと書き出して、"relase"でテストすることをお勧めします。手間と時間はかかるけど確実に動くプログラムができます。
お礼
回答ありがとうございます。 確かにご指摘のとおりな部分もありますので、なんとなくではなくもっと厳密に考えていかなければと思いました。 上記のような、テストをして確実に動くプログラムを目指してがんばります。
- TT414
- ベストアンサー率18% (72/384)
ANo.2の回答のほかに 4.debugとreleaseで最適化の違いで、式が変更されたり、評価順序が変更され、計算結果が変わります。
お礼
回答ありがとうございます。 そうなのですね、もっとdebugとreleaseについて理解できるよう勉強します。 ありがとうございます。
- asuncion
- ベストアンサー率33% (2127/6289)
どんなコードを書いたとき、どんな風に計算結果が異なるのでしょうか? できうる範囲で、具体的に示してください。
お礼
回答ありがとうございます。 他の方に指摘していただいた方針で変更して以降と思います。 ありがとうございました。
補足
数値計算でシミュレーションを行っており,その際に収束計算を行っています. a=bとなる式であれば,a-b=0となるようにしています. その値がdebugとreleaseで変わってしまいます. debugだと0.0・・・といった感じですが,releaseだと1.・・・といった感じです.
お礼
回答ありがとうございます。 実際に、プログラムを変更するのはなかなか大変なので、すぐに解決できたか返答できなくて申し訳ありません。 助言のとおり、プログラムをもう一度チェックしてみます。 ありがとうございます。
補足
ありがとうございます. 計算する際に,初期化しなくてもいい値に関しては初期化はしていないので,その可能性もあるかもしれません. 配列を使用して計算しているので,メモリを確保していないところまで計算している可能性はあるので,チェックして見ます.