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.
CPP
#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;
}
|
Java
import java.io.*;
class GFG {
static float InverseSquareRoot( float x)
{
return 1 / ( float )Math.sqrt(x);
}
public static void main(String[] args)
{
System.out.println(InverseSquareRoot( 0 .5f));
System.out.println(InverseSquareRoot( 3 .6f));
System.out.println(InverseSquareRoot( 1 .0f));
}
}
|
Python3
from math import ceil, sqrt
def InverseSquareRoot(x) :
return 1 / sqrt(x)
print (InverseSquareRoot( 0.5 ) )
print (InverseSquareRoot( 3.6 ) )
print (InverseSquareRoot( 1.0 ) )
|
C#
using System;
class GFG {
static float InverseSquareRoot( float x)
{
return 1 / ( float )Math.Sqrt(x);
}
public static void Main()
{
Console.WriteLine(InverseSquareRoot(0.5f));
Console.WriteLine(InverseSquareRoot(3.6f));
Console.WriteLine(InverseSquareRoot(1.0f));
}
}
|
Javascript
<script>
function InverseSquareRoot(x)
{
return 1 / Math.sqrt(x);
}
document.write(InverseSquareRoot(0.5) + "<br/>" );
document.write(InverseSquareRoot(3.6) + "<br/>" );
document.write(InverseSquareRoot(1.0) + "<br/>" );
</script>
|
Output:
1.41421
0.527046
1
Following is a fast and interesting method based for the same. See this for detailed explanation.
C
#include <iostream>
using namespace std;
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 contributed by Shalki Agarwal. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above