Je fais une application qui donne aux clients et offre approximative de prêt (ils sont ensuite calculés par d'autres systèmes de back-office). J'ai reçu un code du cabinet financier pour lequel nous faisons la calculatrice. Mon problème est que je ne comprends pas la partie du code qui calcule le taux annuel en pourcentage (y compris le démarrage et les frais mensuels).Calcul du taux de pourcentage annuel (besoin d'aide avec le code hérité)
Il est peut-être cette méthode qu'ils utilisent, mais je ne peux pas vraiment dire: http://www.efunda.com/math/num_rootfinding/num_rootfinding.cfm#Newton_Raphson
Le code fonctionne correctement, mais je déteste vraiment construire une application sur le code que je ne comprends pas bien et/ou confiance. La réponse ultime serait le code source qui fait la même chose, mais avec des commentaires et des noms de variables compréhensibles (je ne suis pas vraiment :-) Toutes les idées sont les bienvenues - peut-être quelqu'un a un lien vers un article qui l'explique.
(s'il vous plaît noter que je ne suis pas un calcul ou wiz financier)
[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]
Le L'affiche ci-dessus est correcte en ce sens que le code original tente de calculer itérativement "apr", en s'arrêtant à 20 pas ou lorsque l'étape suivante produirait un changement d'au plus 10^-5. Je ne sais pas si le code d'origine est exact; c'est opaque au mieux. – Borealid
Il ne peut pas être précis. J'ai essayé et ça n'a pas marché pour moi. J'ai peut-être fait une erreur en transcrivant, vrai, mais j'ai dériver ce qui est supposément le code équivalent des définitions qui ne ressemble en rien au code de la question. La première dérivée en particulier ne semble pas du tout correcte *. – Allen
Impressionnant Allen - merci beaucoup! Je dois admettre que certaines des parties de votre message qui sont lourdes en mathématiques sont perdues pour moi, mais le code Groovy, en particulier, m'a fait comprendre un certain nombre de choses. Dans l'extrait que j'ai posté "monthlyPayment" est calculé exactement comme vous publiez (mais j'ai seulement posté la partie du code que j'ai eu du mal à comprendre). L'extrait que j'ai posté fonctionne, j'ai vérifié contre un certain nombre d'autres calculatrices similaires dans Excel et javascript (mais je comprends que je pourrais être trouble car il est pris un peu hors contexte) –