Skip to content

Instantly share code, notes, and snippets.

@ichoosetoaccept
Created December 5, 2011 15:32
Show Gist options
  • Select an option

  • Save ichoosetoaccept/1433968 to your computer and use it in GitHub Desktop.

Select an option

Save ichoosetoaccept/1433968 to your computer and use it in GitHub Desktop.
+ (double)popOperandOffProgramStack:(NSMutableArray *)stack
{
double result = 0;
id topOfStack = [stack lastObject];
if (topOfStack) [stack removeLastObject];
if ([topOfStack isKindOfClass:[NSNumber class]])
{
result = [topOfStack doubleValue];
}
else if ([topOfStack isKindOfClass:[NSString class]])
{
NSString *operation = topOfStack;
if ([operation isEqualToString:@"+"])
{
result = [self popOperandOffProgramStack:stack] +
[self popOperandOffProgramStack:stack];
}
else if ([@"*" isEqualToString:operation])
{
result = [self popOperandOffProgramStack:stack] *
[self popOperandOffProgramStack:stack];
}
else if ([operation isEqualToString:@"-"])
{
double subtrahend = [self popOperandOffProgramStack:stack];
result = [self popOperandOffProgramStack:stack] - subtrahend;
}
else if ([operation isEqualToString:@"/"])
{
double divisor = [self popOperandOffProgramStack:stack];
if (divisor) result = [self popOperandOffProgramStack:stack] / divisor;
}
else if ([operation isEqualToString:@"sin"])
{
result = sin([self popOperandOffProgramStack:stack]);
}
else if ([operation isEqualToString:@"cos"])
{
result = cos([self popOperandOffProgramStack:stack]);
}
else if ([operation isEqualToString:@"sqrt"])
{
result = sqrt([self popOperandOffProgramStack:stack]);
}
else if ([operation isEqualToString:@"π"])
{
result = M_PI * [self popOperandOffProgramStack:stack];
}
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment