Tutorialspoint.dev

Fast method to calculate inverse square root of a floating point number in IEEE 754 format

Given a 32 bit floating point number x stored in IEEE 754 floating point format, find inverse square root of x, i.e., x-1/2.

A simple solution is to do floating point arithmetic. Following is example function.

#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;
}

Output:

1.41421
0.527046
1

Following is a fast and interesting method based for the same. See this for detailed explanation.

#include <iostream>
using namespace std;
  
// This is fairly tricky and complex process. For details, see 
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;
}

Output:

1.41386
0.526715
0.998307

Source:
http://en.wikipedia.org/wiki/Fast_inverse_square_root



This article is attributed to GeeksforGeeks.org

You Might Also Like

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter