码迷,mamicode.com
首页 > 其他好文 > 详细

浮点数的陷阱

时间:2015-09-06 20:03:16      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

1 #include<stdio.h>
2 int main()
3 {
4     double i;
5     for (i = 0.0; i != 10; i += 0.1)
6         printf("%lf\n", i);
7     return 0;
8 }

这个程序会在10的时候停下来吗???答案是不会。

 

产生上述陷阱的原因

实际上,计算机中的所有数据都用二进制表示,包括浮点数。这就导致某些浮点数不能用二进制精确表示,例如0.1(这很容易理解,就像10/3不能被十进制精确表示一样)

进一步地说,浮点数是采用分数+指数来表示的,例如

0.5 = 1/2

0.75 = 1/2 + 1/(2^2)

0.875 = 1/2 + 1/(2^2) + 1/(2^3)

0.1 = 1/(2^4) + 1/(2^5) + 1/(2^8) + ...

其中0.1只能无限循环下去,这就意味着0.1在计算机中不能被精确表示,因此产生上述陷阱也就很容易理解

浮点数的陷阱

标签:

原文地址:http://www.cnblogs.com/chesterhu/p/4786835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!