我有一個用Microsoft Visual C++ 6.0編寫的應用程序。現在我已經使用C#重寫了Visual Studio 2010中的應用程序,但由於精度問題導致結果不匹配。其中一個精確問題是以下問題之一。Visual Studio 2010的精確問題
float a = 1.0f;
float b = 3.0f;
float c = a/b;
這是當在Visual Studio 2010運行C#代碼給出c
值= 0.333333343
但同樣的代碼,在值的定義,當上運行值之後去除˚F的Visual C++ 6.0給出C值= 0.333333
。
任何人都可以對它進行排序並解釋如何在visual Studio以及Visual C++ 6.0中爲c賦予相同的值?
實際上這些值取自監視窗口。我開始知道不同版本的Visual Studio在浮點格式表示上可能會有所不同。因此,手錶中的值可能沒有用處。這就是爲什麼我在兩個visual studio版本中都打印了值的原因,結果如下所示。 與Visual Studio 6.0使用Visual C++語言是0.333333(6個3的)
但使用C#語言的Visual Studio 10是0.3333333(7個3的)
所以任何人可以幫助我,使我的C#程序產生與Visual C++相同的結果? (即我怎樣才能使浮動操作產生相同的結果在這兩個版本?)
您是如何看待這些值的?我很確定內部表示是相同的(除非我錯了,C#在後臺使用`double'),但向用戶顯示數字的方法不同,因此您可以簡單地查看不同的顯示默認值。 – 2011-12-15 12:37:06
@MrLister C#4.0規範在第4.1.6節中說,浮點數上的二進制運算「使用*至少* float類型和精度」(強調增加)來執行。所以幕後精度是由實現定義的。 .NET Framework可能在幕後使用雙打。 – phoog 2011-12-28 18:29:26