2016-12-19 69 views
0

我正在嘗試編寫一個非常簡單的while循環,並陷入了非常簡單的劃分。在R中的while循環中劃分

所以這按預期工作:

> i = 100 
> (i+1)/2 
[1] 50.5 

但是當我運行此我會得到1S

i = 100 
while (i > 0.001) { 
    i = (i+1)/2 
    print(i) 
} 

[1] 1 
[1] 1 
... 

一個無限循環,我試圖改變操作條件,乘法和它的工作原理精細:

> i = 100 
> while (i < 1000) { 
+ i = (i+1)*2 
+ print(i) 
+ } 
[1] 202 
[1] 406 
[1] 814 
[1] 1630 

將成爲期間發生了什麼事一些簡短的說明感激師。

+5

如果您添加一個,它將始終高於.5(實際上是1)。 – alistaire

回答

0

由於您正在添加一個分數,因爲數字接近1,因此您將添加一個,因此它將2/2分開,並以1結尾,因此限制爲1.示例:

n <- c(1000, numeric(length = 49)) 

for (i in seq(50)[-1]) n[i] <- (n[i - 1] + 1)/2 

n 
## [1] 1000.000000 500.500000 250.750000 125.875000 63.437500 32.218750 16.609375 
## [8] 8.804688 4.902344 2.951172 1.975586 1.487793 1.243896 1.121948 
## [15] 1.060974 1.030487 1.015244 1.007622 1.003811 1.001905 1.000953 
## [22] 1.000476 1.000238 1.000119 1.000060 1.000030 1.000015 1.000007 
## [29] 1.000004 1.000002 1.000001 1.000000 1.000000 1.000000 1.000000 
## [36] 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 
## [43] 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 
## [50] 1.000000 
+0

數學失敗...謝謝! – jackrobot