From 9c3236394224167b31eeb402fa78928a0e3eb7fe Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Tue, 29 Jul 2008 19:56:21 +0200 Subject: Add a non-trivial number of arithmetic methods to number classes. --- MLKRatio.m | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'MLKRatio.m') diff --git a/MLKRatio.m b/MLKRatio.m index 604b457..4b0b23e 100644 --- a/MLKRatio.m +++ b/MLKRatio.m @@ -89,6 +89,48 @@ DEFINE_MPQ_TWOARG_OPERATION (divideBy:, mpq_div) return mpq_get_d (value); } +-(MLKInteger *) numerator +{ + mpz_t numer; + MLKInteger *obj; + + mpz_init_set (numer, mpq_numref (self->value)); + obj = [MLKInteger integerWithMPZ:numer]; + mpz_clear (numer); + + return obj; +} + +-(MLKInteger *) denominator +{ + mpz_t denom; + MLKInteger *obj; + + mpz_init_set (denom, mpq_denref (self->value)); + obj = [MLKInteger integerWithMPZ:denom]; + mpz_clear (denom); + + return obj; +} + +-(NSComparisonResult) compare:(MLKRatio *)arg +{ + int cmp = mpq_cmp (self->value, arg->value); + + if (cmp == 0) + return NSOrderedSame; + else if (cmp < 0) + return NSOrderedAscending; + else + return NSOrderedDescending; +} + +-(BOOL) isEqual:(id)arg +{ + return ([arg isKindOfClass:[MLKRatio class]] + && mpq_equal (self->value, ((MLKRatio *)arg)->value)); +} + -(NSString *) description { return [self descriptionWithBase:10]; -- cgit v1.2.3