ユーザーがボタンをタップしたときの内部収益率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];
}