Вычисление нецелых показателей в 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)

Другие вопросы по тегам