2016-12-19 9 views
0

非常に単純なwhileループを作成しようとしていて、非常に簡単な除算に固執しています。whileループを分割するR

だから、これは期待通りに動作します。私は、乗算に操作し、条件を変えてみましたし、それが動作

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

しかし、私はこれを実行すると、私は1秒

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に近づくにつれて1を追加するので、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