アプリ版:「スタンプのみでお礼する」機能のリリースについて

Visual C++ 2005 Express Edition でdebugとreleaseで計算結果が変わってしまいます.
OSはwindows 2000 を使用しています.
桁数が12桁ほどの計算です.
どのような原因が考えられるでしょう?

A 回答 (4件)

1.メモリーの初期値が0ではないのに0だと思っている。


2.確保したつもりのメモリーよりもよけいに書き込んでいる。
3.デバッグのときは勝手に0にしてくれたり、メモリーとメモリーの間に
隙間を作ってくれたりしているようです。
リリースモードではメモリーとメモリーのあいだに隙間は無いようです。

この回答への補足

ありがとうございます.
計算する際に,初期化しなくてもいい値に関しては初期化はしていないので,その可能性もあるかもしれません.
配列を使用して計算しているので,メモリを確保していないところまで計算している可能性はあるので,チェックして見ます.

補足日時:2007/05/17 10:24
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
実際に、プログラムを変更するのはなかなか大変なので、すぐに解決できたか返答できなくて申し訳ありません。
助言のとおり、プログラムをもう一度チェックしてみます。
ありがとうございます。

お礼日時:2007/05/18 21:27

Visual C++ に限らず、debug と release で挙動が違うというのは当然です。

なぜなら、release にはデバッグ情報が入っていないし、コンパイラによる最適化もかかってくるからです。MFCなどは、debug と release で使用するライブラリが違うくらいです。

debugモードで単体テストをやって先輩から「馬鹿」って言われたのは内緒の話(汗)

文面から見て学生さんだと思いますが、「なんとなく思い通りに動いているからきっとできてる」じゃなくて、
* この値を入れたらこういう値を返す。(正常系)
* 境界値、限界値で正しい挙動を示す。(境界値、限界値系)
* 無効な値を入れたらちゃんとはじく。(エラー系)
* 言語仕様の限界値など極端な値を入れてもちゃんとはじく。(異常系)
など確認項目をちゃんと書き出して、"relase"でテストすることをお勧めします。手間と時間はかかるけど確実に動くプログラムができます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
確かにご指摘のとおりな部分もありますので、なんとなくではなくもっと厳密に考えていかなければと思いました。
上記のような、テストをして確実に動くプログラムを目指してがんばります。

お礼日時:2007/05/18 21:22

ANo.2の回答のほかに


4.debugとreleaseで最適化の違いで、式が変更されたり、評価順序が変更され、計算結果が変わります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
そうなのですね、もっとdebugとreleaseについて理解できるよう勉強します。
ありがとうございます。

お礼日時:2007/05/18 21:24

どんなコードを書いたとき、どんな風に計算結果が異なるのでしょうか?


できうる範囲で、具体的に示してください。

この回答への補足

数値計算でシミュレーションを行っており,その際に収束計算を行っています.
a=bとなる式であれば,a-b=0となるようにしています.
その値がdebugとreleaseで変わってしまいます.
debugだと0.0・・・といった感じですが,releaseだと1.・・・といった感じです.

補足日時:2007/05/17 10:13
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
他の方に指摘していただいた方針で変更して以降と思います。
ありがとうございました。

お礼日時:2007/05/18 21:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています