#import <Foundation/Foundation.h>

@interface NSNumber (MathExt)

- (NSNumber *)add:(NSNumber *)otherNumber;

@end

@implementation NSNumber (MathExt)

- (NSNumber *)add:(NSNumber *)otherNumber
{
    double left = [self doubleValue];
    double right = [otherNumber doubleValue];
    
    return [NSNumber numberWithDouble:left+right];
}

@end

int main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSNumber *one = [NSNumber numberWithDouble:1.2];
NSNumber *two = [NSNumber numberWithInt:2];
NSNumber *three = [NSNumber numberWithBool:YES];
NSNumber *four = [NSNumber numberWithChar:'a'];

NSNumber *result = [one add:two];
result = [result add:three];
result = [result add:four];

NSLog(@"%f", [result doubleValue]);

[pool release];

return 0;
}