diff options
author | Matthias Andreas Benkard <matthias@benkard.de> | 2008-07-29 19:56:21 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <matthias@benkard.de> | 2008-07-29 19:56:21 +0200 |
commit | 9c3236394224167b31eeb402fa78928a0e3eb7fe (patch) | |
tree | dc76fdd35091dba953e62e1d737701292bb6f26d /MLKRatio.m | |
parent | 5df0d8d27dae228d9568de691ca434194170d1ac (diff) |
Add a non-trivial number of arithmetic methods to number classes.
Diffstat (limited to 'MLKRatio.m')
-rw-r--r-- | MLKRatio.m | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -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]; |