Какая разница между Float.POSITIVE_INFINITY и Float.MAX_VALUE?
В чем разница между Float.POSITIVE_INFINITY
и Float.MAX_VALUE
?
Что больше?
Они одинаковы?
Я подошел к ним, ища значение, которое было бы больше, чем все остальные float
, или не получило бы все, кроме самого большого. Соответствует ли это критериям?
Спасибо!
Ответы
Ответ 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
.
Ответ 3
Более подробную информацию о значениях с плавающей запятой IEEE 754 можно найти здесь: http://steve.hollasch.net/cgindex/coding/ieeefloat.html