Быстрый обратный корень на 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;
}
Любое использование либо копирование материалов или подборки материалов сайта, элементов дизайна и оформления допускается лишь с разрешения правообладателя и только со ссылкой на источник: programador.ru

Телеграм канал: @prgrmdr
Почта для связи: vit [at] programmisty.com