Это звучит как типичная проблема с плавающей точкой, но скрыто внутри.Хотя 0.025 может быть представлено точно, функция to_r
, без сомнения, будет выполнять различные операции с плавающей запятой внутри себя, которые обязательно будут неточными.Результат 3602879701896397/144115188075855872
, без сомнения, будет соответствовать промежуточной, преобразованной версии a
более близко, чем ваше предложение 1/40
.
Теперь 3602879701896397/144115188075855872
очень близко к тому же, что и 1/40
.Но он не совсем равен, поэтому не упрощен.
Для получения дополнительной информации, посмотрите некоторые из предыдущих вопросов , связанных с неточнымиплавающая запятая.Это нюанс и, следовательно, хороший вопрос, но в основе его лежат одни и те же вещи.Я ищу подробности о реализации C
в Ruby *1017*.