// // 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