Calcul d'une série [RESOLU] - C++ - Programmation
Marsh Posté le 22-11-2012 à 21:18:12
Bonsoir !
Tout d'abord, quelques questions idiotes, mais je préfère être sûr
* Les variables num et den sont-elles bien déclarées en double ?
* Comment est défini PI ? (vous n'indiquez pas quelle plateforme vous utilisez)
* Les éléments du tableau "SolutionExacte" sont-ils bien initialisés à 0 ?
* Avez-vous noté des différences importantes dans vos résultats si vous augmentez le nombre de valeurs de la série ?
Ensuite, quelques remarques sur le code :
* Cela ne change rien aux résultats, mais le test "if (den != 0)" est inutile, car il ne peut être nul que si n vaut 0, ce qui n'est jamais le cas,
* Pour gagner en précision, sortez les invariants de boucle du "for" : ne divisez par "PI*PI*PI" qu'une fois que vous avez terminé le calcul de votre série,
* Pourquoi faire les calculs sur les nombres pairs ? Sauf erreur de ma part, le numérateur vaut 0 pour ces nombres.
C'est tout ce que je vois en première lecture ... De quel ordre sont les écarts que vous constatez ?
Marsh Posté le 22-11-2012 à 21:27:31
Bonsoir Farian et merci pour ta réponse:
*num et den sont bien déclarés en double et initialises à 0 tout comme les éléments de SolutionExacte;
Pi est déclaré comme ça : double PI = 3.141592;
Oui il y a des diff importants.
Par contre, si je n'ai pas le "if (den != 0)", les results ne sont plus du tout bon : les résultats deviennent inf ou nan ...
Je ne me l'explique pas ...
Code :
|
Merci pour les conseils
Marsh Posté le 22-11-2012 à 21:34:27
trop puissant ^^
t'as pas de pow
Marsh Posté le 22-11-2012 à 21:37:28
Ha ! C'est clairement du coté du calcul de den qu'il faut creuser ... Car ce n'est vraiment pas normal ...
Je vous conseillerais cette approche :
Vérifiez déjà que vous arrivez parfois à des valeurs nulles (en mettant un else), puis décomposez son calcul ...
Par ailleurs, j'aurais tendance à vous conseiller d'augmenter la précision de votre déclaration de PI ou, encore mieux, de déclarer :
double PI = 2*acos(0);
Comme ça, vous aurez toute la précision possible ! Vu la rapidité de croissance des fonctions hyperboliques, on peut vite arriver à un écart important.
Et après, je reste sec ... Je vais tenter de faire des tests sur une VM
Marsh Posté le 22-11-2012 à 21:50:15
Bon bin c'était bien le coup des pow ... Ca marche nickel maintenant. Merci pour votre aide !
Marsh Posté le 22-11-2012 à 21:54:44
En effet ...
En revanche, je suis surpris que vous n'ayez pas de problème ...
Quelles sont vos valeurs dans le tableau P_controle ? Car on arrive vite aux limites de la fonction sinh, dont le résultat dépasse la valeur maximale d'un flottant dès que son paramètre dépasse un peu trop +/- 700 ...
Note : Se flageller plus tard, pour ne pas avoir vu que l'opérateur "OU exclusif" était utilisé au lieu de la puissance ...
Marsh Posté le 22-11-2012 à 21:58:08
Je me suis déjà flagellé ^^
Dans P_controle, ce sont les coordonnées d'une grille régulière genre [0.25;0.25] ... [0.25][0.75]...
Marsh Posté le 22-11-2012 à 22:00:24
Effectivement, cela peut passer avec 100 éléments dans la série. Dans mon exemple, j'avais pris des valeurs de l'ordre de 5 pour les y, et je voyais apparaître nos amis "inf" et "nan"
Marsh Posté le 22-11-2012 à 20:36:48
Bnjour a tous !
J'ai à trouver les résultats de cette série et les résultats que j'obtiennent ne sont pas bons ...
Mon code :
avec P_controle[k][0] et P_controle[k][1], les coord en x et y du point k
Alors je ne comprend pas pourquoi mes results ne sont pas bon .. Voyez vous quelque chose qui cloche ?
Message édité par JPP78750 le 22-11-2012 à 21:55:13
---------------
http://www.jppanaget.com