Archived
1
This repository has been archived on 2022-08-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
mathpad/MathKit/MPRootTerm.m
2017-08-31 00:04:21 +02:00

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