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