【发布时间】:2025-11-25 23:05:02
【问题描述】:
我有一个用 Microsoft Visual C++ 6.0 编写的应用程序。现在我使用 C# 在 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 具有相同值的方法吗??
实际上这些值是从监视窗口中获取的。我开始知道不同版本的视觉工作室可能在浮点格式表示上有所不同。因此 watch 中的值可能没有用。这就是为什么我在两个 Visual Studio 版本中都打印了这些值的原因,结果如下。 使用 Visual Studio 6.0 使用 Visual C++ 语言,它是 0.333333(六个 3)
但使用 C# 语言的 Visual Studio 10 为 0.3333333(七个 3)
那么任何人都可以帮助我使我的 C# 程序产生与 Visual C++ 相同的结果吗??? (即如何进行浮动操作以在两个版本上产生相同的结果???)
【问题讨论】:
-
您如何看待这些价值观?我很确定内部表示是相同的(除非我弄错了并且 C# 在幕后使用
double),但是向用户显示数字的方法不同,因此您可以简单地查看不同的显示默认值. -
@MrLister C# 4.0 规范在第 4.1.6 节中说,对浮点数的二进制操作“使用 至少
float范围和精度执行”(强调添加) .所以幕后的精度是实现定义的。 .NET Framework 很可能在幕后使用双精度。
标签: c# visual-studio-2010 visual-c++-6 floating-point-precision