【发布时间】:2018-12-09 19:26:03
【问题描述】:
在学习浮点运算时,我遇到了一些事情,我引用:'a float/double can't store 0.1 exact"。
在 SO 上有一个 question 指向同样的事情,并且接受的答案也非常有说服力。但是我想在我自己的电脑上尝试一下,所以我写了下面的程序
double a = 0.1;
if (a == 0.1)
{
Console.WriteLine("True");
}
else
{
Console.WriteLine("False");
}
Console.Read();
控制台打印True。令人震惊,因为我已经对其他事情深信不疑。谁能告诉我浮点运算发生了什么?或者我只是有一台将数值存储为以 10 为底的计算机?
【问题讨论】:
-
鉴于它的存储不准确以相同的方式两次你写它为什么不会他们是平等的?
-
@jonrsharpe:我完全同意,当你以正确的方式思考它时,它就会变得显而易见。但我认为,如果你不习惯思考到底发生了什么,这是一个合理的问题。
-
@jonrsharpe 我提到的问题是在做同样的事情,如果我错了,请纠正我。
-
我在我的电脑上得到了正确的结果。您使用的是调试还是发布? Debug 和 Release 的结果是否相同?有一些微处理器有内部错误,会给出错误的结果。 Debug 使用模拟器来执行数学运算,而 Release 使用 micro 内部的浮点算术单元。我见过两者都失败了。某些 PC 有补丁来修复 FPU 中的错误,并且补丁可能安装错误,具体取决于 PC 上安装的 Micro。答案应始终为 TRUE,错误除外。
标签: c# floating-point precision ieee-754