Je viens de commencer à coder en C++ mais j'ai une bonne expérience avec MATLAB et MySql. J'essaie de calculer quelques nombres composés donc la précision est la clé. J'ai essayé de le faire en utilisant des nombres doubles, mais pour une raison quelconque, je ne reçois jamais une précision de 7 chiffres significatifs (la même chose qu'un flotteur). J'ai même essayé d'utiliser un long double pour essayer les calculs mais je n'ai toujours que 7 sf. de précision.Visual Express 2010 double précision variable
N'ai-je pas initialisé correctement les doubles? Je pensais qu'ils faisaient partie de la bibliothèque standard? Toute aide grandement appréciée. Le code ci-dessous donne les principales parties du code utilisées pour le calcul (le reste est principalement le chargement de données ou le débogage).
MISE À JOUR
Voici un échantillon du code (moins la lecture de données). J'ai entré les 5 premières valeurs. Les calculs devraient donner (RÉSULTATS ATTENDUS) Calculé dans Excel, en utilisant exactement la même entrée:
0
-1.09526
4.364551963
2.745835774
3.029002506
Qu'est-ce que le code ci-dessous donne (SORTIE RÉEL):
0
-1.095260000
4.3591394642
2.7340763329
3.0179393198
code:
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main(){
std::vector<double> compoundedcalculation; // pre-allocating for the compounded calculations
std::vector<double> dailycompound; // pre-allocating for daily compoundvalue
compoundedcalculation.insert(compoundedcalculation.end(), 0.0); // setting the first value as 0
double dailycompoundval[] = {0,-1.09526,5.46038,-1.61801,0.283089};
dailycompound.assign(dailycompoundval,dailycompoundval+5);
double indCC;
for (int n = 0; n < 5 ;n++)
{
indCC = ((((1+((compoundedcalculation.at(n))/1000))*(1+((dailycompound.at(n))/1000)))-1)*1000);
printf(" %.17g \n", indCC);
compoundedcalculation.insert(compoundedcalculation.end(), indCC);
}
return 0;
}
Merci pour l'effort.
MISE À JOUR 2:
Les deux attendus et les résultats réels utilisent la même formule pour la capitalisation.
Compounded Total = ((1+ (Daily Rate/10000)) * (1+ (Précédent Compounded Total/10000)))
Les tarifs journaliers sont:
1er jour: 0 2 jour: -1,09526 3ème jour: 5,46038 4ème jour: -1,61801 5ème jour: 0,283089
Comment pouvez-vous dire qu'il stocke seulement 7 chiffres de précision? – yiding
Vous devez inclure la partie où vous imprimez les numéros ou recherchez-vous uniquement le débogueur? – Mario
Il est inutile de nous demander de deviner. Si vous voulez une aide significative, vous devez montrer un programme qui présente un comportement que vous ne comprenez pas. Ensuite, nous pouvons l'expliquer. –