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 :

question sur la precision sur vb.net [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut question sur la precision sur vb.net
    salut!!


    voila je veux par exemple calculer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    math.pow(91,77) mod 1591
    le resultat calculer avec microsoft math ou matlab est par exemple 93

    mais le resultat obtenu par le programme visual basic est incorrect

    j'ais essayer d'utiliser le variable decimal est double mais le resultat est le meme

  2. #2
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Bonjour,

    Le résultat que tu donnes en exemple (371) ne correspond pas aux chiffres du code...

    Tu veux faire quoi comme calcul exactement ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je ne suis pas sur mais il me semble que mod est le RESTE d'une division.

  4. #4
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    Salut

    bizarre

    avec la calculatrice du windowsxp
    91^77 mod 1591 j'obtiens 93

    avec code vb.net
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim res As Double
            Try
                res = Math.Pow(91, 77) Mod 1591
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    j'obtiens 1508
    j'ai essayé avec d'autre calculatrice sur le web j'obtiens 1508

  5. #5
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonjour,

    Cela semble lié à la manière dont sont stockés les nombres en mémoire et comment sont effectuées les opérations dessus ; mantisse etc. (n'étant pas trop au fait du sujet je laisse à quelqu'un d'autre le soin d'apporter des éclaircissements).

    Si j'utilise le type BigInteger je trouve bien le même résultat que la calculatrice Windows (à savoir 93)

    Cordialement !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je trouve aussi 93...

    Je pense qu'il y a un dépassement de capacité sur le Pow, et c'est pour ça qu'on ne trouve pas du tous le même résultat.

  7. #7
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    merci les amie

    bon moi si la puissance dépasse 11 le résultat avec le vb.net est faux

    par rapport au résultat obtenu par microsoft math 3 donc je pense qu'il ya un dépassement

    je vous de bien vouloir téster un nombre avec le vb.net est voire est ce que le résultat est vrai

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par yassinema Voir le message
    merci les amie

    bon moi si la puissance dépasse 11 le résultat avec le vb.net est faux

    par rapport au résultat obtenu par microsoft math 3 donc je pense qu'il ya un dépassement

    je vous de bien vouloir téster un nombre avec le vb.net est voire est ce que le résultat est vrai
    Il n'est pas possible de faire des calculs avec des grands nombre entiers sur des double : la précision est insuffisante; les double sont conçues pour travailler sur des nombres très grands ou très petit avec une précision "suffisante". Or la méthode Pow ne fonctionne qu'avec des double. La précision est plus que suffisante pour du calcul physique, mais n'est pas adapté pour faire des opérations purement mathématiques (type modulo).

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    il semblerait que cette erreur est due au dépassement de capacité de la mémoire cache.
    Les applications donnant le bon résultat doivent sans doute, utiliser un algorithme qui contourne ce problème.
    Enfin, c'est ce que je comprends de cet article. (Les spécialistes me corrigeront au besoin).
    Dans ce sens, on obtient le bon résultat avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Dim b As Double = 91
            Dim exp As Integer = 77
            Dim m As Double = 1591
            Dim expProv As Double = 1
            Dim c As Double = 0
     
            For i As Integer = 1 To exp
                c = (expProv * b) Mod m
                expProv = c
            Next
            MessageBox.Show(c.ToString)

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par chrismonoye Voir le message
    Bonsoir,
    il semblerait que cette erreur est due au dépassement de capacité de la mémoire cache.
    Non, je pense plutot que c'est du à une perte de précision dans la méthode Pow. La mémoire cache n'a pas grand chose à voir là dedans.

    Dans ton cas, le problème ne se produit pas car tu réduit le nombre de chiffres significatifs en appliquant l'opération modulo à chaque passage; donc tu ne dépasse jamais la précision maxi.

  11. #11
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Par défaut
    chrismonoye


    merci je vais essayer ta méthode


    bonne idée !!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/02/2011, 09h45
  2. Réponses: 4
    Dernier message: 19/07/2010, 11h24
  3. Question d'ordre général sur les macros sur excel
    Par tzehani dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 29/08/2007, 05h16
  4. Réponses: 11
    Dernier message: 06/03/2007, 19h18
  5. Réponses: 3
    Dernier message: 16/02/2007, 12h35

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