首先,看一下使用 C++ 在 Visual Studio 中的以下代码:
float a = 10000000000000000.0;
float b = a - 10000000000000000.0;
打印出来时,结果是:
a = 10000000272564224.000000
b = 272564224.000000
当在 Debug 下的 Watch 中查看它们时,结果是:
-Name- -Value- -Type-
a 1.0000000e+016 float
b 2.7256422e+008 float
前置问题:我确定10000000000000000.0在 .0 范围内float
。为什么我们不能得到正确的 a / b使用float
?
后续问题:对于前置问题,基于所有出色的以下答案。我知道原因是32 位浮点数的准确度约为 7 位,所以除了前 6-7 位之外,所有赌注都关闭了。这就是为什么数学不成立的原因,并且对于这些大数字来说打印看起来是错误的。我必须使用 double 以获得更高的准确性。那么为什么 float 声称能够处理大量数字,同时我们又不能信任它呢?