在iOS中计算非整数指数



我一直在研究我的数学解析器,我意识到我使用的一些代码无法处理非整数的指数。我使用的这段代码似乎与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)

让库代码为您完成工作:

double exponent = [[self popOperand] doubleValue];
double base = [[self popOperand] doubleValue];
[self.operandStack addObject:@(pow(base, exponent))];

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

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

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

相关内容

  • 没有找到相关文章

最新更新