Быстрый обратный корень на Java

Fast Inverse Square Root, он же Fast InvSqrt() или 0x5f3759d5 – способ вычисления обратного квадратного корня из числа = 1/sqrt(x). Изобретен еще в 90-х годах.
Если верить википедии, то этот алгоритм использовался в Quake III.
Главная фишка метода в использовании “магической” константы – 0x5f3759d5, с помощью которой можно получить первое приближенное значение.
Затем обычным методом Ньютона получаем улучшенное приближение.
Подробнее можно прочитать здесь и здесь.

public static float invSqrt(float x) {
    float xhalf = 0.5f*x; // x пополам
    int i = Float.floatToIntBits(x); // битовое представление числа. 
    i = 0x5f3759d5 - (i >> 1); //  отрицательные x не волнуют, т.к. из отриц. корень брать нельзя
    x = Float.intBitsToFloat(i); // вот оно, первое прибл. значение
    x = x*(1.5f - xhalf*x*x);
     // x = x*(1.5f - xhalf*x*x);
    return x;
}

Об авторе
Более 20 лет в разработке ПО, специализируюсь на Java. Опыт в создании масштабируемых и высокопроизводительных систем, разработке мобильных приложений. Подробнее об авторе и правилах использования контента – на странице @author.