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 :

Nombre double : écriture étrange


Sujet :

Langage Java

  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut Nombre double : écriture étrange
    Je n'ai jamais vu ceci (je viens de voir ça dans la classe java.lang.Double) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324
    Apparemment, le P déclare l'exposant - naturel, pas biaisé - (sur 11 bits) du double.
    En plus la partie avant le P doit être en hexa, sinon ça compile pas (0x)... (par exemple, 1p2 ça ne marche pas, mais 0x1p2 ça marche)

    Existe-t-il la même chose pour les float?

    Vous connaissiez cette fonction?

  2. #2
    Membre chevronné Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Par défaut
    Voici un extrait de la classe java.lang.Float :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public static final float MAX_VALUE = 0x1.fffffeP+127f; // 3.4028235e+38f
    public static final float MIN_VALUE = 0x0.000002P-126f; // 1.4e-45f
    Donc oui, ca existe avec les float.
    Et non je connaissais pas cette fonctionnalité. Mais j'en ai jamais eu besoin.

    D'ailleurs, il y a d'autres faits étranges dans la classe Float par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par gronono
    D'ailleurs, il y a d'autres faits étranges dans la classe Float
    Moi j'aime bien la méthode isNan(...) (pour double et float):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    static public boolean isNaN(double v) {
        return (v != v);
    }
    Autre petit détail que je n'explique pas, on peut avoir un infini pour double et float, mais pas pour int et long...
    Donc:
    ça ne lève pas d'exception...
    mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int i = 1/0;
    //ou encore
    double d = 1/0;
    ça lève une ArithmeticException...

  4. #4
    Membre chevronné Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Par défaut
    C'est vrai que c'est bizarre.

    Les divisions par zéro peuvent surement s'expliquer par la représentation des nombres en mémoire. Un réel n'a pas forcemenent de représentation en mémoire.
    Par contre un entier est toujours "exacte". Chaque entier peut s'écrire de manière exacte en base 2.
    Donc pour les divisions c'est normal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static public boolean isNaN(double v) {  return (v != v); }
    Cette méthode doit toujours retourné false non ?

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Les réels possèdent des notions d'infini, et comme en Math 1.0/0.0 == +infini et -1.0/0.0 == -infini.
    Ce doit être la même chose pour NaN qui représente une valeur incorrecte...

    Ces valeurs n'existe pas pour ce qui concerne les nombres entiers... d'où la différence de comportement...

    Pour le P c'est l'exposant binaire ! Tout est là : http://java.sun.com/docs/books/jls/t...al.html#3.10.2

    a++

  6. #6
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 36
    Par défaut
    Exactement :

    Descriptif rapide de NaN

    J'ai testé quelques cas, mais j'ai pas réussi à bloquer avec une division par zero mais racine carré de -1 ca marche bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    double sqrt = Math.sqrt(-1.);
    System.out.println("sqrt : "+ Double.isNaN(sqrt));
    Citation Envoyé par sysout
    sqrt : true

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    J'ai du mal à comprendre leur choix concernant le 'p'.

    Pourquoi la partie à gauche du p doit forcément être exprimée en hexa (avec le 0x forcé, même pour écrire un nombre plus petit ou égal à 9), alors que la partie droite du p doit forcément être exprimée en décimal...?

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/04/2008, 16h00
  2. Décimales d'un nombre double
    Par Cheps dans le forum C++
    Réponses: 1
    Dernier message: 03/04/2008, 20h35
  3. [VB.NET] Forcer l'affichage de deux décimales pour un nombre double.
    Par annedeblois dans le forum Windows Forms
    Réponses: 9
    Dernier message: 10/11/2006, 14h34
  4. Swing et double clique -> étrange pb
    Par adidmamah dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 13/09/2006, 09h09
  5. Réponses: 8
    Dernier message: 21/11/2005, 17h18

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