2017-04-24 155 views
1

不知何故,当我运行这个程序时,它会一直持续下去,即使我以一种能够在达到10时停止的方式编写它。请帮助。For循环永远持续

double i; 
for(i = 0; i != 10; i+= 0.1){ 
    printf("%.1f\n", i); 
} 
+2

打印更多小数点的“i”,看看发生了什么。 – molbdnilo

+1

适用条件'我<= 10.0'它将解决您的问题... –

+0

“适用条件富”,而不解释为什么是一个可怕的答案。这只是一个稍微好一点的评论。 – Donnie

回答

5

0.1不能准确表示为double

一个快速解决方法是将环路条件更改为i < 10

否则使用整数类型的循环变量,固定的精度浮点数,或其他任何其他。

但是,请注意,如果其他十进制增量,特别是2的负幂(0.5,0.25等),它可能会工作,只要整个迭代计数不是太高。

+1

指出1/10不能用二进制表示的原因与分数1/3不能成立的原因相同以十进制表示。 1/10,永久为二进制重复:0.000110011001100110011 ....这意味着十进制数0.1在二进制数字系统中没有精确的表示。 – cdhowie