2010-05-21 76 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