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

Java Discussion :

[Math]problème multiplication double


Sujet :

Java

  1. #21
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Voici une 'tite méthode qui fonctionne à merveille pour faire des arrondis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      /**
       * Arrondi un double a à la précision p
       * @param a  la valeur à arrondir
       * @param p  la précision demandée 10^-p
       * @return la valeur arrondi
       */
      public static final double arrondir(double a, int p) {
        return (Math.round(a * Math.pow(10, p))) / (Math.pow(10, p));
      }

  2. #22
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    je me répète, mais si 1.2 n'a pas de représentation précise en double alors ça sert à quoi ?? sinon je suis d'accord qu'une légère imprcision de la représenatation d'un nombre cause des erreurs.

  3. #23
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Disons que si tu calcules 10 + 6,33 + 6,33 euros tu obtiendras 22.65999999999999999999999 je crois (en double). Comme en euros, seules les deux premières valeurs après la virgule t'intéressent, tu arrondis et hop, le résultats est bon.

    Les doubles permettent d'avoir des valeurs très très proches des "vraies" dans un ensemble de définition immense. Dans la plupart des cas (99%), c'est largement suffisant. Mais si tu dois travailler sur des valeurs décimal exactes qui ne souffrent d'aucune erreur de calcul (ie. si tu veux obtenir 22.66 exactement dans le calcul précédent), alors il faut utiliser autre chose.

  4. #24
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    moi je savais pas qu'on programmait des ordi pour donner de mauvais résultats !!! Non c'est pas sérieux je pense
    1+1=2 même avec des doubles, simplement si tu obtiens 1.99999999999999999 c'est parce que tu n'as pas rentré en machine 1+1 c'est tout mais plutôt 1.0000000000000000000000001+0.999999999999999999999998=1.999999999999999999999999999
    après faut comprendre pourquoi ton 1 devient 1.00000000000000000001 pour éviter ce problème.

    Bon je dis ça mais j'y connais juste un tout petit peu dans ce domaine ! Mais ça me paraît un peu faux ce que tu dis ! je trouve pas grand chose sur google sur le type double....

    Moi je pense que vu que les doubles sont sur 64 bits, je pense que le fait d'écrire à la main dans ton programme le chiffre 2 ou 1 ou 1.2 , ça ne suffit pas, il faut l'écrire peut être sous forme d'un tableau de 64 bits ! pour avoir un vrai 2,0000000000000000 ou 1.00000000000000

    Ca serait à essayer de d'abord écrire ses nombres en binaires 64 bits et ensuite de les convertir en double, c'est peut être la clef du problème !

    Je sais qu'à un certain niveau mathématico-informatique, les calculs se font par l'intermédiaire des opérateurs de bits et non des opérateurs usuels... (gain de temps de précision...)

    Voilà des pistes à creuser...

  5. #25
    FFF
    FFF est déconnecté
    Membre actif Avatar de FFF
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 342
    Points : 282
    Points
    282
    Par défaut
    d'ailleurs il serait bien d'ajouter aux forums de developpez.com un thread concernant les calculs numériques / méthodes numériques / calculs scientifiques

  6. #26
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Mais ça me paraît un peu faux ce que tu dis !
    Moi??? Mais j'ai rien dit....

    http://java.sun.com/j2se/1.4.2/docs/api/index.html

    Note: the results of this constructor can be somewhat unpredictable. One might assume that new BigDecimal(.1) is exactly equal to .1, but it is actually equal to .1000000000000000055511151231257827021181583404541015625. This is so because .1 cannot be represented exactly as a double (or, for that matter, as a binary fraction of any finite length). Thus, the long value that is being passed in to the constructor is not exactly equal to .1, appearances notwithstanding.
    Note: les résultats de ce constructeur peuvent être quelque peu imprévisibles. L'on a pourrait supposer qui nouveau BigDecimal(.1) est exactement égal au .1, mais elle est réellement égale au .1000000000000000055511151231257827021181583404541015625. C'est ainsi parce que le .1 ne peut pas être représenté exactement comme double (ou, pour cette matière, comme fraction binaire de toute longueur finie). Ainsi, la longue valeur qui est passée dedans au constructeur n'est pas exactement égale au .1, malgré aspects.
    (euh, bon, c'est une traduction Google, mais on comprend l'idée)

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    J'ai le même genre de problème avec les float ??

    s7=s7+(float)8.9;
    jLabel13.setText(String.valueOf(s7));

    s7 est au départ à 0. Voici ce que ce calcul donne déjà aprés 3 calculs...
    1 - 8.9
    2 - 17.8
    3 - 26.6999999

  8. #28
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Ben tu relis tout le sujet lol

  9. #29
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Merci, la fonction postée ci dessus marche nickel pour moi (je suis passé en double...)

  10. #30
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    essayer *= en opérateur.

Discussions similaires

  1. [AC-2007] Champ multiple double
    Par polemos dans le forum Modélisation
    Réponses: 2
    Dernier message: 15/04/2010, 10h52
  2. Problème de multiplication double/int
    Par gmirasaad dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2009, 14h13
  3. [Symbolic Math Toolbox ] sym et double
    Par jbollagnier dans le forum MATLAB
    Réponses: 10
    Dernier message: 27/07/2007, 15h22
  4. Réponses: 9
    Dernier message: 22/06/2006, 10h11
  5. Multiples double combobox indépendantes entre elles ??
    Par exway01 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/03/2006, 09h34

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