Arithmetic/Rational/Objective-C: Difference between revisions

m
modernize
m (prepare for inclusion as template)
m (modernize)
Line 11:
BOOL withSign;
}
+(RCRationalNumber *instancetype)valueWithNumerator:(int)num andDenominator: (int)den;
+(RCRationalNumber *instancetype)valueWithDouble: (double)fnum;
+(RCRationalNumber *instancetype)valueWithInteger: (int)inum;
+(RCRationalNumber *instancetype)valueWithRational: (RCRationalNumber *)rnum;
-(instancetype)initWithNumerator: (int)num andDenominator: (int)den;
-(id)init;
-(idinstancetype)initWithNumeratorinitWithDouble: (intdouble)numfnum andDenominatorprecision: (int)denprec;
-(idinstancetype)initWithInteger: (int)inum;
-(id)initWithDouble: (double)fnum precision: (int)prec;
-(idinstancetype)initWithRational: (RCRationalNumber *)rnum;
-(id)initWithInteger: (int)inum;
-(id)initWithRational: (RCRationalNumber *)rnum;
-(NSComparisonResult)compare: (RCRationalNumber *)rnum;
-(id)simplify: (BOOL)act;
Line 63 ⟶ 62:
@implementation RCRationalNumber
// initializers
-(idinstancetype)init
{
NSLog(@"initialized to unity");
Line 69 ⟶ 68:
}
 
-(idinstancetype)initWithNumerator: (int)num andDenominator: (int)den
{
if ((self = [super init]) != nil) {
Line 85 ⟶ 84:
}
 
-(idinstancetype)initWithInteger:(int)inum
{
return [self initWithNumerator: inum andDenominator: 1];
}
 
-(idinstancetype)initWithDouble: (double)fnum precision: (int)prec
{
if ( prec > 9 ) prec = 9;
Line 98 ⟶ 97:
}
 
-(idinstancetype)initWithRational: (RCRationalNumber *)rnum
{
return [self initWithNumerator: [rnum numerator] andDenominator: [rnum denominator]];
Line 211 ⟶ 210:
}
 
// or just test if negativnegative
-(BOOL)isNegative
{
return ([self numerator] < 0) ? YES : NO;
}
 
Line 253 ⟶ 252:
 
// class method
+(RCRationalNumber *instancetype)valueWithNumerator:(int)num andDenominator: (int)den
{
return [[[RCRationalNumberself alloc] initWithNumerator: num andDenominator: den] autorelease];
}
 
+(RCRationalNumber *instancetype)valueWithDouble: (double)fnum
{
return [[[RCRationalNumberself alloc] initWithDouble: fnum] autorelease];
}
 
+(RCRationalNumber *instancetype)valueWithInteger: (int)inum
{
return [[[RCRationalNumberself alloc] initWithInteger: inum] autorelease];
}
 
+(RCRationalNumber *instancetype)valueWithRational: (RCRationalNumber *)rnum
{
return [[[RCRationalNumberself alloc] initWithRational: rnum] autorelease];
}
@end</lang>
Line 280 ⟶ 279:
int main()
{
@autoreleasepool {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 
int i;
for(i=2; i < 0x80000; i++) {
int candidate = i;
RCRationalNumber *sum = [RCRationalNumber valueWithNumerator: 1
andDenominator: candidate];
int factor;
for(factor=2; factor < sqrt((double)candidate); factor++) {
if ( (candidate % factor) == 0 ) {
sum = [[sum add: [RCRationalNumber valueWithNumerator: 1
andDenominator: factor]]
add: [RCRationalNumber valueWithNumerator: 1
andDenominator: (candidate/factor)]];
}
}
if ( [sum denominator] == 1 ) {
printf("Sum of recipr. factors of %d = %d exactly %s\n",
candidate, [sum integer], ([sum integer]==1) ? "perfect!" : "");
}
}
if ( [sum denominator] == 1 ) {
printf("Sum of recipr. factors of %d = %d exactly %s\n",
candidate, [sum integer], ([sum integer]==1) ? "perfect!" : "");
}
}
 
}
[pool release];
return 0;
}</lang>
Anonymous user