Archived
1

Fundamental Redesign of Evaluation

This commit is contained in:
Kim Wittenburg
2014-11-24 22:42:44 +01:00
parent 10f0e73ad3
commit 7a32e3b0b6
45 changed files with 1398 additions and 350 deletions

View File

@@ -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];