Raku 中的有理数

mil*_*123 11 raku

我使用 Raku 进行一些计算,因为它有很好的数字类型。但是,我在使用“.raku”时遇到问题

say (1/6+1/6).raku
#<1/3>
Run Code Online (Sandbox Code Playgroud)

我们得到这个。然而,

say (1/10+1/10).raku
#0.2
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?我期待 <1/5>。发生什么了?

Jon*_*ton 14

在 Raku 中,0.2构造一个Rat, 从而产生与写作1/5(将是常量折叠)或<1/5>(字面形式)非常相同的结果。您只能在指定指数的情况下获得浮点数(例如,2e-1)。

.raku(原名.perl)方法的工作是生产的东西,将往返,并产生相同的值,如果EVAL“d。在 的情况下1/5,它可以精确地表示为小数,因此它将产生0.2。当小数形式不能往返时,它只采用小数表示。

您始终可以使用.numerator.denominator方法恢复分子和分母,以根据需要进行格式化。此外,.nude方法返回分子和分母的列表,/如果需要,可以将其与 a 连接:

say (1/6+1/6).nude.join("/");     # 1/3
say (1/10+1/10).nude.join("/");   # 1/5
Run Code Online (Sandbox Code Playgroud)