2017-04-24 157 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