计算浮动的问题

时间:2010-05-21 04:48:36

标签: iphone objective-c

奇怪的情况,当执行以下代码行时:

const float a = 47.848711;
const float b = 47.862952;
float result = b - a;

我得到(NSLog%.10f)结果= 0.0142440796。

我预计会得到0.0142410000。

发生了什么事?

2 个答案:

答案 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