Notez combien il est plus facile de comprendre ce que la fonction fait si vous divisez chaque étape en plusieurs parties: (Je trouve encore plus facile si vos variables correspondent au matériel source, donc je nommerai mes variables après ceux que Wikipedia utilise.)
// amortization calculator
// uses annuity formula (http://en.wikipedia.org/wiki/Amortization_calculator)
// A = (P x i)/(1 - pow(1 + i,-n))
// Where:
// A = periodic payment amount
// P = amount of principal
// i = periodic interest rate
// n = total number of payments
double calculatePeriodicPayment()
{
const double P = loan;
const double i = interestRate/yearlyPayment;
const double n = yearlyPayment * numOfYearLoan;
const double A = (P * i)/(1 - pow(1.0 + i, -n));
return A;
}
Il est beaucoup plus facile de confirmer que la logique de cette fonction fait ce qu'elle devrait faire.
Si vous êtes curieux, en remplaçant mes noms de variables, votre problème de parenthises se présente comme suit:
const double A = (P * i)/(1 - pow(1 + i)), -n; // <- this is how you have it
const double A = (P * i)/(1 - pow(1 + i, -n)); // <- this is how it should be
Avec ce groupe, vous êtes que passer un argument à pow
, ce qui explique pourquoi le compilateur dit no overloaded function takes 1 arguments
. Edit: Vous avez mentionné que j'ai utilisé plus de variables. Cependant, votre compilateur utilisera des variables temporaires comme je l'ai fait. Votre déclaration complexe sera divisé en morceaux, et peut ressembler à ceci:
double calculatePeriodicPayment()
{
const double temp1 = interestRate/yearlyPayment;
const double temp2 = loan * temp1;
const double temp3 = interestRate/yearlyPayment;
const double temp4 = 1.0 + temp3;
const double temp5 = yearlyPayment * numOfYearLoan;
const double temp6 = -temp5;
const double temp7 = pow(temp4, temp5);
const double temp8 = 1 - temp7;
const double temp9 = temp2/temp8;
periodicPaymentcalc = temp9;
return periodicPaymentcalc;
}
mine sera également brisé, et ressemblera à ceci:
double calculatePeriodicPayment()
{
const double P = loan;
const double i = interestRate/yearlyPayment;
const double n = yearlyPayment * numOfYearLoan;
const double temp1 = P * i;
const double temp2 = 1.0 + i;
const double temp3 = -n;
const double temp4 = pow(temp2, temp3);
const double temp5 = 1 - temp4;
const double temp6 = temp1/temp5;
const double A = temp6;
return A;
}
Peut-être il y a quelques optimisations que les Le compilateur utilisera, par exemple en notant qu'il utilise interestRate/yearlyPayment
deux fois dans votre fonction, et utilise le même temporaire pour les deux endroits, mais il n'y a pas de garantie que cela arrivera. Notez que nous utilisons à peu près le même nombre de variables dans nos deux fonctions. Je viens d'utiliser plus de variables nommées, et moins de temporaires sans nom.
Peut-être serait-il plus lisible si vous divisiez le calcul en étapes plus petites? –
S'il vous plaît fournir l'erreur/mauvaise conduite que vous obtenez. –
En quoi cela ne fonctionne-t-il pas? Compiler l'erreur? Mauvais résultat à l'exécution? Erreur d'exécution? Si c'est une erreur, postez l'erreur. En outre, nous pouvons avoir besoin de connaître les types de toutes ces variables. –