为什么我的非常小的数字没有精确存储?

时间:2015-12-04 04:14:53

标签: perl6

answer on StackOverflow 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

得到相同的答案

1 个答案:

答案 0 :(得分:4)

分母应该限制在64位 - 你需要FatRat才能超越它。

但是,目前的Rakudo似乎没有强制执行此限制:如果您手动执行此操作,则可以通过Rat.new(71, 10**23)高兴地构建您的号码。

我的猜测是你在处理理性文字时发现了一个错误,但是它可能只会在代码中触发,无论如何都是未来的。

编辑:可以使用尖括号来获取allomorphic value,这会产生正确的值。事实上,定期的理性文字also specced会在溢出时回归RatStr

但是,这种回退机制似乎没有在Rakudo中实现。