2011-12-14 60 views
1

可能重复:
Dealing with accuracy problems in floating-point numbersC++浮动存储

代码:

float flt = 78983636; // stores 78983632. as seen in debugger 
flt = 79282056;  // stores 79282056. 

为什么不能够准确地储存1个值,但能够为第二价值更大?

+0

“较大”与此无关。请参阅我给另一个问题(这是关于Java和双打的答案,但相同的概念适用)的答案:http://stackoverflow.com/questions/7811112/why-is-long9223372036854665200d-giving-me-9223372036854665216/7811169#7811169 – NPE 2011-12-14 16:15:44

回答

6

典型的32位浮点数具有大约24位的整数精度。你能够精确地存储你的价值,即使它更大,仅仅是因为它击中了一个看起来合适的整数,而另一个却没有。

具体而言,数字79282056存储为1.1813947 * 2 或79282056.2526208。所以它不是确切的,在你省略的小数点后面有一些数字。

您可以使用this converter来检查用于存储任何浮点数的尾数,符号和指数。