Java 在不使用float.MAX_值的情况下查找浮点的最大值?

Java 在不使用float.MAX_值的情况下查找浮点的最大值?,java,floating-point,Java,Floating Point,我的问题类似于一个。据我所知,在Java中不能对浮点进行位移位。如果是这样的话,我如何计算浮点的最大值而不使用浮点。MAX_value?(2-2^-23)·2^127是浮点的最大值 float f = Float.intBitsToFloat(0x7f7fffff); System.out.println(f); float f1 = 0x1.fffffeP+127f; System.out.println(f1); 两者都打印3.4028235E38,如中所示 或者,您可以使用数学来获得相

我的问题类似于一个。据我所知,在Java中不能对浮点进行位移位。如果是这样的话,我如何计算浮点的最大值而不使用
浮点。MAX_value

(2-2^-23)·2^127是浮点的最大值

float f = Float.intBitsToFloat(0x7f7fffff);
System.out.println(f);
float f1 =  0x1.fffffeP+127f;
System.out.println(f1);
两者都打印3.4028235E38,如中所示


或者,您可以使用数学来获得相同的值。此方法不依赖于知道浮点的结构,只需知道1在有限浮点范围内,并且
Math.nextUp(float)
float.isFinite(float)
两者都起作用。通过先加倍,直到下一个无限大,然后使用nextUp,可以加快速度

public strictfp class Test {
    public static void main(String[] args) {
        float max = maxFloat(1);
        System.out.println(max);
    }


    /**
     * @param f A starting point.
     * @return Largest finite float.
     */
    static float maxFloat(float f) {
        float next = Math.nextUp(f);
        while(Float.isFinite(next)) {
            f = next;
            next = Math.nextUp(f);
        }
        return f;
    }
}
输出:


3.4028235E38

这告诉你Float.MAX\u值的确切值,你可以用某种数学来计算这个值。
math.nextDown(Float.POSITIVE\u INFINITY)
math.nextDown(1f/0f)
(如果需要的话,创建那个数字应该不难{不允许数字})这与直接使用
3.4028235e+38f
不一样吗?不确定是否允许,至少不允许,因为这个问题是基于,但这取决于OP