Float.POSITIVE_INFINITY
和Float.MAX_VALUE
之间有什么区别?哪个更大?它们是一样的吗?
我遇到了他们,寻找一个比其他float
都大的值,或者失败了,除了最大的。两者都符合标准吗?
谢谢!
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
要回答您的特定问题:
我来到他们身边,寻找一个比每隔一次浮动或失败,除了最伟大的。是否是否符合该标准?
是的,根据其定义,Float.POSITIVE_INFINITY
是唯一大于Float.MAX_VALUE
的Float
。然而,就它如何与数学运算相互作用而言,这是一种特殊情况。
来自javadoc:
公共静态最终浮点POSITIVE_INFINITY:
一个保持浮点型正无穷大的常数。它等于Float.intBitsToFloat返回的值(0x7f800000).
公共静态最终浮点MAX_VALUE:
一个保持浮点型最大正有限值的常数,(2-2-23)·2127.等于十六进制浮点文字0x1.ffffff eP+127f,也等于Float.intBitsToFloat(0x7f7fffff).
所以,正如你所看到的,根据字面上的定义,POSITIVE_INFINITY
比MAX_VALUE
大一位。
就其实用性而言,POSITIVE_INFINITY
提供了一个值,您可以使用该值来识别其他有问题的数学表达式。JDK源代码中使用的是1.0f / 0.0f
。这个表达式的结果是POSITIVE_INFINITY
,表明你已经超过了合理数学的上限,永远不会回来。给定两个常量POSITIVE_INFINITY
和NEGATIVE_INFINITY
,您可以检查通用表达式是否离开了有用Floats的边界,以及它是正门还是负门。
另一方面,MAX_VALUE
表示仍然可以应用正常数学运算的最大值。例如,MAX_VALUE - 1.0E32
是一个(稍微)小于MAX_VALUE
的数字。然而,POSITIVE_INFINITY - 1.0E32
仍然是POSITIVE_INFINITY
。
您可以在此处找到有关IEEE 754浮点值的更多详细信息:http://steve.hollasch.net/cgindex/coding/ieeefloat.html