这听起来像是典型的浮点问题,但隐藏在内部。尽管0.025可以精确表示,但函数to_r
无疑将在内部执行各种不精确的浮点运算。结果3602879701896397/144115188075855872
无疑会与a
的中间转换版本比您的提案1/40
更紧密地匹配。
现在3602879701896397/144115188075855872
非常接近1/40
。但它并不完全相同,所以不简化。
有关详细信息,请查看与不精确浮点相关的some previous的questions。这是一个细致入微的案例,因此也是一个很好的问题,但其基本原理是相同的。我正在研究C
的{{1}}实现,以获取更多详细信息。