Я пытаюсь построить метод, который вычисляет внутреннюю норму прибыли http://www.investopedia.com/articles/07/internal_rate_return.asp#axzz1rm5UPp8V, когда пользователь нажимает кнопку. Денежные потоки уже хранятся в NSMutableArray, называемом «cashFlows». Теперь в массиве, если у меня есть значения say -100, 100, 100, 100 с процентной ставкой 10%, он отлично работает. Но когда у меня есть значения say -5, 100, 100, 100, программа вылетает и/или зависает.Почему эта петля падает?
Я не могу понять это. Мне интересно, слишком ли этот метод слишком вычислителен для моего компьютера, чтобы увидеть, что программа потенциально может проходить через миллионы раз. Возможно, есть лучший способ сделать это?
-(IBAction) calculateIRR{
double NPV;
double rate = 0.1;
int period = 1;
double tempPV = 0;
int count = 0;
do{
NPV = 0;
period = 1;
for (int i=0; i < [cashFlows count]; i++) {
double amount = ([[cashFlows objectAtIndex:i] doubleValue]);
if(i == 0){
NPV = amount;
} else{
tempPV = (amount/pow(1+rate,period));
NPV = tempPV + NPV;
period++;
}
}
rate = rate + 0.0000001;
count++;
} while(NPV > 0);
answer.text = [[NSString alloc] initWithFormat:@"%.4f %%", rate * 100];
}
Скорее всего, NPV никогда не приближается к нулю для ваших заявленных значений. –
не может быть причиной, но shoudln't и сравнить NPV> 0.0? – chikuba
Если ваша программа разбилась, в какой-то момент она потерпит крах. Вы не можете пройти? –