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

*chevron_right*

*filter_none*

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

*chevron_right*

*filter_none*

Output:

1.41386 0.526715 0.998307

**Source:**

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

This article is contributed by **Shalki Agarwal**. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.