2010-05-21 49 views
3

奇怪的情况,在执行代码的以下各行的时候:问题的计算浮子

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

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

我预计会得到0.0142410000。

发生了什么事?

+2

见http://stackoverflow.com/questions/872544/precision-of-floating-point – heavyd 2010-05-21 04:51:25

回答

3

如果我问你以下几点:

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 

当你一轮价值10个位数打印出来,你会得到:

0.0142440796