1.何があってこの記事を書いたか
下記のコードを書いたら無限ループしてしまい理由が意外だったからです
n = 0
i = 0
while i < 8
n += 1
i = i + (1/n)
puts "#{n}"
end
2.無限ループ回避
どうやら(1/n)
と書くと1かnが文字として認識されるらしく計算が永遠に終わりませんでした。
→2020/4/24にご指摘をいただき、文字ではなく、(分数が正の値の場合)切り捨てとして扱われることが判明しました。また負の値の場合は取り扱いが変わるそうなので注意が必要となります。
そこで分数の表示をRational(1, n)
と書くことで正常に動きました。
下記が正しいコードです。
n = 0
i = 0
while i < 8
n += 1
i = i + Rational(1, n)
puts "#{n}"
end