Bug d'opération en langage C - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 33 sur 33

Bug d'opération en langage C



  1. #31
    invitef0dbfc99

    Re : Bug d'opération en langage C


    ------

    Bon, je ne vais pas rentrer dans la discussion, je vous donne juste le résultat avec 300 chiffres

    (utilisation de Mapple avec 300 chiffres):

    tf = 0.9999999999999999999999999999 999999950000000000000000000000 000000000000499999999999999999 99999999999999999375
    000000000000000000000000000000 008749999999999999999999999999 999999868750000000000000000000 0000000000020624
    999999999999999999999999999999 66484375000000000000e-35

    -----

  2. #32
    invite1445654e

    Re : Bug d'opération en langage C

    je m'insère dans la discussion si vous le permettez
    bon deja voici la config de mon gcc

    gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)

    et voici ce que j'obtiens comme résultats dans DDD le debuggueur de RED HAT

    tf = ( -v + sqrt(v*v + 2*a*d) ) / a ;

    2*a*d -> 2e-45
    v*v -> 1.0000000000000002e-10
    v*v + 2*a*d -> 1.0000000000000002e-10
    sqrt(v*v + 2*a*d) -> 0
    -v + sqrt(v*v + 2*a*d) -> -1.0000000000000001e-5
    ( -v + sqrt(v*v + 2*a*d) ) / a -> -1

    cela me fait penser plus à un problème de cast implicite et vous ?

  3. #33
    polo974

    Re : Bug d'opération en langage C

    Le double dispose d'une mantisse sur 53 bits (et non 49 comme je l'avais dit précédemment).
    soit presque (tout est dans le presque...) 16 digits.

    donc chatouiller ce digit ne sert à rien, il est à peu près juste.

    par contre, ventilopomme, tu dois avoir un pb avec ta racine carrée.
    Code:
    2*a*d                :   000000000000000002e-45  36A6D601AD376AB9
    v                    :   1.0000000000000001e-05  3EE4F8B588E368F1
    v*v                  :   1.0000000000000002e-10  3DDB7CDFD9D7BDBC
    v*v + 2*a*d          :   1.0000000000000002e-10  3DDB7CDFD9D7BDBC
    sqrt(v*v + 2*a*d)    :   1.0000000000000001e-05  3EE4F8B588E368F1
    -v                   :  -1.0000000000000001e-05  BEE4F8B588E368F1
    -v+sqrt(v*v + 2*a*d) :   0000000000000000000000  0000000000000000
    pour que le résultat espéré soit juste il faudrait plus d'une soixantaine de bits en plus à la mantisse...
    Jusqu'ici tout va bien...

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. bug ou pas bug?
    Par invitec35bc9ea dans le forum Internet - Réseau - Sécurité générale
    Réponses: 13
    Dernier message: 03/07/2009, 08h54
  2. de langage C en langage assembleur
    Par invite284746c1 dans le forum Électronique
    Réponses: 1
    Dernier message: 14/05/2009, 12h42