我正在尝试构建一种 在用户点击按钮时计算内部收益率http://www.investopedia.com/articles/07/internal_rate_return.asp#axzz1rm5UPp8V的方法。现金流已经存储在称为“cashFlows”的 NSMutableArray 中。现在在数组中,如果我的值为 -100、100、100、100,利率为 10%,它工作正常。但是当我有 -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];
}