私はMicrosoft Visual C++ 6.0で書かれたアプリケーションを持っています。今、Visual Studio 2010でC#を使用してアプリケーションを書き直しましたが、精度の問題が原因で結果が一致しません。このような精度の問題の1つは次のものです。Visual Studio 2010の精度問題
float a = 1.0f;
float b = 3.0f;
float c = a/b;
これは、Visual Studioで実行すると2010は、Visual Cで実行した場合、値の定義の値の後にFを削除する、= 0.333333343
しかし、同じコードをc
値を与えるC#コードである++ 6.0は、cの値を与えます= 0.333333
。
誰でもそれを並べ替えて、Visual C++ 6.0と同様にVisual Studioでも同じ値を持つ方法を説明できますか?
実際、値はウォッチウィンドウから取得されます。私は、Visual Studioの異なるバージョンが浮動小数点フォーマットの表現が異なるかもしれないことを知りました。したがって、時計の価値は役に立たないかもしれません。これが私がVisual Studioの両方のバージョンで値を印刷した理由です。その結果は次のとおりです。 Visual C++言語を使用してのVisual Studio 6.0と それは0.333333(6 3の)
ですが、C#言語を使用してVisual Studioの10でそれは0.3333333である(7 3の)
だから、誰もに私のC#のプログラムを作るために私を助けることができますVisual C++と同じ結果を生成する??? (つまり、両方のバージョンで同じ結果を生成する浮動小数点演算を作るにはどうすればよいでしょうか)
どのように値を調べていますか?私は確信しています(私が間違っていて、C#がシーンの裏に 'double 'を使用していない限り)内部表現は同じですが、ユーザに数字を表示する方法は異なりますので、単に異なる表示のデフォルトを見ることができます。 –
@MrLister C#4.0仕様書では、4.1.6節で浮動小数点数のバイナリ演算は少なくとも* floatの範囲と精度を使用して実行されることが強調されています。つまり、背後の精度は実装定義です。 .NET Frameworkでは、背後で倍精度を使用することがあります。 – phoog