}
catch (ArithmeticException ex) {
// prévoir la gestion de l'exception division par zéro sur exception seulement.
// c'est plus rapide car on n'a pas besoin de tester la valeur à chaque fois.
if (ex.getMessage().equals("Division by zero")) {
throw new InterpreterException(StdErrors.Division_by_zero);
}
else {
throw new InterpreterException(StdErrors.extend(StdErrors.Arithmetic_error, ex.getMessage()));
}
}
}
/*
* s'il y a au moins un argument, on considère la forme (- n [args...])...
*/
try {
BigInteger[] v = new BigInteger[startAt.size() - 1];
for (int i = 1; i < startAt.size(); i++) {
v[i - 1] = _getArg_(startAt, i);
}
BigInteger old_r;
BigInteger r;
do {
old_r = number.get();
r = old_r;
for (int i = 0; i < v.length; i++)
r = r.divide(v[i]);
}
while (!number.compareAndSet(old_r, r));
return Node.createExternal(new External_Integer(old_r));
}
catch (ArithmeticException ex) {
// prévoir la gestion de l'exception division par zéro sur exception seulement.
// c'est plus rapide car on n'a pas besoin de tester la valeur à chaque fois.
if (ex.getMessage().equals("Division by zero")) {
throw new InterpreterException(StdErrors.Division_by_zero);
}
else {
throw new InterpreterException(StdErrors.extend(StdErrors.Arithmetic_error, ex.getMessage()));
}
}
}