November 2007


A nice article, I like his point of view of programming: Why I Program In Ruby (And Maybe Why You Shouldn’t)

La question a l’air simple mais la réponse (ou plutôt les réponses) demande quand même des détails précises.

Supposons que j’ai 2 nombres: n et m, avec m = 0 et dans mon programme je fais: result = n / m;
Qu’est-ce que je vais obtenir comme résultat ? une exception ? un nombre ? ou quelque chose qui n’est pas un nombre ?
La réponse est : les 3 et ça dépend du n et m
Concret:

  • si m ou n ou les deux sont float ou double, on a 3 cas
    1. si n > 0, le résultat est +Infinity (le constant POSITIVE_INFINITY de la classe Float ou Double)
    2. si n = 0, le résultat est NaN (Not a Number – le constant NaN de la classe Float ou Double)
    3. si n < 0, le résultat est -Infinity (le constant NEGATIVE_INFINITY de la classe Float ou Double)
  • si m et n sont int ou long, on a une exception (java.lang.ArithmeticException)

Donc il faut faire attention quand on divise par zéro dans le programme. Dans la plupart des cas, un try…catch ne suffit pas.

Plus de détails: le livre “The Java Language Specification, Third Edition – page 26”