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

Delphi Discussion :

Je ne sais pas faire une addition ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut Je ne sais pas faire une addition ?
    Bonjour a tous

    Y a t il quelqu'un qui peux me dire pour quoi
    2,0173838401E+1078 + 3,0691830754E+1194 = 2,0173838401E+1078

    Comme vous l'avez pu le constatez l'addition est fosse car le résultat est égale au 1er opérande bien que le 2eme opérande soit différant de 0

    Vous pouvez vérifier cela avec la calculatrice de windows.

    Merci .

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Même le correcteur orthographique ne marche pas !

  3. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Même le correcteur orthographique ne marche pas !
    Il y a déjà pas mal de temps que j'ai constaté qu'il y a peu de membres chez lesquels il fonctionne.

    Mais trève de plaisanterie, chez moi, le résultat est 3,0691830754E+1194, ce qui n'est pas mieux.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    je regrette mais je suis bien d'accords avec ce cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    2.0173838401e+1078 +  3.0691830754e+1194 =  3.0691830754e+1194
    cette réponse est exacte!

    une preuve?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    1.0e+100 + 1.0e+100 = 2.0e+100
    1.0e+100 + 1.0e+101 = 1.1e+101
    1.0e+100 + 1.0e+105 = 1.00001e+105
    1.0e+100 + 1.0e+110 = 1.0000000001e+110
    1.0e+100 + 1.0e+120 = 1.00000000000000000001e+120
    1.0e+100 + 1.0e+150 = 1.0e+150
    cqfd
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  5. #5
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    La réponse :
    2,0173838401E+1078 + 3,0691830754E+1194 = 3,0691830754E+1194
    peut être considérée comme juste.


    Par contre effectivement :
    2,0173838401E+1078 + 3,0691830754E+1194 = 2,0173838401E+1078
    ça craint...

  6. #6
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    j'ai le meme probleme que defluc j' ne arrive meme pas a faire l'opération avec EXCEL a mon avis le valeur et trops importante pour etres contenu dans variable Extentend alors il renvoi un opérande le mieux serai une exception.

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hal,
    Citation Envoyé par aityahia
    j'ai le meme probleme que defluc j' ne arrive meme pas a faire l'opération avec EXCEL a mon avis le valeur et trops importante pour etres contenu dans variable Extentend alors il renvoi un opérande le mieux serai une exception.
    Pourquoi une exception ?

    Ce genre de truc arrive plus souvent que tu veux bien le croire, et est simplement dû aux limites de précisions des nombres flottants :
    dans le cas présent, ajouter 2 nombres qui différent d'environ 1E116, alors que la précision max des flottants est d'environ 19 chiffres (en extended, moins en double, et encore moins en float), soit 1E19, conduit inévitablement au réultat : le plus grand des 2,
    d'où l'étonnement quand on lit
    2,0173838401E+1078 + 3,0691830754E+1194 = 2,0173838401E+1078
    On en revient très souvent là : il faut faire attention quand on travaille avec des flottants, et bien être conscient des problèmes que ça peut poser.

  8. #8
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut à tous

    On en revient toujours au même problème ! C'est surprenant le nombre de programmeurs qui ne sont pas informés de ce problème "fondamental" qu'est le calcul en virgule flottante. Ca fait vraiment peur si on considère le nombre de logiciels qui réalise ce type de calculs, j'ose espèrer qu'une majorité de développeurs ont conscience de ce problème. Il faut le dire une fois pour toutes : les calculs en virgule flottante ne respectent pas les lois arithmétiques de base telles l'associativité, il convient d'en avoir conscience et de coder de façon à limiter la casse.

    Par exemple, la comparaison de deux valeurs en virgule flottante doit être faite avec prudence : il suffit de comparer la valeur absolue de la différence des deux valeurs à une précision donnée.

    cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. une manipulation de Form que je ne sais pas faire
    Par JeanNoel53 dans le forum C++Builder
    Réponses: 6
    Dernier message: 07/02/2011, 14h19
  2. JS ne sais plus faire une addition
    Par kernelfailure dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 23/06/2009, 01h31
  3. Amélioré une dll, je sais pas faire.
    Par Veler dans le forum C#
    Réponses: 3
    Dernier message: 05/10/2007, 17h47
  4. Réponses: 1
    Dernier message: 19/02/2006, 19h52
  5. Faire une addition en asp
    Par PrinceMaster77 dans le forum ASP
    Réponses: 9
    Dernier message: 29/11/2004, 15h25

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