Что означают эти три специальных значения с плавающей запятой:положительная бесконечность, отрицательная бесконечность, NaN?
-
06-07-2019 - |
Вопрос
Как мы можем использовать их в наших кодах и что приведет к NaN(не числу)?
Решение
Это может быть хорошим справочным материалом, если вы хотите узнать больше о плавании номера точек в Java.
Положительная бесконечность - это положительное число, настолько большое, что его нельзя представить нормально. Отрицательная бесконечность - это отрицательное число, настолько большое, что его нельзя представить нормально. NaN означает «не число» и результат математической операции, которая не приводит к числовому делению 0 на 0.
В Java классы Double и Float имеют константы для представления всех трех случаев. Это POSITIVE_INFINITY, NEGATIVE_INFINITY и NaN.
Плюс учтите это:
double a = Math.pow(10, 600) - Math.pow(10, 600); //==NaN
Математически все могут видеть, что это 0. Но для машины это "Бесконечность" - «Бесконечность» (того же ранга), который действительно NaN. Р>
Другие советы
- Положительная бесконечность означает стремление к бесконечности в положительном направлении — переход к значениям, которые все больше и больше по величине в положительном направлении.
- Отрицательная бесконечность означает стремление к бесконечности в отрицательном направлении — переход к значениям, которые все больше и больше по величине в отрицательном направлении.
- Не-число (NaN) — это нечто неопределенное, например, результат
0/0
.
А константы из спецификации Float
сорт:
Более подробную информацию можно найти в Страница IEEE-754 в Википедии.
Вот небольшая программа, иллюстрирующая три константы:
System.out.println(0f / 0f);
System.out.println(1f / 0f);
System.out.println(-1f / 0f);
Выход:
NaN
Infinity
-Infinity
- 1/0 даст положительную бесконечность.
- 0/0 приведет к Нэн.Вы можете использовать NaN как любое другое число, например:NaN+NaN=NaN, NaN+2,0=NaN
- -1/0 приведет к отрицательной бесконечности.
Бесконечность (в Java) означает, что результатом операции будет настолько большое положительное или отрицательное число, что его невозможно представить нормально.
Идея состоит в том, чтобы представлять специальные числа, которые могут естественным образом возникать в результате операций с «нормальным» числом. номера. Вы можете видеть бесконечность (как положительную, так и отрицательную) как «переполнение» представления с плавающей точкой, идея состоит в том, что по крайней мере в некоторых условиях получение такого значения, возвращаемого функцией, все еще дает значимый результат. Например, они по-прежнему имеют некоторые свойства упорядочения (например, они не будут выполнять операции сортировки винта).
Nan очень специфичен: если x - это Nan, x == x - ложь (на самом деле это один из способов проверить nan, по крайней мере, в C, опять же). Это может быть довольно запутанным, если вы не привыкли к особенностям с плавающей запятой. Если вы не будете делать научные вычисления, я бы сказал, что возвращение Nan с помощью операции - это ошибка, по крайней мере, в большинстве случаев, которые приходят на ум. Нэн может прийти на различные операции: 0/0, инф - инф, инф / инф, 0 * инф. У Nan тоже нет никаких свойств упорядочения.
Вы можете использовать их как любой другой номер:
например:
float min = Float.NEGATIVE_INFINITY;
float max = Float.POSITIVE_INFINITY;
float nan = Float.NaN;
Положительная бесконечность является положительным числом настолько большим, что его нельзя представлять нормально.Отрицательная бесконечность - это отрицательное число настолько большое, что оно не может быть представлено нормально.Нэн означает «не число» и результаты математическая операция, которая не дает числа- Как деление 0 на 0.
это не полный ответ (или недостаточно разъясненный) - подумайте об этом:
double a = Math.pow(10,600) - Math.pow(10,600); //==NaN
математически каждый может видеть, что это 0.но для машины это «Бесконечность» — «Бесконечность» (того же порядка), ведьма действительно NaN…