Найти максимальное значение с плавающей точкой без использования Float.MAX_VALUE? - PullRequest
0 голосов
/ 05 марта 2020

Мой вопрос похож на этот один. Насколько я могу судить, вы не можете сдвинуть поплавок в Java. Если бы это было так, как бы я рассчитал максимальное значение с плавающей запятой без использования Float.MAX_VALUE?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Грубая сила. Этот метод не зависит от знания структуры числа с плавающей запятой, только то, что 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

0 голосов
/ 05 марта 2020

(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

Или вы можете поиграть, используя математику, чтобы получить то же значение

...