Деление целого на ноль недопустимо и выбрасывает ArithmeticException, но деление значения с плавающей запятой на ноль не вызывает исключения. Арифметика с плавающей запятой может переполняться до бесконечности, если результат операции слишком велик для double или float или стремиться к нулю, если результат слишком мал для double или float. Java предоставляет специальные значения с плавающей запятой POSITIVE_INFINITY, NEGATIVE_INFINITY и NaN (Not a Number – не число) для обозначения этих результатов. Эти значения определяются как специальные константы в классе Float и Double.
Если положительное число с плавающей запятой делится на ноль, результат будет POSITIVE_INFINITY. Если отрицательное число с плавающей запятой делится на ноль, результатом является NEGATIVE_INFINITY. Если ноль с плавающей точкой делится на ноль, результатом является NaN, что означает, что результат математически не определен. Строковыми представлениями этих трех значений являются Infinity, -Infinity и NaN. Например,
System.out.print(1.0 / 0); // Печатает Infinity System.out.print(–1.0 / 0); // Печатает -Infinity System.out.print(0.0 / 0); // Печатает NaN
Эти специальные значения также могут использоваться в качестве операндов в вычислениях. Например, число, разделенное на POSITIVE_INFINITY, дает положительный ноль. В таблицеприведены различные комбинации операторов /, *, %, +, и —
x | y | x/y | x*y | x%y | x+y | x-y |
---|---|---|---|---|---|---|
Конечное число | ± 0.0 | ± infinity | ± 0.0 | NaN | Конечное число | Конечное число |
Конечное число | ± infinity | ± 0.0 | ± 0.0 | x | ± infinity | infinity |
± 0.0 | ± 0.0 | NaN | ± 0.0 | NaN | ± 0.0 | ± 0.0 |
± infinity | Конечное число | ± infinity | ± 0.0 | NaN | ± infinity | ± infinity |
± infinity | ± infinity | NaN | ± 0.0 | NaN | ± infinity | infinity |
± 0.0 | ± infinity | ± 0.0 | NaN | ± 0.0 | ± infinity | ± 0.0 |
NaN | Любое число | NaN | NaN | NaN | NaN | NaN |
Любое число | NaN | NaN | NaN | NaN | NaN | NaN |
Примечание: если одним из операндов является NaN, то результатом будет NaN.