Сравнение 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 - это просто максимально возможное значение для каждого типа данных.