Написание интерфейсов «просто потому, что» кажется мне пустой тратой времени и энергии, не говоря уже о нарушении принципа KISS.
Я пишу их, когда они действительно полезны для представления общего поведения связанных классов, а не просто как причудливый заголовочный файл.
Этот может быть хорошей справкой, если вы хотите узнать больше о числах с плавающей запятой в 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.
0/0
]. И константы из спецификации класса Float
:
Более подробную информацию можно найти в Страница IEEE-754 в Википедии .
Вот небольшая программа для иллюстрации трех констант:
System.out.println(0f / 0f);
System.out.println(1f / 0f);
System.out.println(-1f / 0f);
Вывод:
NaN
Infinity
-Infinity
Бесконечность (в java) означает, что результат операции будет настолько большим положительным или отрицательным числом, что его невозможно представить нормально.
Вы можете использовать их как любой другой номер:
например:
float min = Float.NEGATIVE_INFINITY;
float max = Float.POSITIVE_INFINITY;
float nan = Float.NaN;
Идея состоит в том, чтобы представить специальные числа, которые могут возникнуть естественным образом в результате операций с "нормальными" числами. Вы можете рассматривать бесконечность (как положительную, так и отрицательную) как «переполнение» представления с плавающей запятой, идея заключалась в том, что, по крайней мере, в некоторых условиях возвращаемое функцией значение по-прежнему дает значимый результат. У них все еще есть некоторые свойства упорядочивания, например (чтобы они не заваливали операции сортировки, например).
Нан очень конкретен: если x - это Нан, x == x - это ложь (на самом деле это один из способов проверить nan, по крайней мере, в C, снова). Это может сбивать с толку, если вы не привыкли к особенностям операций с плавающей запятой. Если вы не проводите научные вычисления, я бы сказал, что возвращение Nan операцией является ошибкой, по крайней мере, в большинстве случаев, которые приходят на ум. Нан может приходить для различных операций: 0/0, инф - инф, инф / инф, 0 * инф. У Нан также нет свойства упорядочивания.