none
VC8における特定のコードで浮動小数点数の演算結果がおかしくなる RRS feed

  • 質問


  • 以下のようなコードをVisualStudio2005(VC8)のDebugモードでビルドし実行するとデバッガのAutoウィンドウでで表示される値ならびに計算結果がおかしくなる。

        double test = double(2454160.5) - double(0.235);
        double v0 = double(2454160.5);
        double v1 = double(0.235);
        double test2 = v0 - v1;

        ERRORLOG("test  " + lexical_cast<string>(test));
        ERRORLOG("test2 " + lexical_cast<string>(test2));

    デバッグでの結果
        test =2,454,160.265
        test2=2,454,160.25:
    リリースでの結果
        test =2,454,160.265
        test2=2,454,160.265

    上述した計算結果で誤っているのはtest2。リリースではおこらない。
    困っています。
    2007年4月17日 12:36

すべての返信

  • 私の環境では test, test2 ともに 2454160.265 となりました。

    私が入力したプログラムは以下のとおりです。

    (Code Snippet がうまく使えない・・・

     

    Code Snippet

    #include <iostream>
    #include <iomanip>

     

    int main(int argc, char* argv[])
    {
        double test = double(2454160.5) - double(0.235);
        double v0 = double(2454160.5);
        double v1 = double(0.235);
        double test2 = v0 - v1;

     

        std::cout.setf(std::ios::fixed);
        std::cout << test << std::endl;
        std::cout << test2 << std::endl;

     

       return 0;
    }

     

    コンパイラオプションの /fp などはつけられていますか?


     

    2007年4月17日 14:59
  • 最適化の問題でしょうね。
    コンパイラオプションの最適化部分を変更してみてはどうでしょうか。
    #pragama optimize を使って、部分的に変更することもできます。



     

    2007年4月18日 12:07