奇怪的情况,当执行以下代码行时:
const float a = 47.848711;
const float b = 47.862952;
float result = b - a;
我得到(NSLog%.10f)结果= 0.0142440796。
我预计会得到0.0142410000。
发生了什么事?
答案 0 :(得分:6)
经典!
What Every Computer Scientist Should Know About Floating-Point Arithmetic
(基本上,浮点数可能不准确; wikipedia)。
答案 1 :(得分:2)
如果我问你以下内容怎么办?
const int a = 1.3; const int b = 2.7; int result = b - a;
我得到(NSLog%d)结果= 1。
我预计会得到1.4。发生了什么事?
在这种情况下,答案很明显,对吧? 1.3不是整数,因此存储在a
中的实际值为1,而存储在b
中的值不是2.7,而是2.当我从2中减去1时我得到1,这是观察到的答案。如果你到目前为止和我在一起,继续阅读。
在你的例子中发生了同样的事情。 47.848711不是单精度浮点数,因此最接近的浮点值存储在a
中,而这恰好是:
a = 47.8487091064453125
同样,b
中存储的值是与47.862952
最接近的浮点值,正好是:
b = 47.86295318603515625
当您减去这些数字以获得result
时,您会得到:
47.86295318603515625
- 47.8487091064453125
----------------------
0.01424407958984375
当您将该值四舍五入以将其打印出来时,您会得到:
0.0142440796