Partage
  • Partager sur Facebook
  • Partager sur Twitter

Nombres de chiffres après la virgule

Anonyme
    2 mars 2015 à 9:41:56

    Bonjour,

    J'ai un problème de compréhension, j'ai la multiplication de nombres réels suivante.

    -3 * -0.0707106781 = 0.2121320344  ==> sur excel

    -3 * -0.0707106781 = 0.2121320343  ==> sur une calculatrice et java(-3 déclarer en int et -0.0707106781 comme double).

    Ensuite j'ai essayer ceci pour voir la suite de chiffres décimaux

    BigDecimal val1 = new BigDecimal(-3);

    BigDecimal val2 = new BigDecimal(-0.0707106781);

    BigDecimal valeur = val1.multiply(val2);

    Le résultat:

     0.212132034299999980286877132584 ...

    Quelqu'un pourrait m'expliquer la raison de ces différents résultats.

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      2 mars 2015 à 10:44:57

      un float n'est jamais une valeur exact, toujours approchée. Du coup, en fonction de la manière de l'utiliser ou d'ou tu l'utilise, il est possible d'obtenir des résultats sensiblements différents
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        3 mars 2015 à 2:10:54

        Oui mais ici j'ai déclarée ma variable en double et non en float.

        Ce que je trouve étrange c'est le résultat sur excel.

        Merci pour ta réponse.

        • Partager sur Facebook
        • Partager sur Twitter
          3 mars 2015 à 20:57:54

          Regarde comment sont codés les nombres décimaux en binaire, tu comprendras pourquoi le résultat est approximatif.

          Un ordinateur ne peux pas toujours stocker des nombres décimaux de manière exacte, c'est d’ailleurs parfois un problème ...

          Un peu de lecture :

          http://sdz.tdct.org/sdz/du-decimal-au-binaire.html

          http://www.afpy.org/doc/python/2.7/tutorial/floatingpoint.html

          http://fr.wikipedia.org/wiki/IEEE_754

          • Partager sur Facebook
          • Partager sur Twitter
          Un de ces quatre, viens faire un tour sur Zeste de Savoir !
            3 mars 2015 à 21:47:28

            ou voit tu des different resultat ? tes resultats sont absolument identique jusqu'a  0.212132034 !


            que veut tu de plus ? pour quelle application a tu besoin d'une précision supérieure ?

            • Partager sur Facebook
            • Partager sur Twitter
            www.chatelotenergie.com
              4 mars 2015 à 8:42:15

              moissan a écrit:

              ou voit tu des different resultat ? tes resultats sont absolument identique jusqu'a  0.212132034 !


              que veut tu de plus ? pour quelle application a tu besoin d'une précision supérieure ?


              ça s'appelle la curiosité moissan ^^
              • Partager sur Facebook
              • Partager sur Twitter
                4 mars 2015 à 22:23:43

                je n'ai rien contre la curiosité , je suis très curieux aussi ... ce qu'on demande a un systeme de calcul c'est d'etre juste sur un certain nombre de chiffre , et on en traine quelque un de plus pour ne pas faire d'erreur d'arrondi , mais ces chiffres supplementaire ne servent plus a grand chose dans le cas general ... mais on ne les enleve pas car suivant les calcul qu'on fait il serait nuisible de les supprimer

                si on limitait l'affichage aux chiffre absolument sur les curieux ne verait pas de probleme , mais l'arondi au chiffre sur produit des erreur ... en utilisant un peu plus de chiffre on evite les erreur d'arondi , mais on sait qu'il ne faut pas donner de valeur aux trop  derniers chiffre

                quand j'ai commencé a voir de l'informatique on n'avait pas les moyen d'avoir autant de chiffre , maintenant les giga octet ne sont pas cher et on n'hesite plus a trainer des chiffre en trop pas très significatif

                • Partager sur Facebook
                • Partager sur Twitter
                www.chatelotenergie.com
                Anonyme
                  8 mars 2015 à 11:36:41

                  Je dois faire un programme java qui lit un fichier excel contenant des données avec une précision de 10 chiffres

                  ensuite j'effectue des opérations sur ces données lues et  je n'obtiens pas les valeurs que je souhaite.

                  C'est vraiment le résultat sur excel que je ne comprends pas.

                  Sur la calculatrice par exemple je comprends qu'il a juste fais l'arrondi mais excel donne une valeur supérieur +1 par rapport à l'arrondi.

                  Merci pour les liens, je ne les ai pas encore visiter mais cela ne saura trop tarder, je suis sur qu'avec un peu de lecture et surtout du temps j'obtiendrai ce que je veux.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 mars 2015 à 14:53:07

                    Pour être stocké en mémoire, les nombres flottants sont codé.
                    Selon l'algorithme de codage ou la précision, la valeur réelle (après décodage) sera différente (cela n'a généralement pas d'impact).
                    C'est pour cela que la conversion en boucle "nombre > mémoire > autre nombre" donnera un autre résultat.

                    La classe BidDecimal n'effectue pas les calculs nativement mais selon des algorithmes (voir code source de la classe).
                    Tu auras donc la valeur la plus précise (si ce n'est la valeur réelle).

                    Excel stocke les valeurs exactes, parce que les données sont enregistrées dans un fichier XML et donc il n'y a pas de limite.
                    Les formules, elles, sont calculées dynamiquement.
                    Il y a aussi l'affichage qui permet de définir la précision sur l'affichage. Si tu laisse celui par défaut tu auras donc des écarts par rapport à la réalité.

                    Si tu veux expliquer la différence entre 0.2121320344 et 0.2121320343 tu devras comparer le fonctionnement du cœur de Java et de Excel.
                    Bref se branler le cerveau pour un résultat tout à fait normal.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                    Anonyme

                    Nombres de chiffres après la virgule

                    × 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