Fundamental Redesign of Evaluation
This commit is contained in:
@@ -9,9 +9,6 @@
|
||||
#import "MPPowerFunction.h"
|
||||
|
||||
#import "MPExpression.h"
|
||||
#import "MPExpressionTree.h"
|
||||
|
||||
#import "MPValueGroup.h"
|
||||
|
||||
@implementation MPPowerFunction
|
||||
|
||||
@@ -22,30 +19,6 @@ MPFunctionAccessorImplementation(ExponentExpression, _exponentExpression)
|
||||
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];
|
||||
|
||||
Reference in New Issue
Block a user