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][Info]division par zéro [FAQ]


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 154
    Par défaut [Math][Info]division par zéro
    quelqu'un peut il m'expliquer pourquoi quand je fait une division de deux float, si le dénominateur est égal à 0, ca ne me lève pas l'exception ArithmeticException mais çà me donne un résultat infinity ??

    alors que ca marche avec des int

    pour tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class Divide {
     
    	public static void main(String[] args) {
    		float res=0;			
    			float a = Float.valueOf(args[0]).floatValue();
    			float b = Float.valueOf(args[1]).floatValue();
    		try{
    		res = a/b;    
    		}
    		catch(ArithmeticException e){System.out.println("pas de division par 0 !");}
    		finally{System.out.println("bien essayé !");}
     
    		System.out.println("quotient = "+res);		
    	}
    }

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Salut,

    Peut-être parce que la classe Float définit NEGATIVE_INFINITY et POSITIVE_INFINITY alors que la classe Integer ne le fait pas... peut-être...
    Donc les Integer ne sachant pas représenter l'infini, ça te retourne une ArithmeticException, alors que pour les Float tu as la valeur infinie en résultat.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 154
    Par défaut
    oui ca c sûr mais je me demande prquoi ils ont mis infinity dans foat et pas dans int ...

    c moyennement logique je trouve

  4. #4
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    J'ai fait des tests.. et je tombe sur le meme resultat.. c'est bizarre.. je vais jeter un coup d'oeil dans la spec!

  5. #5
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    C'est d'aUtaNt plus bizarre que la division par c'est pas l'infini. Disons le ça n'existe pas

  6. #6
    Membre éprouvé Avatar de Xavinou
    Inscrit en
    Mai 2005
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 135
    Par défaut
    J'en suis pas sûr du tout, mais je pense que la différence vient du fait que les float ne représentent pas exactement (au sens mathématique) les nombres qu'on leur affecte. Il y a une notion de précision qui n'existe pas pour les int.
    Si on considére que 0.0 est la représentation mémoire d'un nombre proche de 0, le résultat d'une division en l'utilisant doit tendre vers l'infini.

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    c'est normal. cf. spécification IEEE 754 ()

    tous les calculs en virgule flottante respectent cette spécif qui dit qu'un nombre non-nul divisé par 0 donne un infini (positif ou négatif) et 0/0 donne NaN (not a number).

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 154
    Par défaut
    Citation Envoyé par bigboomshakala
    c'est normal. cf. spécification IEEE 754 ()

    tous les calculs en virgule flottante respectent cette spécif qui dit qu'un nombre non-nul divisé par 0 donne un infini (positif ou négatif) et 0/0 donne NaN (not a number).
    oui mais alors ca pourrait faire pareil pr les INT non ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 28
    Par défaut
    non ! il est difficile de faire tendre x->0 avec x entier !!!! donc il n'y a pas de notion de limites sur les entiers (enfin, pas aussi simple) !

    donc l'IEE 754 recommande en plus d'un calcul de limite dans les cas facile (1/0 etc...) de ne pas faire d'exception pour la division par 0 (mais de renvoyer un NaN si la limite ne peut être calculé).

    Cette recommandation est un bénédiction pour qui fait du calcul numérique en Java (y en a). En effet un calcul ne génère pas d'erreur !! au pire il affirme qu'il ne peut pas se calculer !

    Pour les entiers
    1- le problème se pose moins (moins de calcul numérique sur les entiers)
    2- la notion de limite n'existe pas ! (mais au aurait pu garder les NaN)

    voilà mon avis !!

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 154
    Par défaut
    merci, ma curiosité est satisfaite, a+ !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Math] Modulo de la division par 97
    Par cafeine dans le forum Contribuez
    Réponses: 1
    Dernier message: 20/08/2007, 19h48
  2. [CR8.5] Problème de division par zéro sur formule
    Par franck.cvitrans dans le forum Formules
    Réponses: 3
    Dernier message: 10/06/2004, 13h41
  3. Division par 16 en C
    Par hermannd dans le forum C
    Réponses: 18
    Dernier message: 13/02/2004, 14h10
  4. [LG]a divise par b
    Par backsync dans le forum Langage
    Réponses: 8
    Dernier message: 22/10/2003, 21h37
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

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