class Rat is Cool does Rational[Intuint64{ }

Rat 对象将有理数存储为分子和分母对。带点但不带指数的数字文字会生成 Rat

say 3.1;          # OUTPUT: «3.1␤»      (same as: Rat.new(31, 10)) 
say 3.1.^name;    # OUTPUT: «Rat␤» 
say 3.1.nude;     # OUTPUT: «(31 10)␤» 
 
say <1/2>;        # OUTPUT: «0.5␤»      (same as: Rat.new(1, 2)) 
say <1/2>.^name;  # OUTPUT: «Rat␤» 
say <1/2>.nude;   # OUTPUT: «(1 2)␤»

因此,使用短点分数字进行算术运算不会出现浮点数错误。

为了防止分子和分母变得病态地大,分母被限制为 64 位存储。在算术运算过程中分母溢出时,会返回一个 Num(浮点数)。你可以通过设置 $*RAT-OVERFLOW 动态变量来调整此行为。

例如,此函数粗略地逼近平方根,并快速溢出分母

sub approx-sqrt($n$iterations{
    my $x = $n;
    $x = ($x + $n / $x/ 2 for ^$iterations;
    return $x;
}
say approx-sqrt(25).^name;     # OUTPUT: «Rat␤» 
say approx-sqrt(210).^name;    # OUTPUT: «Num␤»

如果你希望对有理数进行任意精度的算术运算,请改用 FatRat 类型。

Rat 对象是不可变的。

方法§

方法 raku§

multi method raku(Rat:D: --> Str:D)

返回一个特定于实现的字符串,当提供给 EVAL 时,该字符串会生成一个 等效 对象。

say (1/3).raku;                # OUTPUT: «<1/3>␤» 
say (2/4).raku;                # OUTPUT: «0.5␤» 

类型图§

Rat 的类型关系
raku-type-graph Rat Rat Cool Cool Rat->Cool Rational Rational Rat->Rational Mu Mu Any Any Any->Mu Cool->Any Numeric Numeric Real Real Real->Numeric Rational->Real Stringy Stringy Str Str Str->Cool Str->Stringy Allomorph Allomorph Allomorph->Str RatStr RatStr RatStr->Rat RatStr->Allomorph

展开上面的图表