class Rat is Cool does Rational[Int, uint64] { }

Rat objects store rational numbers as a pair of a numerator and denominator. Number literals with a dot but without exponent produce Rats.

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)␤»

Thus arithmetic with short dotted-decimal numbers does not suffer from floating point errors.

To prevent the numerator and denominator from becoming pathologically large, the denominator is limited to 64 bit storage. On overflow of the denominator during an arithmetic operation a Num (floating-point number) is returned instead. You can tune this behavior by setting the $*RAT-OVERFLOW dynamic variable.

For example this function crudely approximates a square root, and overflows the denominator quickly:

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

If you want arbitrary precision arithmetic with rational numbers, use the FatRat type instead.

Rat objects are immutable.

Methods§

method raku§

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

Returns an implementation-specific string that produces an equivalent object when given to EVAL.

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

Typegraph§

Type relations for Rat
✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Rat ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Cool ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Rational ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Mu ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Any ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Numeric ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Real ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Stringy ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Str ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 Allomorph ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 RatStr ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025 ✨ อัปเดตล่าสุด: type/Rat - Kapook Update 2025

Expand chart above