Сравнение Infinities в Java
Что возвращает следующее выражение в Java?
Math.max(Float.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);
Я видел этот вопрос на веб-сайте и отвечал Double.POSITIVE_INFINITY
. Я не уверен в этом ответе, как мы можем сравнить две бесконечности? Может ли кто-нибудь прояснить это? Спасибо.
Ответы
Ответ 1
Float.POSITIVE_INFINITY возвращает float и Double.POSITIVE_INFINITY возвращает double.
Нет метода под названием Math.max(float, double).
только Math.max(float, float) и Math.max(двойной, двойной)
Поэтому, когда метод называется Math.max(float, double), он преобразует аргумент float в double, и поэтому Math.max(double, double) вызывается так Double.POSITIVE_INFINITY.
Java не конвертирует из double в float, поскольку это может привести к проблеме точности.
Ответ 2
Конечно, вы можете сравнить бесконечности. Если вы не попадете в трансфинитные системы нумерации, где существуют разные степени бесконечности, бесконечность означает только то, что она говорит, число без ограничений.
Максимальное/сумма/произведение/среднее из двух чисел без ограничения - это одно число без ограничений.
Ответ 3
Я думаю, вы обнаружите, что все операции с использованием специальных значений, определенных для типов double и float, определены в спецификации с плавающей точкой IEEE. Большинство языков программирования и почти все процессоры соответствуют этому стандарту.
Ответ 4
Вопрос о том, можно ли математически рассчитать бесконечность, лучше всего оставить здесь более математически грамотным. Но я думаю, что в случае Float.POSITIVE_INFINITY vs Double.POSITIVE_INFINITY это просто случай, когда Double больше Float, а константы POSITIVE_INFINITY - это просто максимально возможное значение для каждого типа данных.