Ruby float to_r 计算。小数化为分数

发布于 2024-10-19 13:51:44 字数 156 浏览 2 评论 0原文

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

例如:

a = 0.025
a.to_r
3602879701896397/144115188075855872.

为什么不使用 1/40?

Can someone clarify why ruby returns such big numbers when using to_r

for example:

a = 0.025
a.to_r
3602879701896397/144115188075855872.

Why not use 1/40?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏有森光若流苏 2024-10-26 13:51:44

这听起来像是一个典型的浮点问题,但隐藏在里面。虽然 0.025 可以精确表示,但函数 to_r 无疑会在内部执行各种浮点运算,而这些运算必然是不精确的。结果 3602879701896397/144115188075855872 无疑会比您的提案 1/40 更接近地匹配 a 的中间转换版本。

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

有关更多信息,请查看一些上一页 与不精确浮点相关的问题。因此,这是一个微妙的案例,也是一个很好的问题,但其基本原理是相同的。我正在研究 Float#to_r 的 ruby​​ C 实现以获取更多详细信息。

This sounds like a typical floating point problem, but hidden inside. While 0.025 may be represented exactly, the function to_r will no doubt perform various floating-point operations internally which are necessarily inexact. The result 3602879701896397/144115188075855872 will no doubt match the intermediate, transformed version of a more closely than your proposal 1/40.

Now 3602879701896397/144115188075855872 is extremely close to being the same as 1/40. But it is not quite equal, so is not simplified.

For more information, look at some of the previous questions related to inexact floating point. This is a nuanced case and a good question therefore, but has its fundamentals in the same things. I'm looking into the ruby C implementation of Float#to_r for more details.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文