【问题标题】:Calculating non-integer exponents in iOS在 iOS 中计算非整数指数
【发布时间】:2013-08-06 09:35:22
【问题描述】:

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

【问题讨论】:

  • 有什么理由不使用pow() 求幂?
  • 直到现在我才需要使用它。我几乎是自学成才的。但是谢谢,另一个我不知道的工具已添加到工具箱中。
  • @JoeMillion 另外,仅供参考,第二个操作数称为“指数”,而不是“指数”。

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


【解决方案1】:

library code为你做这项工作:

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

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

【讨论】:

  • 别忘了#include <math.h>
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多