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

WinDev Discussion :

Erreur calcul dans compilation dynamique [WD18]


Sujet :

WinDev

  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 221
    Points : 185
    Points
    185
    Par défaut Erreur calcul dans compilation dynamique
    Bonjour

    j'ai un problème sur le résultat des calculs fait avec WinDev
    je ne vois pas ou j'ai bien pus faire une erreur .

    une idée ?

    merci

    fred

    appel de la procédure
    calcul_proc(sFontion , 0.01 )
    sFonction étant les fonctions notées plus bas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PROCEDURE Calcul_Proc( sFonction , nValue est un numérique (*) )
    sMonCode est une chaîne
    sRésultat est une chaîne
     
    sMonCode = " PROCEDURE Proc_Calcul(x)"  + RC + "RENVOYER  " + sFonction
    sRésultat = Compile("Proc_Calcul",sMonCode) 
    RENVOYER ExécuteTraitement("Proc_Calcul", trtProcédureProjet, nValue)
    sFonction / resultat Windev / Resultat Excel
    -288426.2612046*x^0.1 / -181984,667848005000 /-181984,66784800500
    1003630.423954*x^0.25 / 317376,041706000000 / 317375,806873505000
    -820148.6718795*x^0.3 /-206012,032071472000 /-206012,032071472000
    -4023955.416528*Exp(-(x-0.025)^2) /-4023050,026559000000/-4024860,90836073000
    +4095744.967589* Exp(-(x-0.0325)^2)/ 4093672,520635000000 /97818,963414740000

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    à mon avis il doit y avoir des problèmes d'arrondi pendant les calculs. Peux-tu décomposer les étapes de calculs pour savoir sur quel calcul tu perds l'arrondi ?

    Personnellement, dans excel 2013, 2010 ou 2003 voici mes résultats :

    -181984,66784800500
    317375,80687350500
    -206012,03207147200
    -4023955,66802522000
    4097818,96341474000

    Donc encore autres choses pour l'avant-dernière ligne !
    Pour la dernière ligne, peux-tu réessayer en enlevant le + en début de formule ?

  3. #3
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 221
    Points : 185
    Points
    185
    Par défaut
    Bonjour

    le vrai calcul est le suivant :

    -288426.2612046*x^0.1 + 1003630.423954*x^0.25 - 820148.6718795*x^0.3 - 4023955.416528*Exp(-(x-0.025)^2) + 4095744.967589* Exp(-(x-0.0325)^2)

    en entrant x = 0.01 f(x) = y = devrait être 1
    moi je trouve 1.83.......

    J'ai décomposé le calcul pour voir ou cela coince , mes variables sont de type
    numérique 38 chiffres significatifs et la décomposition est celle du message précèdent.

    pour l'avant dernier calcul , je trouve bien -4024860,908360730000
    je joins mon fichier xls.

    [Code]
    sMonCode est une chaîne
    sRésultat est une chaîne

    sMonCode = " Fonction Proc_Calcul(x est un numérique(*) )" + RC + "y est un numérique(*)" + RC+ "y= " +sFonction +RC + "RENVOYER y "
    sRésultat = Compile("Proc_Calcul",sMonCode)
    RENVOYER ExécuteTraitement("Proc_Calcul", trtProcédure, nValue)

    [\Code]

    sans résultat , la je suis conforme à l'exemple fourni dans trace... de windev

    Fred
    Fichiers attachés Fichiers attachés

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Citation Envoyé par Fred 57220 Voir le message
    pour l'avant dernier calcul , je trouve bien -4024860,908360730000
    Fred
    En effet, j'avais une * d'insérée avant le - sur (x-0.025) soit (x*-0.025) ....

    toutes mes excuses.

    J'essaye de voir si je peux regarder cet après-midi pour le calcul !

  5. #5
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 221
    Points : 185
    Points
    185
    Par défaut
    même

    Info(1003630.423954*0.01^0.25) donne un résultat faux

    317376,041706000000 à la place de 317375,806873505000

    par contre

    Info(0n1003630.423954*0.01^0.25)donne bien le bon résultat.



    Fred

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Extrait de la doc sur le type numérique :

    Limite
    Un numérique peut comporter 38 chiffres significatifs.
    Les cas extrêmes "hauts" (par exemple (0,38) ou (1,37)) peuvent très vite conduire à des erreurs de calcul dues aux dépassements.

    Les cas extrêmes "bas" (par exemple (38,0) ou (37,1)) peuvent très vite conduire à des erreurs de calcul dues aux pertes de décimales.
    Ce qui me fait dire pendant le calcul, il pratique une troncature du résultat intermédiaire pour finir la formule.

    Dans info le mode de calcul ne doit pas être le même ou le format des nombres utilisé n'est pas le même.
    Peux-tu réessayer en changeant le format à numerique (15,15) plutôt que numérique (*) ?

  7. #7
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 221
    Points : 185
    Points
    185
    Par défaut
    Numerique (15,15) n' apporte rien

    par contre le fait de rajouter dans la zone de saisie "0n" devant chaque nombre résout le problème.

    Merci

    Fred

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    C'est vrai que la doc spécifie cela mais ça ne rassure pas sur les calculs qui sont faits si tu oublies !

  9. #9
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2007
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 221
    Points : 185
    Points
    185
    Par défaut
    Oui , en plus je me suis focalisé sur la compilation dynamique , ayant géré mes variables correctement grosse perte de temps.

    il devrait y avoir une option pour que cela soit géré par défaut au niveau projet

    merci

    Fred

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/01/2014, 11h20
  2. [Source] Calcul de formule par compilation dynamique
    Par Bluedeep dans le forum Contribuez
    Réponses: 4
    Dernier message: 06/07/2009, 17h16
  3. Message "#Erreur" pour calculs dans formulaire
    Par tieuphuong dans le forum IHM
    Réponses: 10
    Dernier message: 09/08/2007, 12h27
  4. Réponses: 4
    Dernier message: 03/08/2007, 13h48
  5. Réponses: 7
    Dernier message: 24/11/2006, 09h56

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