在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.09
和perl6/rakudo-star-2015.11
答案 0 :(得分:4)
分母应该限制在64位 - 你需要FatRat
才能超越它。
但是,目前的Rakudo似乎没有强制执行此限制:如果您手动执行此操作,则可以通过Rat.new(71, 10**23)
高兴地构建您的号码。
我的猜测是你在处理理性文字时发现了一个错误,但是它可能只会在代码中触发,无论如何都是未来的。
编辑:可以使用尖括号来获取allomorphic value,这会产生正确的值。事实上,定期的理性文字also specced会在溢出时回归RatStr
。
但是,这种回退机制似乎没有在Rakudo中实现。