Вычисление нецелых показателей в 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)
2 ответа
Решение
Пусть код библиотеки сделает всю работу за вас:
double exponent = [[self popOperand] doubleValue];
double base = [[self popOperand] doubleValue];
[self.operandStack addObject:@(pow(base, exponent))];
Ответ Джоша правильный, я просто хотел добавить кое-что об использовании чисел в условиях:
double exponate = [[self popOperand] intValue];
exponate--;
while (exponate)
{
result *= base;
exponate--;
}
Это может привести к бесконечному циклу из-за ошибки округления while (exponate)
может никогда не оценить false
, Если вы используете doubles
или же floats
как переменные цикла, всегда делайте что-то вроде while (myFloat > 0.0)