私はクライアントと概算の融資オファーを提供するアプリケーションを作成しています (これらは後で他のバックオフィス システムによって計算されます)。計算機を作成している金融会社からコードを受け取りました。私の問題は、年率を計算するコードの部分 (開始料金と月額料金を含む) を理解していないことです。
彼らが使用しているこの方法かもしれませんが、私にはわかりません: http://www.efunda.com/math/num_rootfinding/num_rootfinding.cfm#Newton_Raphson
コードは正しく動作しますが、完全に理解していない、または信頼していないコードでアプリケーションを構築するのは本当に嫌いです。最終的な回答は、同じことを行うソースコードですが、コメントとわかりやすい変数名が付いています (私はそれを例外としていません :-) すべてのアイデアを歓迎します - 誰かがそれを説明する記事へのリンクを持っているかもしれません.
(私は決して数学や金融の達人ではないことに注意してください)
[snip]
int n = numberOfPayments;
double a = (amount / (monthlyPayment * Math.Pow(n, 2)) - (monthlyPayment / amount));
double d = 0;
if (a == 0)
{
d = 0;
}
else
{
for (int qq = 0; qq < 20; qq++)
{
double b = amount + (monthlyPayment / a) * (1 - (Math.Pow((1 + a), -n)));
double c = amount + (monthlyPayment / a) * ((n * (Math.Pow((1 + a), (-n - 1)))) - ((1 - (Math.Pow((1 + a), -n))) / a));
d = a - (b / c);
double aa = a;
double dd = d;
a = d;
if (Math.Abs(aa - dd) < Math.Pow(10, -5)) { break; }
}
}
double apr = ((Math.Pow((1 + d), 12)) - 1) * 100;
apr = Math.Round(apr * 100) / 100;
[/snip]