Division par zéro en Java, exception non catchée ?

Division par zéro en Java, exception non catchée ? - Java - Programmation

Marsh Posté le 31-03-2003 à 00:55:56    

Y a quelque chose que je comprends pas je dois catcher une exception de division par zéro dans une de mes classes en java et je recontre un problème bizarre...
 

Code :
  1. int result;
  2. try {
  3.    result = 1 / 0;
  4. } catch (Exception e) {
  5.    System.out.println(e);
  6. }
  7. // là ok l'exception est catchée;


 
Par contre dans le cas ou le zéro est dans un variable...

Code :
  1. int result;
  2. int zero = 0;
  3. try {
  4.    result = 1 / zero;
  5. } catch (Exception e) {
  6.    System.out.println(e);
  7. }
  8. // là l'exception est plus catchée?!


 
... Là en effet si j'affiche le contenu de ma division j'obtiens "infinity"... C'est normal ça? :/
 
Merci de votre aide  :hello:
 
edit : je précise que j'ai le jdk 1.4.1_02 mais bon je pense pas que ça vienne de là :/


Message édité par robbystar le 31-03-2003 à 01:01:09
Reply

Marsh Posté le 31-03-2003 à 00:55:56   

Reply

Marsh Posté le 31-03-2003 à 03:46:31    

bizarre, quand j'essaie ton code, j'ai une ArithmeticException
J'ai une JVM 1.4.1_01
 
serait-ce un bug de la 1.4.1_02

Reply

Marsh Posté le 31-03-2003 à 09:48:29    

Moi j'ai essayé avec la 1.4.1_02, et ca marche :
 

Citation :


%java -version
java version "1.4.1_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06)
Java HotSpot(TM) Client VM (build 1.4.1_02-b06, mixed mode)  
%java test
java.lang.ArithmeticException: / by zero


---------------
get amaroK plugin
Reply

Marsh Posté le 31-03-2003 à 09:51:04    

C'est bizarre, moi j'obtiens bien une ArithmeticException, que ce soit avec HotSpot Client ou Server en 1.4.1_02-b06.
 
edit> Grillé. :D


Message édité par BifaceMcLeOD le 31-03-2003 à 09:51:46
Reply

Marsh Posté le 31-03-2003 à 09:52:42    

bobuse a écrit :

Moi j'ai essayé avec la 1.4.1_02, et ca marche :
 

Citation :


%java -version
java version "1.4.1_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06)
Java HotSpot(TM) Client VM (build 1.4.1_02-b06, mixed mode)  
%java test
java.lang.ArithmeticException: / by zero

 


 
je confirme :jap:

Reply

Marsh Posté le 31-03-2003 à 10:20:28    

C'est bizarr. Je précise que j'ai donné un code similaire mais pas mon vrai code attendez je reteste...

Reply

Marsh Posté le 31-03-2003 à 10:23:04    

Code :
  1. double coeff = 0;
  2.            try {
  3.                coeff = 1 / coeff;
  4.            } catch (Exception e) {
  5.                System.out.println(e);
  6.            }


Ca me capture pas l'exception et ça me donne infinity à l'affichage!  [:totoz]

Reply

Marsh Posté le 31-03-2003 à 10:28:01    

robbystar a écrit :

Code :
  1. double coeff = 0;
  2.            try {
  3.                coeff = 1 / coeff;
  4.            } catch (Exception e) {
  5.                System.out.println(e);
  6.            }


Ca me capture pas l'exception et ça me donne infinity à l'affichage!  [:totoz]  


 
Comment ça, ça te donne infinity à l'affichage !?? :heink:  
Un double ça peut pas valoir "infinity"...

Reply

Marsh Posté le 31-03-2003 à 10:49:29    

El_gringo a écrit :


 
Comment ça, ça te donne infinity à l'affichage !?? :heink:  
Un double ça peut pas valoir "infinity"...

En fait le "coeff" en question j'en fais un Double après...
 

Code :
  1. new Double(coeff);


 
Donc c'est ce Double en question qui affiche infinity... Mais à la limite c'est même pas le problème, c'est que je comprends pas pourquoi l'exception est pas levée.  [:mouais]
 
C'est vraiment trop bizarre...

Reply

Marsh Posté le 31-03-2003 à 11:10:57    

robbystar a écrit :

En fait le "coeff" en question j'en fais un Double après...
 

Code :
  1. new Double(coeff);


 
Donc c'est ce Double en question qui affiche infinity... Mais à la limite c'est même pas le problème, c'est que je comprends pas pourquoi l'exception est pas levée.  [:mouais]
 
C'est vraiment trop bizarre...


 
je confirme...
soutv(coeff) donne "Infinity"

Reply

Marsh Posté le 31-03-2003 à 11:10:57   

Reply

Marsh Posté le 31-03-2003 à 14:36:05    

A priori, c'est conforme à la spécification de la machine virtuelle :  

Citation :

An integer division (§15.17.2) or integer remainder (§15.17.3) operator throws an ArithmeticException if the value of the right-hand operand expression is zero.


Donc ArithmeticException est levée sur des entiers, pas des flottants.
 
Vous trouverez ici dans quelle(s) condition(s) une exception est levée en cours d'évaluation d'une expression (et quelle exception est levée).
 
D'ailleurs, "Infinity" est une valeur flottante valide dans la spécification des nombres réels à virgule flottante IEEE (celle qu'utilisent C et Java).
 
edit> Tu peux tester le caractère "infini" d'un réel en utilisant la méthode "static boolean java.lang.Double.isInfinite(double v)".


Message édité par BifaceMcLeOD le 31-03-2003 à 14:38:12
Reply

Marsh Posté le 31-03-2003 à 14:42:06    

BifaceMcLeOD a écrit :


D'ailleurs, "Infinity" est une valeur flottante valide dans la spécification des nombres réels à virgule flottante IEEE (celle qu'utilisent C et Java).
 


 ;) C'est bien ce que je me disais aussi, mais je voulais pas dire de conneries.


---------------
get amaroK plugin
Reply

Marsh Posté le 01-04-2003 à 02:52:43    

BifaceMcLeOD a écrit :


D'ailleurs, "Infinity" est une valeur flottante valide dans la spécification des nombres réels à virgule flottante IEEE (celle qu'utilisent C et Java).


en effet, et d'ailleurs Not-a-Number (NaN) aussi (indétermination 0/0, oo/oo, +oo -oo)


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed