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/MathPad/MPPowerFunction.m
2014-11-07 19:50:28 +01:00

53 lines
1.4 KiB
Objective-C

//
// MPPowerFunction.m
// MathPad
//
// Created by Kim Wittenburg on 30.09.14.
// Copyright (c) 2014 Kim Wittenburg. All rights reserved.
//
#import "MPPowerFunction.h"
#import "MPExpression.h"
#import "MPExpressionTree.h"
@implementation MPPowerFunction
MPFunctionAccessorImplementation(ExponentExpression, _exponentExpression)
- (NSArray *)childrenAccessors
{
return @[@"exponentExpression"];
}
- (BOOL)validate:(NSError *__autoreleasing *)error
{
if (!self.baseValue) {
if (error) {
*error = MPParseError(11,
NSLocalizedString(@"No Base For Power.", @"Error message. This is displayed when a power does not have a base value."),
nil);
}
return NO;
}
return [self.baseValue validate:error] && [[self.exponentExpression parse] validate:error];
}
- (NSDecimalNumber *)evaluate
{
NSDecimalNumber *base = [self.baseValue evaluate];
NSDecimalNumber *exponent = [[self.exponentExpression parse] evaluate];
if ([base isEqualToNumber:@(0)] && [exponent isEqualToNumber:@(0)]) {
// The C pow function returns 1 for pow(0, 0). Mathematically this should be undefined.
return [NSDecimalNumber notANumber];
}
return [[NSDecimalNumber alloc] initWithDouble:pow(base.doubleValue, exponent.doubleValue)];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"^%@", self.exponentExpression.description];
}
@end