55 lines
1.5 KiB
Objective-C
55 lines
1.5 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"
|
|
|
|
#import "MPValueGroup.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
|