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

Qt Discussion :

QDoubleSpinBox et précision de value()


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut QDoubleSpinBox et précision de value()
    Bonjour,

    J'ai un petit soucis de précision avec une QDoubleSpinBox. Celle-ci est réglée avec une précision de 3 digits et une valeur minimale de 0.001. Le problème, quand je change la valeur depuis mon application, c'est que la valeur que me retourne value() peut varier au cours d'exécution. Par exemple, si j'ai 0.01, je peux avoir (valeur données par le debugger):

    0.010000000000000000
    ou
    0.010000000000000002

    Ce qui peut sembler comme un détail, mais ensuite j'utilise cette valeur pour différents calculs et j'affiche des résultats qui ensuite diffèrent (2400 et 2399 par exemple).

    Alors d'où mon problème vient-il? Qt? Mon compilo (VC++ express 2008)? Ou "c'est comme ça les double en c++ on peut rien faire"?

    Merci pour votre aide, je commence à

  2. #2
    Membre expérimenté Avatar de cayou66
    Inscrit en
    Décembre 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 286
    Par défaut
    Salut,
    à mon avis tu es coincé. Tu as déjà une précision énorme !
    Dans ton exemple :
    0.010000000000000000
    le nombre de digits après la virgule .

    Je trouve bizarre par contre que tu ais une différence après tes calculs sur les unités...Regardes bien si tu fais pas une conversion foireuse, ou un truc du genre.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut
    Le problème c'est pas vraiment la précision elle-même, mais plutôt que ma QDoubleSpinBox a comme valeur 0.010, mais parfois la méthode value me retourne 0.010000000000000002 (là c'est faux), et parfois 0.010000000000000000 (là c'est juste). Le comportement au cours de l'exécution change

  4. #4
    Membre expérimenté Avatar de cayou66
    Inscrit en
    Décembre 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 286
    Par défaut
    Tu ne peux pas exiger une telle précision sur un double. Le soucis vient bien de la façon dont est codé un double. Je me demande toujours comment une si faible différence peut entrainer une tel écart après un travail dessus...

    Lorsque tu mets dans ton doubleSpinBox 0.01, le double correspondant est de 0.010000000000****, mais vient un moment où la précision peut être moins fiable...
    A 10^-10 -12....on peut s'attendre à ce que le système ne retourne pas une valeur exacte...

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    tu n'utilise pas plutôt des float quand tu as
    0.010000000000000002?

    sinon, c'est normale, et c'est pareil pour tous les langages.
    http://cpp.developpez.com/faq/cpp/?p...ions_flottants

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut
    Non j'utilise bien des double uniquement. Ce qui m'étonne surtout c'est qu'au cours de l'exécution la valeur change d'une fois à une autre.

    Bon je vais surement faire une petite manip genre multiplier par 1000 et cast en int pour arriver à des calculs finaux exacts.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/11/2003, 16h08
  2. [EJB]Précision de la datasource (Mysql)
    Par cameleon2002 dans le forum JBuilder
    Réponses: 2
    Dernier message: 11/09/2003, 17h55
  3. Réponses: 8
    Dernier message: 13/01/2003, 17h45
  4. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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