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

VB.NET Discussion :

Probleme de précision


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut Probleme de précision
    Salut a tous,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     'Series
            For Delta = DeltaMin To DeltaMax Step DeltaIncrement
                YMDChart.Series.Add("Delta " & Round(Delta, 2).ToString & "°")
            Next
     
            For Beta = BetaMin To BetaMax Step BetaIncrement
                YMDChart.Series.Add("Beta " & Round(Beta, 2).ToString & "°")
            Next
     
            'Points
            Delta = DeltaMin
            For d = 0 To DeltaStep Step 1
                Beta = BetaMin
                For b = 0 To BetaStep Step 1
                    YMDChart.Series("Delta " & Round(Delta, 2) & "°").Points.AddXY(LatAccelGraph(b, d), YawMomGraph(b, d))
                    YMDChart.Series("Delta " & Round(Delta, 2) & "°").Color = Color.FromArgb(100 + CInt(155 * (d / DeltaStep)), Color.Blue)
                Next
                Delta = Delta + DeltaIncrement
            Next
    Dans ce code, Delta est un décimal, DeltaIncrement aussi.

    Pour un DeltaIncrement du genre 1.66666666666667 la boucle 'Points plante et me dit ne pas avoir trouvé la serie nommé delta 10.00°....

    En mettant le pointeur sur delta j'ai 10.0000000000005, mais çà c'est avant l'arrondi à deux décimals...alors quoi?

    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Le fait d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (...)& Round(Delta, 2).ToString &(...)
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (...)& Round(Delta, 2) &(...)
    dans les dernière lignes de votre code n'y changerait rien ?

    Une alternative serait la syntaxe : Delta.ToString("0.00")

    Attention également à la localisation : votre séparateur décimal est-il "," ou "." ?

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par franticfranz Voir le message
    Le fait d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (...)& Round(Delta, 2).ToString &(...)
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (...)& Round(Delta, 2) &(...)
    dans les dernière lignes de votre code n'y changerait rien ?
    Bien tenté mais non...

    Citation Envoyé par franticfranz Voir le message
    Attention également à la localisation : votre séparateur décimal est-il "," ou "." ?
    Le je ne vois pas...
    C'est en rapport avec le language du clavier...?

  4. #4
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Bonjour,

    A priori le problème de "." et de "," n'est pas la bonne piste.

    J'ai tenté une version un peu simplifiée de votre code chez moi et ça fonctionne. J'ai beau reparcourir le code, je n'y vois pas d'erreur de syntaxe.

    La seule éventualité, c'est que la série "Delta 10.00°" ne soit pas créée : l'erreur se trouverait donc quelque part dans les boucles.

    Combien valent DeltaMin et DeltaMax ?

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Merci pour votre aide.

    Effectivement cette dernière valeur ne semble pas passé. quand l'increment arrive à deltamax (10) la boucle se finit.

    J'ai essayer avec +1, mais çà provoque d'autre erreurs.

    Je devrais pouvoir me débrouiller

    Merci.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Le problème c'est que la boucle arrive à 8.3333333333, il reste un increment à 1.6666666666 ce qui donne 9.999999999, alors que deltaMax vaut 10, et ne pass pas dans la boucle.

    En revanche la boucle qui ajoute les points (et qui est construit de la même manière) atteins 10 est réclame cette série...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 676
    Points : 1 178
    Points
    1 178
    Par défaut
    Bonjour,
    et en utilisant les vieilles ruses pour forcer les arrondis, cela te convient il ? et aussi à ton programme ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim DeltaMinforce As Decimal = CDec(DeltaMin - 0.001)
            For Delta = DeltaMinforce To DeltaMax Step DeltaIncrement
                YMDChart.Add("Delta " & Math.Round(Delta, 2).ToString & "°")
            Next

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonjour,
    et en utilisant les vieilles ruses pour forcer les arrondis, cela te convient il ? et aussi à ton programme ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim DeltaMinforce As Decimal = CDec(DeltaMin - 0.001)
            For Delta = DeltaMinforce To DeltaMax Step DeltaIncrement
                YMDChart.Add("Delta " & Math.Round(Delta, 2).ToString & "°")
            Next
    Du moment que çà convient à mon programme çà me convient, malheureusement çà marche encore moins bien, ce qui est completement hallucinant...
    avec un incrément de 1:

    le premier delta vaux -8.001 (avant l'arrondi à 2 decimal) ensuite dans la boucle qui ajoute les points, il ne trouve pas -8.00 ?????

    L'arrondi ne fonctionne pas!?

  9. #9
    Membre averti
    Homme Profil pro
    Caféinomane
    Inscrit en
    Septembre 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Caféinomane

    Informations forums :
    Inscription : Septembre 2011
    Messages : 202
    Points : 391
    Points
    391
    Par défaut
    Il est peut-être envisageable de créer les séries au moment de les renseigner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
            Dim mes_series As DataVisualization.Charting.Series
     
     'Series
     
            For Beta = BetaMin To BetaMax Step BetaIncrement
                YMDChart.Series.Add("Beta " & Round(Beta, 2).ToString & "°")
            Next
     
            'Points
            Delta = DeltaMin
            For d = 0 To DeltaStep Step 1
                Beta = BetaMin
                mes_series = New DataVisualization.Charting.Series("Delta " & Round(Delta, 2) & "°")
                For b = 0 To BetaStep Step 1
                    mes_series.Points.AddXY(LatAccelGraph(b, d), YawMomGraph(b, d))
                    mes_series.Color = Color.FromArgb(100 + CInt(155 * (d / DeltaStep)), Color.Blue)
                Next
                YMDChart.Series.Add(mes_series)
                Delta = Delta + DeltaIncrement
            Next

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 676
    Points : 1 178
    Points
    1 178
    Par défaut
    D'accord, donc ta plage va de -8 à +10 si je comprends bien.
    Alors c'est normal : -8.00 incrémenté de 1.6666667 donne :
    -8.00, -6.33, -4.67,.........,7.00, 8.67, 10.33
    Le 10 passe à la trappe.
    Si tu veux couvrir ta plage en y voyant tes bornes, l'incrément doit, je pense, être un divisible de ta plage 8+10=18.
    Sans changer ton code de départ, en testant par exemple 18/11=1.1.63636363, comme incrément, ça donne quoi?

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    D'accord, donc ta plage va de -8 à +10 si je comprends bien.
    Alors c'est normal : -8.00 incrémenté de 1.6666667 donne :
    -8.00, -6.33, -4.67,.........,7.00, 8.67, 10.33
    Le 10 passe à la trappe.
    Si tu veux couvrir ta plage en y voyant tes bornes, l'incrément doit, je pense, être un divisible de ta plage 8+10=18.
    Sans changer ton code de départ, en testant par exemple 18/11=1.1.63636363, comme incrément, ça donne quoi?
    Non en fait j'ai un DeltaRange = +/- X qui donne DeltaMin et DeltaMax
    Puis un DeltaStep
    (à choisir sois même sur le form)

    d'origine j'ai deltaRange=8 et step = 16 donc çà fait des incrment de 1. facile sauf qu'avec la méthode deltaforce çà coince...

    un cas qui me pose probleme est deltarange=10 et step =12

    çà fait 20/12 et des steps des 1.66666666666667

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par franticfranz Voir le message
    Il est peut-être envisageable de créer les séries au moment de les renseigner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
            Dim mes_series As DataVisualization.Charting.Series
     
     'Series
     
            For Beta = BetaMin To BetaMax Step BetaIncrement
                YMDChart.Series.Add("Beta " & Round(Beta, 2).ToString & "°")
            Next
     
            'Points
            Delta = DeltaMin
            For d = 0 To DeltaStep Step 1
                Beta = BetaMin
                mes_series = New DataVisualization.Charting.Series("Delta " & Round(Delta, 2) & "°")
                For b = 0 To BetaStep Step 1
                    mes_series.Points.AddXY(LatAccelGraph(b, d), YawMomGraph(b, d))
                    mes_series.Color = Color.FromArgb(100 + CInt(155 * (d / DeltaStep)), Color.Blue)
                Next
                YMDChart.Series.Add(mes_series)
                Delta = Delta + DeltaIncrement
            Next
    Je prévoyais de réduire le nombre de boucle vers la fin, mais çà va peut être résoudre le problème de le faire directement.

    Merci je vais essayer.

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 676
    Points : 1 178
    Points
    1 178
    Par défaut
    Ok, et en attendant de réduire tes boucles qui est une sage décision, ce code devrait te dépanner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            For Delta = DeltaMin To DeltaMax + 0.001 Step DeltaIncrement
                YMDChart.Add("Delta " & Math.Round(Delta, 2).ToString & "°")
            Next

  14. #14
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Ok, et en attendant de réduire tes boucles qui est une sage décision, ce code devrait te dépanner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            For Delta = DeltaMin To DeltaMax + 0.001 Step DeltaIncrement
                YMDChart.Add("Delta " & Math.Round(Delta, 2).ToString & "°")
            Next
    çà marche

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

Discussions similaires

  1. Gtk::DrawingArea et Gdk::Pixbuf, probleme de précision.
    Par Forseti dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 06/03/2012, 13h19
  2. Réponses: 21
    Dernier message: 01/09/2011, 09h56
  3. Probleme de précision
    Par gil38 dans le forum C++
    Réponses: 8
    Dernier message: 13/03/2007, 15h46
  4. [java2D] Probleme de précision de tracé
    Par olivier__ dans le forum 2D
    Réponses: 9
    Dernier message: 27/07/2005, 17h09
  5. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50

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