45 lines
1.4 KiB
Objective-C
Executable File
45 lines
1.4 KiB
Objective-C
Executable File
//
|
|
// MPRootTerm.m
|
|
// MathPad
|
|
//
|
|
// Created by Kim Wittenburg on 11.01.15.
|
|
// Copyright (c) 2015 Kim Wittenburg. All rights reserved.
|
|
//
|
|
|
|
#import "MPRootTerm.h"
|
|
|
|
#import "MPParsedExpression.h"
|
|
|
|
|
|
|
|
@implementation MPRootTerm
|
|
|
|
- (NSDecimalNumber *)doEvaluation:(NSError *__autoreleasing *)error
|
|
{
|
|
MPEvaluateExpression(exponent, 0);
|
|
MPEvaluateExpression(root, 1);
|
|
if ([root compare:[NSDecimalNumber zero]] < 0) {
|
|
// There are no negative roots.
|
|
if (error) {
|
|
*error = [NSError errorWithDomain:MPMathKitErrorDomain
|
|
code:101
|
|
userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"The root of a negative number is undefined.", nil)}];
|
|
}
|
|
return nil;
|
|
}
|
|
if ([exponent isEqualToNumber:@(0)]) {
|
|
// The C pow function returns 1 for pow(0, 0). Mathematically this should be undefined.
|
|
if (error) {
|
|
*error = [NSError errorWithDomain:MPMathKitErrorDomain
|
|
code:101
|
|
userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"The 0th root is undefined.", nil)}];
|
|
}
|
|
return nil;
|
|
}
|
|
NSDecimalNumber *actualExponent = [[NSDecimalNumber one] decimalNumberByDividingBy:exponent];
|
|
return [[NSDecimalNumber alloc] initWithDouble:pow(root.doubleValue, actualExponent.doubleValue)];
|
|
|
|
}
|
|
|
|
@end
|