Рубрики

Быстрый метод для вычисления обратного корня квадратного из числа с плавающей запятой в формате IEEE 754

Учитывая 32-разрядное число с плавающей запятой x, сохраненное в формате IEEE 754 , найдите обратный корень квадратный из x, то есть x -1/2 .

Простое решение — сделать арифметику с плавающей точкой. Ниже приведен пример функции.

#include <iostream>
#include <cmath>

using namespace std;

  

float InverseSquareRoot(float x)

{

    return 1/sqrt(x);

}

  

int main()

{

    cout << InverseSquareRoot(0.5) << endl;

    cout << InverseSquareRoot(3.6) << endl;

    cout << InverseSquareRoot(1.0) << endl;

    return 0;

}

Выход:

1.41421
0.527046
1

Ниже приведен быстрый и интересный метод, основанный на том же. Смотрите это для подробного объяснения.

#include <iostream>

using namespace std;

  
// Это довольно сложный и сложный процесс. Подробнее см.
// http://en.wikipedia.org/wiki/Fast_inverse_square_root

float InverseSquareRoot(float x)

{

    float xhalf = 0.5f*x;

    int i = *(int*)&x;

    i = 0x5f3759d5 - (i >> 1);

    x = *(float*)&i;

    x = x*(1.5f - xhalf*x*x);

    return x;

}

  

int main()

{

    cout << InverseSquareRoot(0.5) << endl;

    cout << InverseSquareRoot(3.6) << endl;

    cout << InverseSquareRoot(1.0) << endl;

    return 0;

}

Выход:

1.41386
0.526715
0.998307

Источник:
http://en.wikipedia.org/wiki/Fast_inverse_square_root

Эта статья предоставлена Шалки Агарвал . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Быстрый метод для вычисления обратного корня квадратного из числа с плавающей запятой в формате IEEE 754

0.00 (0%) 0 votes