我有一个用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