Это диапазон показателей, который позволяет вам вычислять 1 / Float.MAX_VALUE и 1 / Float.MIN_NORMAL без перехода в ноль или бесконечность.Если бы был еще один отрицательный показатель и один меньший положительный показатель (со смещением 128), то 1 / Float.MIN_NORMAL был бы бесконечностью.
Показатель в плавающей точке смещен, а не простоекомплемент.
например, для double
показатель 0 равен 11-битному значению для 1023 или 0b0111111111, -1 равен 1022 или 0b0111111110, +1 равен 1024 0b10000000000.
В двойном дополнении число будет 0 равно 0b00000000000, -1 равно 0b11111111111, а +1 равно 0b00000000001
Свойство использования смещения состоит в том, что максимальное значение равно половине возможногоколичество значений.т. е. для 11 битов диапазон составляет от -1023 до 1024 вместо от -1024 до 1023.
Другое свойство заключается в том, что число можно сравнивать, просто сравнивая целочисленные значения.
т.е.
long l1 = Double.doubleToRawLongBits(d1);
long l2 = Double.doubleToRawLongBits(d2);
if (l1 > l2) // like d1 > d2
Единственная разница заключается в обработке NaN и -0.0. Подход Double.compare (double, double) основан на этом.