IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

calcul de erf(x)


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 51
    Points : 19
    Points
    19
    Par défaut [Résolu] calcul de erf(x)
    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  ;

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    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

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Erreur dans le code :

    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  ;
    Mac LAK :
    D'après la formule, il faut mettre (i+1)/2 et non pas n=i+1/2
    Non, c'est bien 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 !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 51
    Points : 19
    Points
    19
    Par défaut
    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.

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par diogene Voir le message
    Non, c'est bien i+1/2
    Moi, je lis dans le PDF, page 37, "sin((n+1)/2)", en tout cas... Formule fausse dans la partie "explications" ?
    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

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Moi, je lis dans le PDF, page 37, "sin((n+1)/2)", en tout cas... Formule fausse dans la partie "explications" ?
    Oui, il y a visiblement une erreur de typo : il y a une ')' de trop dans la formule "explications".
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par diogene Voir le message
    Oui, il y a visiblement une erreur de typo : il y a une ')' de trop dans la formule "explications".
    Bon, ça me rassure, j'suis pas devenu aveugle ou analphabète, c'est déjà ça...
    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

Discussions similaires

  1. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  2. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo