Pourquoi ce code ne jette pas une ArithmeticException
? Regarde:
public class NewClass {
public static void main(String[] args) {
// TODO code application logic here
double tab[] = {1.2, 3.4, 0.0, 5.6};
try {
for (int i = 0; i < tab.length; i++) {
tab[i] = 1.0 / tab[i];
}
} catch (ArithmeticException ae) {
System.out.println("ArithmeticException occured!");
}
}
}
Je n'ai aucune idée!
Pourquoi ne pouvez-vous pas le vérifier vous-même et renvoyer une exception si c'est ce que vous voulez?.
try {
for (int i = 0; i < tab.length; i++) {
tab[i] = 1.0 / tab[i];
if (tab[i] == Double.POSITIVE_INFINITY ||
tab[i] == Double.NEGATIVE_INFINITY)
throw new ArithmeticException();
}
} catch (ArithmeticException ae) {
System.out.println("ArithmeticException occured!");
}
IEEE 754 définit 1.0 / 0.0
comme Infinity et -1.0 / 0.0
comme -Infinity et 0.0 / 0.0
comme NaN.
BTW Le point flottant a aussi -0.0
et donc 1.0/ -0.0
est -Infinity
.
L'arithmétique entière n'a aucune de ces valeurs et lève une exception à la place.
Pour rechercher toutes les valeurs possibles, y compris NaN, 0.0 et -0.0 pouvant produire un nombre non fini, vous pouvez procéder comme suit.
if (Math.abs(tab[i] = 1 / tab[i]) < Double.POSITIVE_INFINITY)
throw new ArithmeticException("Not finite");
C'est parce que vous avez affaire à des nombres à virgule flottante. La division par zéro renvoie Infinity
, qui est similaire à NaN
(pas un nombre).
Si vous voulez éviter cela, vous devez tester tab[i]
avant de l'utiliser. Ensuite, vous pouvez lancer votre propre exception, si vous en avez vraiment besoin.
0.0 est un double littéral et ceci n'est pas considéré comme un zéro absolu! Aucune exception, car on considère que la variable double est assez grande pour contenir les valeurs représentant l'infini
Java ne lève pas d'exception si vous divisez par un zéro égal à zéro. Une erreur d'exécution ne sera détectée que si vous divisez par entier zéro et non double zéro.
Si vous divisez par 0.0, le résultat sera INFINITY.
Lorsque divisé par zéro
Si vous divisez le double par 0, JVM affichera Infinity .
public static void main(String [] args){ double a=10.00; System.out.println(a/0); }
Console: Infinity
Si vous divisez int par 0, alors la machine virtuelle Java lancera exception arithmétique .
public static void main(String [] args){
int a=10;
System.out.println(a/0);
}
Console: Exception in thread "main" Java.lang.ArithmeticException: / by zero
Il y a une astuce, les exceptions arithmétiques se produisent lorsque vous jouez avec des intégrales et uniquement pendant/ou% opération.
s'il y a un nombre à virgule flottante en opération arithmétique, toutes les intégrales seront converties en interne en virgule flottante. Cela peut vous aider à vous rappeler des choses facilement.