From 006bdf0adc3e4e26951e481c498f9444c64789ce Mon Sep 17 00:00:00 2001 From: Solomon Foster Date: Fri, 11 Jun 2010 21:45:29 -0400 Subject: [PATCH] Move Num operators from Real.pm to Num.pm. --- src/core/Num.pm | 76 +++++++++++++++++++++++++++++++++++++++++++----- src/core/Real.pm | 57 ------------------------------------ 2 files changed, 68 insertions(+), 65 deletions(-) diff --git a/src/core/Num.pm b/src/core/Num.pm index 1aa9b8e381c..d05d4e54715 100644 --- a/src/core/Num.pm +++ b/src/core/Num.pm @@ -69,28 +69,28 @@ augment class Num does Real { ~self; } - method ceiling(Num $x:) { + method sqrt(Num $x:) { + pir::sqrt__Nn($x); + } + + method floor(Real $x:) { given $x { when NaN { NaN } when Inf { Inf } when -Inf { -Inf } - pir::box__PI(pir::ceil__IN($x)); + pir::box__PI(pir::floor__IN($x)); } } - method floor(Real $x:) { + method ceiling(Num $x:) { given $x { when NaN { NaN } when Inf { Inf } when -Inf { -Inf } - pir::box__PI(pir::floor__IN($x)); + pir::box__PI(pir::ceil__IN($x)); } } - method sqrt(Num $x:) { - pir::sqrt__Nn($x); - } - method sin(Num $x: $base = Radians) { pir::sin__Nn($x.to-radians($base)); } @@ -192,4 +192,64 @@ augment class Num does Real { } } +multi sub infix:«<=>»(Num $a, Num $b) { + # TODO: should be Order::Same, ::Increase, ::Decrease once they work + if $a == $b { + 0; + } else { + $a < $b ?? -1 !! 1; + } +} + +multi sub infix:«==»(Num $a, Num $b) { + pir::iseq__INN( $a, $b) ?? True !! False +} + +multi sub infix:«!=»(Num $a, Num $b) { + pir::iseq__INN( $a, $b) ?? False !! True # note reversed +} + +multi sub infix:«<»(Num $a, Num $b) { + pir::islt__INN( $a, $b) ?? True !! False +} + +multi sub infix:«>»(Num $a, Num $b) { + pir::isgt__INN( $a, $b) ?? True !! False +} + +multi sub infix:«<=»(Num $a, Num $b) { + pir::isgt__INN( $a, $b) ?? False !! True # note reversed +} + +multi sub infix:«>=»(Num $a, Num $b) { + pir::islt__INN( $a, $b) ?? False !! True # note reversed +} + +# Arithmetic operators + +multi sub prefix:<->(Num $a) { + pir::neg__NN($a); +} + +multi sub infix:<+>(Num $a, Num $b) { + pir::add__NNN($a, $b) +} + +multi sub infix:<->(Num $a, Num $b) { + pir::sub__NNN($a, $b) +} + +multi sub infix:<*>(Num $a, Num $b) { + pir::mul__NNN($a, $b) +} + +multi sub infix:(Num $a, Num $b) { + pir::div__NNN($a, $b) +} + +multi sub infix:<**>(Num $a, Num $b) { + pir::pow__NNN($a, $b) +} + + # vim: ft=perl6 diff --git a/src/core/Real.pm b/src/core/Real.pm index 5c49399c5bf..1d756af8f25 100644 --- a/src/core/Real.pm +++ b/src/core/Real.pm @@ -195,105 +195,52 @@ multi sub infix:«<=>»(Real $a, Real $b) { $a.Bridge <=> $b.Bridge; } -multi sub infix:«<=>»(Num $a, Num $b) { - # TODO: should be Order::Same, ::Increase, ::Decrease once they work - if $a == $b { - 0; - } else { - $a < $b ?? -1 !! 1; - } -} - multi sub infix:«==»(Real $a, Real $b) { $a.Bridge == $b.Bridge; } -multi sub infix:«==»(Num $a, Num $b) { - pir::iseq__INN( $a, $b) ?? True !! False -} - multi sub infix:«!=»(Real $a, Real $b) { $a.Bridge != $b.Bridge; } -multi sub infix:«!=»(Num $a, Num $b) { - pir::iseq__INN( $a, $b) ?? False !! True # note reversed -} - multi sub infix:«<»(Real $a, Real $b) { $a.Bridge < $b.Bridge; } -multi sub infix:«<»(Num $a, Num $b) { - pir::islt__INN( $a, $b) ?? True !! False -} - multi sub infix:«>»(Real $a, Real $b) { $a.Bridge > $b.Bridge; } -multi sub infix:«>»(Num $a, Num $b) { - pir::isgt__INN( $a, $b) ?? True !! False -} - multi sub infix:«<=»(Real $a, Real $b) { $a.Bridge <= $b.Bridge; } -multi sub infix:«<=»(Num $a, Num $b) { - pir::isgt__INN( $a, $b) ?? False !! True # note reversed -} - multi sub infix:«>=»(Real $a, Real $b) { $a.Bridge >= $b.Bridge; } -multi sub infix:«>=»(Num $a, Num $b) { - pir::islt__INN( $a, $b) ?? False !! True # note reversed -} - # Arithmetic operators multi sub prefix:<->(Real $a) { -($a.Bridge); } -multi sub prefix:<->(Num $a) { - pir::neg__NN($a); -} - multi sub infix:<+>(Real $a, Real $b) { $a.Bridge + $b.Bridge; } -multi sub infix:<+>(Num $a, Num $b) { - pir::add__NNN($a, $b) -} - multi sub infix:<->(Real $a, Real $b) { $a.Bridge - $b.Bridge; } -multi sub infix:<->(Num $a, Num $b) { - pir::sub__NNN($a, $b) -} - multi sub infix:<*>(Real $a, Real $b) { $a.Bridge * $b.Bridge; } -multi sub infix:<*>(Num $a, Num $b) { - pir::mul__NNN($a, $b) -} - multi sub infix:(Real $a, Real $b) { $a.Bridge / $b.Bridge; } -multi sub infix:(Num $a, Num $b) { - pir::div__NNN($a, $b) -} - multi sub infix:<%>(Real $a, Real $b) { # older version is pir::mod__NNN($a.Bridge, $b.Bridge) $a - ($a / $b).floor * $b; @@ -303,10 +250,6 @@ multi sub infix:<**>(Real $a, Real $b) { $a.Bridge ** $b.Bridge; } -multi sub infix:<**>(Num $a, Num $b) { - pir::pow__NNN($a, $b) -} - # NOTE: mod is only actually defined for integer types! # But if you have an integer type that does Real, this # should automatically define an appropriate mod for you.