我一直在研究我的数学解析器,我已经意识到我正在使用的一些代码无法处理非整数的指数。我正在使用的一些代码似乎与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)
答案 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
。如果您使用doubles
或floats
作为循环变量,请始终执行while (myFloat > 0.0)