IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

LEKHEBASSENE

Bug de calcul sous JDK 1.6 / Windows

Noter ce billet
par , 11/06/2015 à 12h55 (724 Affichages)
Bonjour à tous,
Je signale un problème grave au niveau des instructions de multiplications avec Java.
En effet, après des tests sur un code, je me suis aperçu que Java donnait :

0.55 * 100 = 55.00000000000001
0.555 * 100 = 55.50000000000001

Suite à cela, mon chef de projet a réussi à isoler d'autres opérandes qui donnaient un calcul faux !
L'environnement était JDK 1.6 / Windows, testé sur 2 machines différentes !
Je conseille vivement à toute la communauté Java de tester les calculs que j'ai donnés.
Pour nos projets, la conséquence est assez grave et je prépare un ticket pour faire remonter le problème à Oracle.

Envoyer le billet « Bug de calcul sous JDK 1.6 / Windows » dans le blog Viadeo Envoyer le billet « Bug de calcul sous JDK 1.6 / Windows » dans le blog Twitter Envoyer le billet « Bug de calcul sous JDK 1.6 / Windows » dans le blog Google Envoyer le billet « Bug de calcul sous JDK 1.6 / Windows » dans le blog Facebook Envoyer le billet « Bug de calcul sous JDK 1.6 / Windows » dans le blog Digg Envoyer le billet « Bug de calcul sous JDK 1.6 / Windows » dans le blog Delicious Envoyer le billet « Bug de calcul sous JDK 1.6 / Windows » dans le blog MySpace Envoyer le billet « Bug de calcul sous JDK 1.6 / Windows » dans le blog Yahoo

Catégories
Java

Commentaires

  1. Avatar de plegat
    • |
    • permalink
    Le calcul est bon, ou est le problème?

    le 0.00000000000000001 en trop?
    C'est de l'informatique ça, pas de la problématique...

    Sinon fait:

    ça devrait de suite te rassurer...
  2. Avatar de LEKHEBASSENE
    • |
    • permalink
    Je viens de faire le test sous Linux installé sous machine virtuelle avec la Open JDK 6 : même problème.
  3. Avatar de LEKHEBASSENE
    • |
    • permalink
    Citation Envoyé par plegat
    Le calcul est bon, ou est le problème?

    le 0.00000000000000001 en trop?
    C'est de l'informatique ça, pas de la problématique...

    Sinon fait:

    ça devrait de suite te rassurer...
    Je pense que tu n'as pas saisi le problème ni les conséquences ... et ton calcul est interprété avec du php et non pas par une jvm ... , par ailleurs, je suis aussi enseignant de mathématiques au lycée ...
  4. Avatar de LEKHEBASSENE
    • |
    • permalink
    Citation Envoyé par plegat
    Le calcul est bon, ou est le problème?

    le 0.00000000000000001 en trop?
    C'est de l'informatique ça, pas de la problématique...

    Sinon fait:

    ça devrait de suite te rassurer...
    Pour le petit code, il fallait plutôt écrire 0.55*100f et non 0.55f*100, de plus le f est inutile ici car l'interpréteur détecte que c'est une opération flottante à cause du 0.55.
    Le f est utile en cas de division pour distinguer la division entière de la division euclidienne. Bien sûr, je parle dans le contexte du langage PHP. Java est un peu plus rigoureux dans certains cas.
  5. Avatar de kolodz
    • |
    • permalink
    L'erreur est "normal". Celle-ci est dû à la structure de stockage des float.

    Quand on lit la documentation Java sur les types primitifs, cela est précisé :
    Citation Envoyé par float
    The float data type is a single-precision 32-bit IEEE 754 floating point. Its range of values is beyond the scope of this discussion, but is specified in the Floating-Point Types, Formats, and Values section of the Java Language Specification. As with the recommendations for byte and short, use a float (instead of double) if you need to save memory in large arrays of floating point numbers. This data type should never be used for precise values, such as currency. For that, you will need to use the java.math.BigDecimal class instead. Numbers and Strings covers BigDecimal and other useful classes provided by the Java platform.
    Source :
    https://docs.oracle.com/javase/tutor...datatypes.html
    https://docs.oracle.com/javase/specs...html#jls-4.2.3
  6. Avatar de plegat
    • |
    • permalink
    Etre enseignant en mathématiques ne permet pas de tout savoir sur le comportement des langages informatique.
    Là tu cries au loup pour un comportement habituel, en appelant "bug" un manque de connaissance.
    Mais on est tous passés par là!
  7. Avatar de Lolo78
    • |
    • permalink