Visual Studio 2010的精度问题

Mah*_*esh 4 c# visual-c++-6 visual-studio-2010 floating-point-precision

我有一个用Microsoft Visual C++ 6.0编写的应用程序.现在我使用C#在Visual Studio 2010中重写了应用程序,但由于精度问题,结果不匹配.其中一个精确问题是以下问题.

float a = 1.0f;

float b = 3.0f;

float c = a / b;
Run Code Online (Sandbox Code Playgroud)

在Visual Studio 2010中运行时,这是C#代码,给出cvalue =0.333333343

但是相同的代码,在值定义中的值之后删除f,当在Visual C++ 6.0上运行时给出c值= 0.333333.

任何人都可以解决它并解释在Visual Studio和Visual C++ 6.0中获得相同c值的方法吗?


实际上,这些值来自观察窗口.我开始知道不同版本的visual studio在浮点格式表示方面可能有所不同.因此,手表中的值可能没用.这就是我在两个visual studio版本中打印值的原因,结果如下.使用visual c ++语言的visual studio 6.0,它是0.333333(六个3)

但是使用C#语言的visual studio 10它是0.3333333(七个3)

那么有人可以帮助我使我的C#程序产生与visual C++相同的结果吗?(即如何使浮动操作在两个版本上产生相同的结果???)

Jon*_*eet 15

鉴于确切的值是0.3重复出现,它们都不是"正确的" - 如果你试图匹配二进制浮点计算的精确结果,那么由于它们的工作方式,这通常是一个坏主意.(有关更多信息,请参阅我在.NET中关于二进制浮点的文章.)

这是可能的,你不应该使用在第一位二进制浮点点(例如,如果你的价值观代表确切,人工数额如金钱).或者,您可能只应该使用特定容差进行相等比较.

有可能是C#和C生产完全相同的位模式-但你看到的,因为这些值是如何被不同的结果格式化.同样,我不会使用数字的文本表示进行比较.


Ton*_*nyK 5

C#只是显示较少的小数位.0.333333343圆形到六位有效数字是0.333333.潜在价值c是相同的.

当然,如果你想要更高的精度,你总是可以使用double变量.