Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problême de conversion int / double

Sujet résolu
    9 novembre 2019 à 17:00:53

    Bonjour je suis en plein codage d'une application et après une division d'un int par un chiffre décimale (float) je me retrouve avec un résultat pour le moins étrange :-° et je suis incapable de l'expliquer donc si quelqu'un pouvait m'éclairer ce serait cool ^^.

    Voilà mon problême : 

    Eq A : (y * (float) .0025) != Eq B :(y / (float) 400)

    et je comprends pas pourquoi dans certains cas ces deux équations sont diffèrentes, Exemple: 

    Pour y = 8230

    resultat : Eq B = 20,575 ce qui est logique mais Eq A = 20,5749999 ... o_O

    Après plusieurs test j'ai compris que le problème venait de la conversion en (float) de .0025 puisque tout fonctionne bien avec un double mais logiquement vue que float est sur 32 bits il ne devrait pas y avoir de problème donc je comprends pas, si vous trouvez pourquoi cela me donne un résultat pareil je serais fort heureux de comprendre :D, Merci

    • Partager sur Facebook
    • Partager sur Twitter
      13 novembre 2019 à 23:34:28

      Je dois avouer que  je suis pas un professionnel en Java mais je me demande pourquoi tu ecris (float) .0025...

      En fait je me demande pour tu mets un point avant 0025, si tu ecris (float) 0025 ou (float) 0.0025 que se passera t-il? :-°

      • Partager sur Facebook
      • Partager sur Twitter
        14 novembre 2019 à 16:17:52

        Bonjour,

        J'avais lu (je ne sais plus où) cette problématique d'imprécision de calcul qui peut arriver lorsque l'on utilise des double ou des float comme variable.
        L'auteur expliquait je me rappelle que cela venait du fait que l'ordinateur ne fait pas de l’arithmétique de la même façon que nous (il se sert du binaire donc de 0 et de 1), du coup tu pouvais avoir des écarts infimes (genre 0.0000000001 d’écart mais qui du coup fausse ton calcul) .

        J'essayerais de te retrouver les sources

        Bonne journée

        • Partager sur Facebook
        • Partager sur Twitter
          14 novembre 2019 à 18:20:33

          GeraudMonteils a écrit:

          Bonjour,

          J'avais lu (je ne sais plus où) cette problématique d'imprécision de calcul qui peut arriver lorsque l'on utilise des double ou des float comme variable.
          L'auteur expliquait je me rappelle que cela venait du fait que l'ordinateur ne fait pas de l’arithmétique de la même façon que nous (il se sert du binaire donc de 0 et de 1), du coup tu pouvais avoir des écarts infimes (genre 0.0000000001 d’écart mais qui du coup fausse ton calcul) .

          J'essayerais de te retrouver les sources

          Bonne journée

          Je n'ai rien compris là....😅.

          Et cela résout pas le pas problème...

          • Partager sur Facebook
          • Partager sur Twitter
            14 novembre 2019 à 20:55:49

            Le fait que tu n'aies rien compris à l'explication fait peut être que tu ne vois pas les solutions induites (ne pas passer par float, ou sinon ne pas faire une comparaison exacte mais une comparaison avec marge d'erreur de 0.01 par exemple ...). La question de Helios semblait être surtout de comprendre pourquoi le calcul donnait un chiffre erroné, pas comment y remédier :p

            Sinon pour aller plus loin sur le sujet , il existe un site dédié à cette question qui probablement donne des explications plus claires que moi :o 

            Voici le lien : https://floating-point-gui.de/

            Bonne lecture

            • Partager sur Facebook
            • Partager sur Twitter
              15 novembre 2019 à 3:41:17

              GeraudMonteils a écrit:

              Le fait que tu n'aies rien compris à l'explication fait peut être que tu ne vois pas les solutions induites (ne pas passer par float, ou sinon ne pas faire une comparaison exacte mais une comparaison avec marge d'erreur de 0.01 par exemple ...). La question de Helios semblait être surtout de comprendre pourquoi le calcul donnait un chiffre erroné, pas comment y remédier :p

              Sinon pour aller plus loin sur le sujet , il existe un site dédié à cette question qui probablement donne des explications plus claires que moi :o 

              Voici le lien : https://floating-point-gui.de/

              Bonne lecture

              Merci beaucoup 😅

              • Partager sur Facebook
              • Partager sur Twitter

              Problême de conversion int / double

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown