为什么我的小数字没有被准确存储?

Why is my very small number not being stored precisely?

answer on Whosebug en Español 中,我展示了 Perl 6 避免了许多其他语言的计算错误,因为它跟踪分子和分母。也就是说,十进制数实际上表示为比率。但是,它确实会在非常小的数字上产生一个小错误:

> 0.000000000000000000071.nude.perl
(71, 1000000000000000000000)
> 0.0000000000000000000071.nude.perl
(71, 10000000000000000000000)
> 0.00000000000000000000071.nude.perl
(71, 99999999999999991611392)

这会在未来的版本中修复吗?

我使用 perl6/rakudo-star-2015.09perl6/rakudo-star-2015.11

得到相同的答案

分母应该被限制为 64 位 - 你需要一个 FatRat 来超越它。

但是,在当前的 Rakudo 中似乎并未强制执行上述限制:如果您手动执行此操作,它将很乐意通过 Rat.new(71, 10**23).

构建您的号码

我的猜测是您发现了有理文字处理中的一个错误,但它可能只会在无法面向未来的代码中触发。

编辑: 可以使用尖括号使 allomorphic value, and this produces the correct value. In fact, regular rational literals are also specced 在溢出时退回到 RatStr

然而,这种回退机制似乎并没有在 Rakudo 中实现。