奇怪的情况,在执行代码的以下各行的时候:问题的计算浮子
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