Подтвердить что ты не робот

Какая разница между Float.POSITIVE_INFINITY и Float.MAX_VALUE?

В чем разница между Float.POSITIVE_INFINITY и Float.MAX_VALUE? Что больше? Они одинаковы?

Я подошел к ним, ища значение, которое было бы больше, чем все остальные float, или не получило бы все, кроме самого большого. Соответствует ли это критериям?

Спасибо!

4b9b3361

Ответ 1

Нет, они совсем не то же самое.

Float.MAX_VALUE - наибольшее конечное значение, которое может быть представлено в float. Вы не найдете больше значения, кроме бесконечности. Но вы можете выполнять на нем все другие операции.

Float.POSITIVE_INFINITY, ну, бесконечность. Большинство операций с бесконечностью заканчиваются бесконечностью (положительной или отрицательной).

Например:

public class Test {
    public static void main(String[] args) {
        testOperations(Float.MAX_VALUE);
        testOperations(Float.POSITIVE_INFINITY);
    }

    public static void testOperations(float input) {
        System.out.println("input: " + input);
        System.out.println("input / 100: " + input / 100);
        System.out.println("input * 100: " + input * 100);
        System.out.println("-input: " + (-input));
        System.out.println();
    }
}

Вывод:

input: 3.4028235E38
input / 100: 3.4028236E36
input * 100: Infinity
-input: -3.4028235E38

input: Infinity
input / 100: Infinity
input * 100: Infinity
-input: -Infinity

Ответ 2

Чтобы ответить на ваш конкретный вопрос:

Я наткнулся на них в поисках значения, которое было бы больше, чем у любого другого поплавка, или не смогло получить ничего, кроме самого большого. Соответствует ли этот критерий?

Да, Float.POSITIVE_INFINITY, по определению, является единственным Float который больше, чем Float.MAX_VALUE. Это, однако, особый случай с точки зрения того, как он взаимодействует с математическими операциями.

Из Javadoc:

public static final float POSITIVE_INFINITY:

Константа, содержащая положительную бесконечность типа float. Это равно значению, возвращенному Float.intBitsToFloat(0x7f800000).

публичный статический финал с плавающей точкой MAX_VALUE:

Константа, содержащая наибольшее положительное конечное значение типа float, (2-2-23) · 2127. Он равен шестнадцатеричному литералу с плавающей точкой 0x1.fffffeP + 127f, а также равен Float.intBitsToFloat(0x7f7fffff).

Итак, как вы можете видеть, в соответствии с очень буквальным определением является то, что POSITIVE_INFINITY больше MAX_VALUE на один бит.

С точки зрения их полезности, POSITIVE_INFINITY предоставляет значение, которое вы можете использовать для распознавания в противном случае проблемных математических выражений. В источнике JDK используется значение 1.0f/0.0f. Результатом этого выражения является POSITIVE_INFINITY, указывающее, что вы превысили верхнюю границу разумной математики, чтобы никогда не возвращаться. Учитывая две константы POSITIVE_INFINITY и NEGATIVE_INFINITY, вы можете проверить, вышло ли общее выражение за пределы полезных значений Float и было ли это положительной или отрицательной дверью.

MAX_VALUE, с другой стороны, представляет собой максимальное значение, к которому вы все еще можете применить обычные математические операции. Например, MAX_VALUE - 1.0E32 - это (немного) меньшее число, чем MAX_VALUE. POSITIVE_INFINITY - 1.0E32, однако, все еще POSITIVE_INFINITY.