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 6 et antérieur Discussion :

VB6 nul en calcul?


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut VB6 nul en calcul?
    Bonjour,

    Quelqu'un pourrais t il m'expliquer le comportement de VB6 suivant :

    voici l'extrait de code :
    vous mettez deux textbox et un CommandButton

    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
     
    Private Sub Command1_Click()
    Dim Sng As Single
    Dim Dbl As Double
    Dim entier As Integer
     
    entier = 118
     
    Sng = 118 / 10
    Dbl = 118 / 10
     
    Text1.Text = Sng * 10000000
    Text2.Text = Dbl * 10000000
     
    End Sub
    Voici le résultat :
    text1.text ==> 118000001,907349
    text2.text ==> 118000000

    D'où viennent les chiffres du text1. ??
    Pourquoi le résultat est correct en utilisant des doubles et faux si j'utilise des singles?


  2. #2
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 634
    Points : 1 161
    Points
    1 161
    Par défaut
    Normal, Sng est un Single et il a moins de résolution que Dblk qui un Double. Donc il ne stocke pas 118,0000000000000000000000000
    Fait cette manip :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Sng As Single
    Dim Dbl As Double
    Sng = 118.0 
    Dbl = 118.0 
    debug.print= format$(Sng)
    debug.print= format$(Dbl)
    Stop
    A mon avis, tu as la réponse à ta question

    PS: avant d'accuser VB (ou n'importe quel langage ) ......il faut connaitre ce que c'est qu'un flottant stocké sur 4 ou 8 octets

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Je sais bien que single est sur 4 octets et double sur 8...le codage des flottants, merci je connais...j'ai fait de l'assembleur...

    Il n'empêche que si tu portes ce code dans d'autre langages...le résultat est correct.

    A mon avis c'est bien un dysfonctionnement de VB6.

  4. #4
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 634
    Points : 1 161
    Points
    1 161
    Par défaut
    Citation Envoyé par steven22 Voir le message
    Il n'empêche que si tu portes ce code dans d'autre langages...le résultat est correct.
    et ils stockent les flottants sur combien d'octets ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    4 pour le single, et 8 pour le double comme en VB6

  6. #6
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    il n'y a pas 150 mille manieres de coder un float, il y a des normes pour celà : IEEE754.
    il est donc normal de ne pas pouvoir coder exactement des float, c'est "by design".
    Tout depends du nombre d'octet alloué pour la mantisse etc... et là, 4 octets ben c'est pas enorme.

    Et quand on sait ça, la question est plutôt : pourquoi utiliser des singles ????

  7. #7
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 886
    Points : 1 526
    Points
    1 526
    Par défaut
    Citation Envoyé par steven22 Voir le message
    Il n'empêche que si tu portes ce code dans d'autre langages...le résultat est correct.
    Ca peut dépendre aussi de l'utilisation des instructions arithmétiques du processeur: en interne, le processeur conserve les flottants sur un peu plus que les 32 ou 64 bits du format mémoire (j'ai pas retrouvé le nombre exact, 44 et 80, je crois). Donc si la compilation fait que le calcul se passe entièrement dans le processeur, on aura une meilleure précision que si on stocke un résultat intermédiaire en mémoire.

    Mais ce n'est pas un bug: les floats simple précision assurent une précision de 7 chiffres significatifs, et là on est au dessus.

Discussions similaires

  1. [VB6] Témoin de calcul sur une form
    Par kawel dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 07/08/2006, 19h44
  2. [VB6]Probleme de calcul...
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/04/2006, 16h08
  3. [VB6]calcul et affichage d'une pente
    Par fahmichebaane dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 07/03/2006, 16h34
  4. [VB6][Tendance d'Excel] Calcul des constantes de l'equation
    Par ludotek dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/08/2005, 14h41
  5. [VB6][DataReport] Faire un calcul
    Par Jokeur dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 24/07/2003, 16h10

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