Math.sqrt(n).to_i が正しい値をかえすのはnがどれくらいまででしょうか?
Ruby 2.2.1 を使っているのですが、
n = 1, 2, … , のとき
Math.sqrt(n).to_i が正しい値をかえす
(すなわち、1 からn までの全てのm に対して、Math.sqrt(m).to_i の値が [√m] となる)
のはn がどれくらいまででしょうか?
ちなみに
n = 4503599761588224 のとき、
Math.sqrt(n).to_i が正しい値をかえさないことを
次のコードを実行して見つけました。
require 'bigdecimal/math'
include BigMath
67000000.upto(68000000){|i|
n = i * i - 1
if !((BigDecimal.new(n.to_s).sqrt(10)).to_i == Math.sqrt(n).to_i)
p [n, i, (BigDecimal.new(n.to_s).sqrt(10)).to_i, Math.sqrt(n).to_i]
break
end
}
(追記)
n = i * i - 1型を全て調べるなら、次のコードの方がよい。
i = 2
num = Math.sqrt(i * i - 1).to_i
while num == i - 1
i += 1
num = Math.sqrt(i * i - 1).to_i
end
p [i * i - 1, i]
出力結果
[4503599761588224, 67108865]