Skip to content

Commit

Permalink
Rework most of the Rat math functions to use / to construct Rats rath…
Browse files Browse the repository at this point in the history
…er than Rat.new.

This means that Rat math will automatically fall back to Num math if the intermediate values cannot be represented as Ints in Rakudo.  (Previously it would yield a cryptic error message because Rat.new insisted on Int arguments.)
  • Loading branch information
colomon committed Nov 27, 2009
1 parent f151334 commit 2b93c78
Showing 1 changed file with 14 additions and 14 deletions.
28 changes: 14 additions & 14 deletions src/setting/Rat.pm
Expand Up @@ -55,57 +55,57 @@ class Rat {
}

multi sub infix:<+>(Rat $a, Rat $b) {
Rat.new($a.numerator * $b.denominator + $b.numerator * $a.denominator,
$a.denominator * $b.denominator );
($a.numerator * $b.denominator + $b.numerator * $a.denominator)
/ ($a.denominator * $b.denominator);
}

multi sub infix:<+>(Rat $a, Int $b) {
Rat.new($a.numerator + $b * $a.denominator, $a.denominator);
($a.numerator + $b * $a.denominator) / $a.denominator;
}

multi sub infix:<+>(Int $a, Rat $b) {
Rat.new($a * $b.denominator + $b.numerator, $b.denominator);
($a * $b.denominator + $b.numerator) / $b.denominator;
}

multi sub infix:<->(Rat $a, Rat $b) {
Rat.new($a.numerator * $b.denominator - $b.numerator * $a.denominator,
$a.denominator * $b.denominator );
($a.numerator * $b.denominator - $b.numerator * $a.denominator)
/ ($a.denominator * $b.denominator);
}

multi sub infix:<->(Rat $a, Int $b) {
Rat.new($a.numerator - $b * $a.denominator, $a.denominator);
($a.numerator - $b * $a.denominator) / $a.denominator;
}

multi sub infix:<->(Int $a, Rat $b) {
Rat.new($a * $b.denominator - $b.numerator, $b.denominator);
($a * $b.denominator - $b.numerator) / $b.denominator;
}

multi sub prefix:<->(Rat $a) {
Rat.new(-$a.numerator, $a.denominator);
}

multi sub infix:<*>(Rat $a, Rat $b) {
Rat.new($a.numerator * $b.numerator, $a.denominator * $b.denominator);
($a.numerator * $b.numerator) / ($a.denominator * $b.denominator);
}

multi sub infix:<*>(Rat $a, Int $b) {
Rat.new($a.numerator * $b, $a.denominator);
($a.numerator * $b) / $a.denominator;
}

multi sub infix:<*>(Int $a, Rat $b) {
Rat.new($a * $b.numerator, $b.denominator);
($a * $b.numerator) / $b.denominator;
}

multi sub infix:</>(Rat $a, Rat $b) {
Rat.new($a.numerator * $b.denominator, $a.denominator * $b.numerator);
($a.numerator * $b.denominator) / ($a.denominator * $b.numerator);
}

multi sub infix:</>(Rat $a, Int $b) {
Rat.new($a.numerator, $a.denominator * $b);
$a.numerator / ($a.denominator * $b);
}

multi sub infix:</>(Int $a, Rat $b) {
Rat.new($b.denominator * $a, $b.numerator);
($b.denominator * $a) / $b.numerator;
}

multi sub infix:</>(Int $a, Int $b) {
Expand Down

0 comments on commit 2b93c78

Please sign in to comment.