计算iOS中的非整数指数

时间:2013-08-06 09:35:22

标签: objective-c c math exponent shunting-yard

我一直在研究我的数学解析器,我已经意识到我正在使用的一些代码无法处理非整数的指数。我正在使用的一些代码似乎与int一起正常工作,而不是double

else if ([[token stringValue] isEqualToString: @"^"])
    {
        NSLog(@"^");
        double exponate = [[self popOperand] intValue];
        double base     = [[self popOperand] doubleValue];
        result = base;
        exponate--;
        while (exponate)
        {
            result *= base;
            exponate--;
        }
        [self.operandStack addObject:  [NSNumber numberWithDouble: result]];

    }

” 使用Objective-C,如何正确地评估5 ^ 5.5? (6987.71242969)

2 个答案:

答案 0 :(得分:4)

library code为您完成工作:

double exponent = [[self popOperand] doubleValue];
double base = [[self popOperand] doubleValue];

[self.operandStack addObject:@(pow(base, exponent))];

答案 1 :(得分:2)

Josh的回答是对的,我只是想在条件中添加一些关于使用浮点数的东西:

double exponate = [[self popOperand] intValue];
exponate--;
while (exponate)
{
    result *= base;
    exponate--;
}

这可能导致无限循环,因为舍入错误while (exponate)可能永远不会评估为false。如果您使用doublesfloats作为循环变量,请始终执行while (myFloat > 0.0)

之类的操作