奇怪的情況,在執行代碼的以下各行的時候:問題的計算浮子
const float a = 47.848711;
const float b = 47.862952;
float result = b - a;
我得到一個(的NSLog%.10f)結果= 0.0142440796。
我預計會得到0.0142410000。
發生了什麼事?
奇怪的情況,在執行代碼的以下各行的時候:問題的計算浮子
const float a = 47.848711;
const float b = 47.862952;
float result = b - a;
我得到一個(的NSLog%.10f)結果= 0.0142440796。
我預計會得到0.0142410000。
發生了什麼事?
如果我問你以下幾點:
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
經典!
What Every Computer Scientist Should Know About Floating-Point Arithmetic
(基本上,浮點可能是不準確; wikipedia)。
見http://stackoverflow.com/questions/872544/precision-of-floating-point – heavyd 2010-05-21 04:51:25