Arra tippelnék hogy csak double van, az MRI implementációban ezt nem néztem meg. Lehet hogy a matematikai kerekítésekkel operál inkább. Lásd az alábbit, ahol veszteség nélkül vissza tudja szorozni:
a = 2 / 3.0
=> 0.6666666666666666
a * 3
=> 2.0
Szerk.: Megnéztem, csak double-t használ.
https://ruby-doc.org/core/Float.html
A Float object represents a sometimes-inexact real number using the native architecture's double-precision floating point representation.