标签:
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