実現したいこと
「1〜N番目の整数の逆数の総和が5を超えるときのNの値を求めるためのプログラム」
の作成(例 1/1 + 1/2 + 1/3 + 1/4 + 1/5 .... 1/N が5を越える時)において
while文の条件内で分数を使用すると、無限ループにハマってしまうのを解消したい。
該当のソースコード
Aパターン
ruby
1def reciprocal_sum 2 array = [] 3 sum_array = 0 4 n = 1 5 while sum_array < 5 6 r = Rational(1, n) #この部分が違う 7 array << r 8 sum_array = array.sum 9 n += 1 10 end 11 return n - 1 12end
Bパターン
ruby
1def reciprocal_sum 2 array = [] 3 sum_array = 0 4 n = 1 5 while sum_array < 5 6 r = (1.0 / n) #この部分が違う 7 array << r 8 sum_array = array.sum 9 n += 1 10 end 11 return n - 1 12end
質問
rubyで分数を使用するときは1/nのような形ではintegerクラスと判断され小数点以下が切り落とされ0として扱われると学習したので、AパターンでRational(1, n)を使用したのですが無限ループに入ってしまいます。
Bパターンのように書くと無限ループせずに動きます
なぜこのような違いが起きるのでしょうか?
回答2件
あなたの回答
tips
プレビュー