首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Raku中的有理数

Raku中的有理数
EN

Stack Overflow用户
提问于 2020-03-28 07:58:15
回答 3查看 229关注 0票数 11

我正在使用Raku进行一些计算,因为它有很好的数值类型。但是,我对使用'.raku‘有一个问题。

代码语言:javascript
复制
say (1/6+1/6).raku
#<1/3>

我们得到了这个。然而,

代码语言:javascript
复制
say (1/10+1/10).raku
#0.2

这是个bug吗?我期望<1/5>。会发生什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-28 09:00:21

在Raku中,0.2构造一个Rat,因此产生与编写1/5 (将被常量折叠)或<1/5> (字面形式)完全相同的结果。只有在指定指数(例如,2e-1)的情况下才会得到浮点。

.raku (以前称为.perl)方法的作用是产生往返的东西,如果是EVAL'd,则产生相同的值。在1/5的情况下,可以精确地表示为小数,因此它将产生0.2。只有当小数形式不往返时,它才求助于小数表示。

您可以随时使用.numerator.denominator方法恢复分子和分母,以便根据需要进行格式化。此外,.nude方法返回分子和分母的列表,如果需要,可以使用/将其加入:

代码语言:javascript
复制
say (1/6+1/6).nude.join("/");     # 1/3
say (1/10+1/10).nude.join("/");   # 1/5
票数 14
EN

Stack Overflow用户

发布于 2020-03-28 21:44:00

Hi @milou123我对raku恢复到十进制表示也有点惊讶-我可以看到一些上下文-比如教分数算术将从“保持为rat”模式中受益。话虽如此,但最终有道理的是,.raku只有一种方法,并且小数是默认的表示形式。

当然,使用raku,您也可以稍微更改一下语言。在这种情况下,我发明了一个新的'→‘后缀操作符...

代码语言:javascript
复制
multi postfix:<→> ( Rat:D $r ) { $r.nude.join("/") }
say (1/5+1/5)→;    # 2/5

我不够聪明,不知道内置的'raku‘方法是否可以以类似的方式被覆盖,我渴望看到关于如何简洁地做到这一点的建议……

票数 3
EN

Stack Overflow用户

发布于 2020-10-20 16:29:10

在Julia中试试这个:

代码语言:javascript
复制
julia> 1 // 10 + 1 // 10
1//5

julia> typeof(1 // 10 + 1 // 10)
Rational{Int64}


julia> 1 // 2 + 1 // 3
5//6

julia> typeof(1 // 2 + 1 // 3)
Rational{Int64}

Rat.pm6实现中,我们只能调用Rat类型的.raku方法来获得预期的格式:

代码语言:javascript
复制
multi method raku(Rat:D: --> Str:D) {
        if $!denominator == 1 {
            $!numerator ~ '.0'
        }
        else {
            my $d = $!denominator;
            unless $d == 0 {
                $d = $d div 5 while $d %% 5;
                $d = $d div 2 while $d %% 2;
            }
            if $d == 1 and (my $b := self.base(10,*)).Numeric === self {
                $b;
            }
            else {
                '<' ~ $!numerator ~ '/' ~ $!denominator ~ '>'
            }
        }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60895698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档