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

Как мы можем использовать их в наших кодах, и что вызовет NaN (не число)?

Ответы на вопрос(6)

Positive infinity means going to infinity in the positive direction -- going into values that are larger and larger in magnitude in the positive direction. Negative infinity means going to infinity in the negative direction -- going into values that are larger and larger in magnitude in the negative direction. Not-a-number (NaN) is something that is undefined, such as the result of 0/0.

Float учебный класс:

Float.NEGATIVE_INFINITY Float.POSITIVE_INFINITY Float.NaN

Более подробную информацию можно найти вСтраница IEEE-754 в Википедии.

Вот небольшая программа, иллюстрирующая три константы:

System.out.println(0f / 0f);
System.out.println(1f / 0f);
System.out.println(-1f / 0f);

Выход:

NaN
Infinity
-Infinity
 Johanna17 июн. 2009 г., 17:07
но я думаю 1/0 вызовет положительную бесконечность: -?
 17 июн. 2009 г., 17:24
Да, вы правы - это была моя ошибка, и она была исправлена.

чтобы представлять специальные числа, которые могут возникать естественным образом в результате операций над «нормальным» номера. Вы можете видеть бесконечность (как положительную, так и отрицательную) как «переполнение» представления с плавающей точкой, идея состоит в том, что по крайней мере в некоторых условиях получение такого значения, возвращаемого функцией, все еще дает значимый результат. Например, они по-прежнему имеют некоторые упорядочивающие свойства (например, они не будут выполнять операции сортировки винта).

Nan очень конкретен: если x равен Nan, x == x является ложным (это фактически один способ проверить на nan, по крайней мере, в C, снова). Это может быть довольно запутанным, если вы не привыкли к особенностям с плавающей запятой. Если вы не будете делать научные вычисления, я бы сказал, что возвращение Nan с помощью операции - это ошибка, по крайней мере, в большинстве случаев, которые приходят на ум. Нэн может прийти на различные операции: 0/0, инф - инф, инф / инф, 0 * инф. У Нана тоже нет порядка размещения.

1/0 will result in positive infinity. 0/0 will result in Nan. You can use NaN as any other number, eg: NaN+NaN=NaN, NaN+2.0=NaN -1/0 will result in negative infinity.

что результатом операции будет настолько большое положительное или отрицательное число, что оно не может быть представлено в обычном режиме.

represented normally. Negative Infinity is a negative number so large that it cannot be represented normally. NaN means "Not a Number" and results from a mathematical operation that doesn't yield a number- like dividing 0 by 0.

это не полный ответ (или недостаточно разъясненный) - учтите это:

double a = Math.pow(10,600) - Math.pow(10,600); //==NaN

математически каждый может видеть, что это 0, но для машины это «Бесконечность» - «Бесконечность» (того же порядка) ведьма действительно NaN ...

 30 мар. 2016 г., 06:01
хорошо, я не знал, что я могу редактировать другие сообщения ... это как мерзавец :)
 30 мар. 2016 г., 02:42
При цитировании ответа его обычно лучше оставить в виде комментария или предложить изменение. Ответы должны быть в состоянии стоять в одиночестве.
Решение Вопроса

это может быть хорошим справочником, если вы хотите узнать больше о числах с плавающей запятой в 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.

 02 февр. 2017 г., 08:33
@PeterWebb на самом деле, даже без & # xB1; inf / NaNfloat, double и т.д. нарушают аксиомы поля, а именно ассоциативность. В любом случае они не должны быть базовыми строительными блоками для математиков, которые хотят работать с настоящими реалами & # x2014; для них существуют системы компьютерной алгебры, которые могут работать с точными числами.
 12 июл. 2013 г., 20:46
Я пытался исправить неработающую ссылку, но она была отклонена.Here Это действительно хороший ресурс, который также включает раздел QA со ссылками для дальнейшего изучения.
 16 апр. 2014 г., 21:44
@PeterWebb: тот факт, что NaN, к сожалению, был определен не только как не получивший оценки, но и как неравный сам по себе, означает, чтоfloat а такжеdouble не только нарушают аксиомы поля - они даже не являются классами эквивалентности. Это интересует гораздо больше людей, чем математиков, поскольку оно заставляет использовать уродливые кладжи для работы коллекций.
 12 дек. 2012 г., 00:04
К вашему сведению, ссылка устарела.
 14 авг. 2013 г., 11:17
Я не согласен с характеристикой (здесь и в других местах), что положительная бесконечность - это «число, настолько большое, что оно не может быть представлено нормально». Это может быть число настолько большое, что не может быть представлено как обычное число с плавающей точкой, но на практике оно обычно происходит от чего-то вроде 5f / 0f, которое не является большим (действительным) числом; это наивная версия бесконечности. (Технически + inf, -inf и NaN являются расширениями Реалов, которые обеспечивают замыкание по любой арифметической операции, но за счет нарушения основных аксиом поля. Это не имеет большого значения для компьютерных ученых, это имеет значение для математиков).

например:

float min = Float.NEGATIVE_INFINITY;
float max = Float.POSITIVE_INFINITY;
float nan = Float.NaN;

Ваш ответ на вопрос