Naukę Rubiego zacząłem już jakiś czas temu. Robiąc jedno z zadań z Project Euler trafiłem na dziwne zachowanie interpretera Ruby. Mianowicie przy wielu liczbach całkowitych ich pierwiastek jest niepoprawny. Z tego co zauważyłem problem występuje dla liczb większych od 106. Może to ja robię coś źle?

Na najprostszym przykładzie:

num = 123456789
sqrt = Math.sqrt(num) #=> 11111.1110605556
(sqrt**2).prec_i #=> 123456788

I tak dalej:

(Math.sqrt(1234567890)**2).prec_i #=> 1234567889
(Math.sqrt(1000200001)**2).prec_i #=> 1000200000
(Math.sqrt(10020001)**2).prec_i #=> 10020000
(Math.sqrt(1824304153657982900)**2).prec_i #=> 1824304153657982720

Ale znowu:

(Math.sqrt(100000000)**2).prec_i #=> 100000000
(Math.sqrt(1002001)**2).prec_i #=> 1002001

Może mi to wyjaśnić jakiś "rubinowiec"? ;)