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

Langage Java Discussion :

[Sondage][Numériques] Qu'utilisez vous ? [Débutant(e)]


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut [Sondage][Numériques] Qu'utilisez vous ?
    Bonjour,

    Je développe une appli de gestion et dans un premier temps je représentais mes montants avec des float, puis ayant besoin de plus de précision j'ai utilisé des double. Aujourd'hui je recontre des problèmes d'arrondis avec ces doubles, même sur de petites valeurs. J'ai pu lire sur différents threads de ce forum que d'autres personnes avaient ce problème, qu'on pouvait recourir à la classe BigDecimal, mais ça me semble assez lourd de devoir réécrire tout mes calculs avec des BigDecimal.

    Je ne cherche pas forcément la réponse à mon problème car, à priori, elle n'existe pas vraiment. J'aurais juste souhaité savoir :
    Quels types d'applications développez vous ?
    Est ce que ces applications nécessitent des calculs complexes et précis ?
    Comment faîtes vous pour effectuer vos calculs ?

    Merci d'avance pour vos réponses

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Points : 609
    Points
    609
    Par défaut
    J'ai fait quelques calculs complexe, et c'est vrai que la faible precision est parfois un probleme. Une solution serait de troncaturer a la Xeme decimale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Math.round(nombre*1000)/1000; //Arrondi a 10^-3
    Mais ça ne marche pas a tout les coups ^^

    Sinon je prefere utiliser les float/double tout en implementant un operateur d'egalitée pour eviter certains pieges:

    Piege:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boolean test = (10000.00001/10.0f == 1000.000001f); //devrait renvoyer vrai... et pourtant  :roll:
    Resolution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    boolean equals(float a, float b)
    {
      return (Math.abs(a-b)<0.01);
    }
     
    boolean test = equals(10000.00001/10.0f, 1000.000001f); //renvoi vrai

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Bonsoir,

    J'ai fait du calcul scientifique mais c'était sur Matlab. Et là j'utilisais la double précision qui si je m'abuse est à 10^-15 ce qui me semble pas trop mal. Et il me semble que c'est pareil sur java.(enfin je crois...)

  4. #4
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Ce n'est pas lie au langage mais la a maniere dont sont represente les nombres flottants dans les processeurs...

    Il y a deux solutions : BigDecimal ou nombres virgule fixe. Par exemple tu utilises un int et tu l'utilises de maniere a ce que les deux premiers chiffres soient en fait la partie decimale. Genre 100,20 euros sous forme d'un int 10020 avec la virgule fixe a la position 2.
    Romain Guy
    Android - Mon livre - Mon blog

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    Peut être que je vais polluer ce post mais il me semblait que la précision venait du nombre d'octets allouer pour un type de donnée. Et d'après ce que j'avais cru comprendre le type "long double" est le plus grand avec 12 octets.
    C'est pourquoi je ne comprends très bien ce que tu as dit Gfx.

  6. #6
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Gfx veut dire que certains nombres flottants ne peuvent être représentés correctement en binaire par les microprocesseurs (exemple : 6.33). Cela est du à la norme utilisée (IEEE 754).

    C'est pour cette raison qu'il y a des problèmes de précisions avec les float et les double même pour des opérations très simples.

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Certain nombres en base de dix ne possede pas de representation exacte en base de deux... indepemment du nombre d'octets utilisés.
    Je sais plus lesquels mais cela se retrouve des exemples...

  8. #8
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    ok merci tout s'éclaire

  9. #9
    Membre actif Avatar de Betatesteur
    Inscrit en
    Juillet 2003
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 210
    Points : 248
    Points
    248
    Par défaut
    on met aussi résolu pour des sondages ou pas?
    Le monde du DevLOpPEUR....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    En train, il admire le scrolling du paysage..
    Il rédige ses chèques en héxadécimal..
    Sa dernière pensée avant de s'endormir est "shutdown completed"...

  10. #10
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 143
    Points
    143
    Par défaut
    Je sais pas sais pas moi qui est posé la question.

    Mais j'ai vu sur le net une adresse interessante sur la norme IEEE 754:
    http://ariffart.club.fr/boutils/boutils05.html

    J'ai trouvé ça assez claire.

Discussions similaires

  1. [Sondage] Quels plugins pour Eclipse utilisez-vous ?
    Par xavlours dans le forum Eclipse
    Réponses: 75
    Dernier message: 13/07/2014, 15h58
  2. Réponses: 1
    Dernier message: 18/06/2007, 18h51
  3. Réponses: 12
    Dernier message: 18/06/2007, 13h03

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