Ruby float to_r расчет.десятичные дроби в дроби - PullRequest
3 голосов
/ 01 марта 2011

Может кто-нибудь уточнить, почему ruby ​​возвращает такие большие числа при использовании to_r

например:

a = 0.025
a.to_r
3602879701896397/144115188075855872.

Почему бы не использовать 1/40?

1 Ответ

4 голосов
/ 01 марта 2011

Это звучит как типичная проблема с плавающей точкой, но скрыто внутри.Хотя 0.025 может быть представлено точно, функция to_r, без сомнения, будет выполнять различные операции с плавающей запятой внутри себя, которые обязательно будут неточными.Результат 3602879701896397/144115188075855872, без сомнения, будет соответствовать промежуточной, преобразованной версии a более близко, чем ваше предложение 1/40.

Теперь 3602879701896397/144115188075855872 очень близко к тому же, что и 1/40.Но он не совсем равен, поэтому не упрощен.

Для получения дополнительной информации, посмотрите некоторые из предыдущих вопросов , связанных с неточнымиплавающая запятая.Это нюанс и, следовательно, хороший вопрос, но в основе его лежат одни и те же вещи.Я ищу подробности о реализации C в Ruby *1017*.

...