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 :

problème d'overflow avec variable type double


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Par défaut problème d'overflow avec variable type double
    bonjour,
    lorsque je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ip_decimale As Double
    ip_decimale = (172 * 16777216 + 140 * 65536 + 32 * 256 + 10)
    je reçois un message d'erreur parlant d'overflow, par contre si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ip_decimale = 2894864394
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ip_decimale = (172# * 16777216# + 140# * 65536# + 32# * 256# + 10#)
    là pas de problème. pouvez vous m'éclairer ? surtout sur le rôle de ce "#"
    merci !

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Pourquoi définir un Double pour ne travailler qu'en Integer?

    Le type Long conviendrait parfaitement pour ce que tu veux faire puisqu'il est codé sur 32 bits.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Par défaut
    qu'appelez vous "travailler en integer" ? je n'ai défini qu'une seule variable et c'est un double.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Par défaut
    au fait, j'ai besoin d'une zone de 32 bits non signée pour y mettre une adresse ip

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Juste...

    Mea culpa.

    J'en étais justement arrivé à la même conclusion. J'avais oublié le "non signé".

    Après test, il semble qu'il suffise de forcer le type double pour le premier nombre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    172# * 16777216 + 140 * 65536 + 32 * 256 + 10
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Par défaut
    ha d'accord, mais c'est ... troublant lol. merci !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Par défaut
    c'est encore moi !

    autre probleme du meme style, ce code génère une erreur toujours d'overflow:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim source_ip, mask, net_adr As Double
        source_ip = 2894864394#
        mask = 4294967040#
        net_adr = source_ip And mask
        MsgBox net_adr
    tandis que celui ci affiche bien 8 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim source_ip, mask, net_adr As Double
        source_ip = 10
        mask = 8
        net_adr = source_ip And mask
        MsgBox net_adr
    1010
    1000
    ----- AND
    1000 -> 8

    mais je ne comprends pas pourquoi il ne veut pas faire ceci :

    10101100100011000010000000001010
    11111111111111111111111100000000
    ------------------------------------- AND
    10101100100011000010000000000000 -> 2894864384

    please help me

  8. #8
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 130
    Par défaut
    Double
    (à virgule flottante en double précision) 8 octets -1,79769313486232E308 à
    -4,94065645841247E-324 pour les valeurs négatives ; 4,94065645841247E-324 à 1,79769313486232E308 pour les valeurs positives
    Le caractère de déclaration de type Double est le signe #.

    Variant
    (nombres) 16 octets Toute valeur numérique, avec la même plage de valeurs qu'une donnée de type Double


    Le fait de préciser ce signe # dans la suite des calculs, oblige à travailler pour chaques chiffres en 8 Octets, sinon le travail ce fait sous Variant sur 16 Octets

    overflow = débordement, depassement de capacité mémoire
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Par défaut
    merci

    je viens de vérifier, pour le type long les valeurs vont de -2,147,483,648 à2,147,483,647, je ne peux donc pas l'utiliser car je dois pouvoir aller plus haut, dans les 4 milliards pour un masque reseau 255.255.255.0 par exemple

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

Discussions similaires

  1. problème avec le type double
    Par smil1 dans le forum Général Java
    Réponses: 6
    Dernier message: 05/10/2011, 10h01
  2. Probléme variable type double
    Par Pierre005 dans le forum Débuter
    Réponses: 5
    Dernier message: 02/12/2009, 15h10
  3. Probléme de recordset avec variable
    Par crovette51101 dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/05/2007, 09h40
  4. Réponses: 5
    Dernier message: 11/05/2006, 08h51
  5. Réponses: 1
    Dernier message: 27/07/2005, 17h08

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