Что означают эти три специальных значения с плавающей запятой:положительная бесконечность, отрицательная бесконечность, NaN?

StackOverflow https://stackoverflow.com/questions/1007586

Вопрос

Как мы можем использовать их в наших кодах и что приведет к 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…

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top