Ruby float to_r计算。小数到分数

时间:2011-03-01 07:10:50

标签: ruby internals

有人可以澄清为什么ruby在使用to_r时返回如此大的数字

例如:

a = 0.025
a.to_r
3602879701896397/144115188075855872.

为什么不使用1/40?

1 个答案:

答案 0 :(得分:4)

这听起来像是典型的浮点问题,但隐藏在内部。尽管0.025可以精确表示,但函数to_r无疑将在内部执行各种不精确的浮点运算。结果3602879701896397/144115188075855872无疑会与a的中间转换版本比您的提案1/40更紧密地匹配。

现在3602879701896397/144115188075855872非常接近1/40。但它并不完全相同,所以不简化。

有关详细信息,请查看与不精确浮点相关的some previousquestions。这是一个细致入微的案例,因此也是一个很好的问题,但其基本原理是相同的。我正在研究C的{​​{1}}实现,以获取更多详细信息。