Il est souvent frustrant de constater que certaines fonctions financières avancées, disponibles depuis longtemps dans des tableurs réputés comme Lotus 1-2-3 ou Quattro Pro, ne sont pas directement accessibles dans les langages de programmation traditionnels. Pourtant, ces fonctions répondent à des besoins très concrets rencontrés quotidiennement dans le domaine des finances personnelles, de la comptabilité, de la gestion bancaire ou de l'analyse d'investissements. Lorsqu'un développeur souhaite reproduire les mêmes calculs dans une application C++, il doit généralement implémenter lui-même les formules mathématiques utilisées par ces logiciels afin d'obtenir des résultats identiques.
Parmi ces fonctions particulièrement utiles figure la fonction «PPaymt» (Principal Payment), appelée «Principal» dans certaines versions francisées des tableurs. Son objectif est de déterminer quelle portion d'un versement périodique est réellement appliquée au remboursement du capital emprunté. Cette distinction est importante, car chaque paiement effectué sur un prêt est généralement divisé en deux parties : une portion servant à payer les intérêts dus au prêteur et une autre servant à réduire le montant de la dette elle-même. Connaître précisément la part attribuée au capital permet d'établir des tableaux d'amortissement détaillés, de prévoir l'évolution du solde restant et d'évaluer plus efficacement le coût réel d'un financement.
Le calcul de cette valeur nécessite plusieurs étapes intermédiaires, notamment la détermination du versement périodique global, l'évaluation du solde du prêt à une période donnée ainsi que la séparation entre les intérêts et le capital remboursé. Grâce aux fonctions mathématiques du langage C++, il est toutefois possible de reproduire fidèlement le comportement de la fonction PPaymt telle qu'on la retrouve dans les grands logiciels financiers. Dans l'exemple présenté ci-dessous, le programme calcule la portion du capital remboursée dans différents scénarios de prêts, qu'il s'agisse d'un financement trimestriel de 10 000 $ ou d'un prêt hypothécaire de 100 000 $ amorti sur plusieurs années. Le code source C++ suivant permet ainsi d'obtenir automatiquement la part exacte du paiement consacrée à la réduction de la dette :
Essayer maintenant !
- #include <iostream>
- #include <cmath>
-
- double FVal(double Rate,double Nper,double Pmt,double PV,double PType) {
- double F=exp(Nper*log(1.0+Rate));
- if(fabs(Rate)<1E-6) return -Pmt*Nper*(1.0+(Nper-1.0)*Rate/2.0)*(1.0+Rate*PType)-PV*F;
- else return Pmt*(1-F)*(1/Rate+PType)-PV*F;
- }
-
- double Paymt(double Rate,double Nper,double PV,double FV,double PType) {
- double F=exp(Nper*log(1.0+Rate));
- return (FV+PV*F)*Rate/((1+Rate*PType)*(1.0-F));
- }
-
- double PPaymt(double Rate,double Per,double NPer,double PV,double FV,double PType) {
- double F=Paymt(Rate,NPer,PV,FV,PType);
- return F-Rate*FVal(Rate,Per-PType-1,F,PV,PType);
- }
-
- int main() {
- std::cout << "Exemple de versements trimestriels d'un prêt de 10 000$ à 15% par trimestre:";
- std::cout << PPaymt(0.15/4,24,40,10000,0,1) << "$" << std::endl;
- std::cout << "Exemple de versements d'un prêt de 100 000$ à 10% par mois:";
- std::cout << PPaymt(0.1/12,2*12,30*12,100000,0,0) << "$" << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
Exemple de versements trimestriels d'un prêt de 10 000$ à 15% par trimestre:-233.243
Exemple de versements d'un prêt de 100 000$ à 10% par mois:
-53.542