Algorithme corrigé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for (i=0; i<12; i++) { n=i+0.5 ; erf=erf+exp(-n*n/9.0)*sin(2.0*n*x/3.0)/n; } erf=erf*2/PI ;
Algorithme corrigé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for (i=0; i<12; i++) { n=i+0.5 ; erf=erf+exp(-n*n/9.0)*sin(2.0*n*x/3.0)/n; } erf=erf*2/PI ;
Là, apparemment : S+exp(-n*n/9.0)*sin(2.0*n*x/3.0)/n
D'après la formule, il faut mettre (i+1)/2 et non pas n=i+1/2. De plus, tu fais une boucle sur un double plutôt que sur un entier (!!), ce qui n'est pas spécialement une excellente idée à la base.
D'ailleurs, tu aurais plus de facilités à relire ton code en appliquant les points suivants :
- Utiliser les mêmes noms que dans la formule d'origine (boucle sur "n" et non pas "i", donc).
- Faire une fonction de ton calcul plutôt que de l'intégrer "en dur" dans ton programme.
- Ecrire la formule "exacte" au début, même si c'est lourd / peu optimisé, et optimiser le calcul APRÈS avoir vérifié que ça marche correctement.
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
Erreur dans le code :
Mac LAK :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for (i=0; i<13; i++) { n=i+0.5 ; S=S+exp(-n*n/9.0)*sin(2.0*n*x/3.0)/n; } S=S*2/PI ;
Non, c'est bien i+1/2D'après la formule, il faut mettre (i+1)/2 et non pas n=i+1/2
Publication : Concepts en C
Mon avatar : Glenn Gould
--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
en faite j'ai utilise directement la deuxième partie du pdf, ou l'auteur propose cette formule dans le programme en fortran.
EDIT : J'avais pas vu le deuxième commentaire. Et bien oui c'est ça, l'erreur vient de la
Tellement préoccupé par la boucle que je n'ai pas pensé que la partie "2/PI" était HORS de la boucle
Merci bien
EDIT 2 : comment faire pour afficher plus de chiffre avec printf ? La précision est théoriquement de 10-8 avec la méthode mais je n'affiche que 6 chiffres alors je ne peux pas le vérifier
Le double dans la boucle est il vraiment choquant ? je me demande si je fais autrement ou si je laisse car cela fonctionne ?
Toujours preneur si il y a une optimisation qui saute au yeux pour une autre partie du programme.
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
Publication : Concepts en C
Mon avatar : Glenn Gould
--------------------------------------------------------------------------
Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager