NaN, Infinity

Java Multithreading
10 уровень , 9 лекция
Открыта
NaN, Infinity - 1

— Привет, Амиго!

Сегодня я расскажу тебе еще про несколько интересных вещей в Java.

Бесконечность.

В Java тип double имеет специальные значения для понятий «плюс бесконечность» и «минус бесконечность». Положительное число, разделенное на 0.0, дает «плюс бесконечность», а отрицательное – «минус бесконечность».

Этим понятиям соответствуют специальные константы типа Double:

Код Описание
public static final double POSITIVE_INFINITY = 1.0 / 0.0;
плюс бесконечность
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
минус бесконечность

— И что, это действительно работает?

— Да. Смотри:

Код
double inf = Double.POSITIVE_INFINITY;
System.out.println(inf); // Бесконечность
System.out.println(inf + 1); //Бесконечность+1 ==Бесконечность
System.out.println(inf + 10); //Бесконечность+10 ==Бесконечность
System.out.println(inf * -1); //равно «минус бесконечность»
Double.NEGATIVE_INFINITY
Вывод на экран:
Infinity Infinity Infinity -Infinity

— Действительно работает. А если у нас получается неопределенность? Например, если мы из бесконечность вычитаем бесконечность?

— Для этого в Java есть еще одно понятие – NaN – Not-a-Number (не число).

Его используют в различных ситуациях:

1) Строку конвертируем в число, а в ней есть буквы. Ответ – NaN

2) Бесконечность минус бесконечность. Ответ — NaN

3) Многие другие ситуации, где в ответе ждут число, а получается неизвестно что.

— А какие операции можно производить с Infinity и NaN?

— С NaN все очень просто. Любая операция, где есть NaN, дает в результате NaN.

А с бесконечностью можно и поработать:

Выражение Результат
n ÷ ±Infinity
0
±Infinity × ±Infinity
±Infinity
±(не ноль) ÷ 0
±Infinity
Infinity + Infinity
Infinity
±0 ÷ ±0
NaN
Infinity - Infinity
NaN
±Infinity ÷ ±Infinity
NaN
±Infinity × 0
NaN

— Логично. Спасибо, Риша.

Комментарии (63)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Kurama Уровень 50
4 декабря 2022
Никогда не понимал, почему ±∞ * 0 == NaN
Loony.java Уровень 46
12 июня 2023
При умножении ЧИСЛА на ноль - получится ноль. Бесконечность же - это МНОЖЕСТВО чисел, из которого ты не можешь выбрать одно. Всё равно что крокодила умножать на ноль🐊
comrade_b Уровень 39
7 июля 2022
Где на практике это можно использовать? В каких приложениях есть вычисления с бесконечностью? Разве что вы мобилку по прокладыванию ближайшего пути до центра галактики высчитываете. Зачем нам это и зачем это в Multithreading?
Михаил Уровень 41
12 декабря 2021
Очень круто, не задумывался, что в java так бывает.
Андрей Уровень 37
1 декабря 2021
±(не ноль) ÷ 0 а разве тут не ArithmeticException должен вылететь? ведь на ноль делить нельзя.
LuneFox Уровень 41 Expert
3 декабря 2021
Если разделить на 0 (ожидаем int), то вылезет ArithmeticException, а вот если разделить на 0.0 (ожидаем double), то вылезет NaN. Тут вся статься о Double.
Святослав Уровень 29
27 октября 2021
Здесь был я 17го уровня.
SchlechtGut Уровень 51
3 ноября 2021
and me
PaiMei in J# Уровень 35
30 сентября 2021
Кажется если мы парсим строку в число и встретим в ней букву, то вместо NAN нас ожидает Number Format Exception или я что-то упустил🙄🤔
22 сентября 2021
Упустила раз , здесь повторила два.
Николай Т. Уровень 40
10 июня 2021
Спс, теперь я знаю куда можно послать :)
Булат Уровень 37
7 апреля 2021
Эх, флешбеки по матану несколько лет назад! А вот приятные или нет, пусть будет загадкой...
Булат Уровень 37
7 апреля 2021
(Привет из МГТУ им.Дауна)
Daniil Zastashkov Уровень 35
25 июня 2021
Звучит не слишком радушно) Я туда поступать планирую, расскажешь, что не так?
Павел Уровень 39
21 ноября 2023
С Булатом что-то однозначно не так)
11 января 2021
Прикол. Мне гугл этот материал выдал для задачи Исправь четыре ошибки Java Core 4 уровень, 8 лекция Ладно. В другом месте поищу