0

我一直在研究我的数学解析器,我开始意识到我正在使用的一些代码无法处理非整数指数。我正在使用的那段代码似乎适用于 a int,但不适用于 a 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)

4

2 回答 2

4

库代码为您完成工作:

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

[self.operandStack addObject:@(pow(base, exponent))];
于 2013-08-06T09:40:45.883 回答
2

乔希的回答是对的,我只是想添加一些关于在条件下使用浮点数的内容:

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

这可能导致无限循环,因为舍入错误while (exponate)可能永远不会计算为false. 如果您使用doublesorfloats作为循环变量,请始终执行类似的操作while (myFloat > 0.0)

于 2013-08-06T09:48:13.290 回答