Float.POSITIVE_INFINITY 和 Float.MAX_VALUE 有什么区别?



Float.POSITIVE_INFINITYFloat.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_VALUEFloat。然而,就它如何与数学运算相互作用而言,这是一种特殊情况。

来自javadoc:

公共静态最终浮点POSITIVE_INFINITY:

一个保持浮点型正无穷大的常数。它等于Float.intBitsToFloat返回的值(0x7f800000).

公共静态最终浮点MAX_VALUE:

一个保持浮点型最大正有限值的常数,(2-2-23)·2127.等于十六进制浮点文字0x1.ffffff eP+127f,也等于Float.intBitsToFloat(0x7f7fffff).

所以,正如你所看到的,根据字面上的定义,POSITIVE_INFINITYMAX_VALUE大一位。

就其实用性而言,POSITIVE_INFINITY提供了一个值,您可以使用该值来识别其他有问题的数学表达式。JDK源代码中使用的是1.0f / 0.0f。这个表达式的结果是POSITIVE_INFINITY,表明你已经超过了合理数学的上限,永远不会回来。给定两个常量POSITIVE_INFINITYNEGATIVE_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

最新更新