Что решает Нэн и Бесконечность в операциях деления Java

Вывод приведенного ниже кода меня смущает. Зачем NaN иногда и бесконечность других времен?

public static void main (String[] args) {

    double a = 0.0;
    double b = 1.0;
    int c = 0; 
    System.out.println(a/0.0);
    System.out.println(a/0);
    System.out.println(b/0.0);
    System.out.println(b/0);
    System.out.println(c/0.0);
    System.out.println(c/0);
}

Выходы есть:

NaN
NaN
Infinity
Infinity
NaN
Exception in thread "main" java.lang.ArithmeticException: / by zero

Что является решающим фактором здесь?

1 ответ

Решение

Это связано со стандартом IEEE для арифметики с плавающей точкой (IEEE 754), который является техническим стандартом для вычислений с плавающей точкой, установленным в 1985 году Институтом инженеров по электротехнике и электронике (IEEE).


Цель:

Стандарт IEEE с плавающей точкой,.. определяет, что каждая арифметическая операция с плавающей точкой, включая деление на ноль, имеет четко определенный результат. Стандарт поддерживает ноль со знаком, а также бесконечность и NaN (не число). Есть два нуля: +0 (положительный ноль) и -0 (отрицательный ноль), и это устраняет любую неопределенность при делении.


Правило:

В IEEE 754 арифметика, a ÷ +0 положительная бесконечность, когда a положительный, отрицательная бесконечность, когда a отрицательный, и NaN, когда a = ±0.


Источник

Другие вопросы по тегам