C ++中的快速反平方根

在这个问题上,我们得到一个整数x。我们的任务是计算32位浮点数的快速反平方根()  

查找数字的平方根的算法在编程中非常有用,例如视频游戏中的矢量归一化,  3D图形等。 

算法: 

步骤1: 该算法将浮点值转换为整数。 

步骤2: 操作整数值并返回平方根倒数的近似值。

步骤3: 使用步骤1中使用的相同方法,将整数值转换回浮点数。

步骤4: 使用牛顿法进行近似以提高精度。 

演示算法工作的程序: 

示例

#include<iostream>
using namespace std;

float calcInvSqRoot( float n ) {
   
   const float threehalfs = 1.5F;
   float y = n;
   
   long i = * ( long * ) &y;

   i = 0x5f3759df - ( i >> 1 );
   y = * ( float * ) &i;
   
   y = y * ( threehalfs - ( (n * 0.5F) * y * y ) );
   
   return y;
}

int main(){
   
   int n = 256;
   float invSqRoot = calcInvSqRoot(n);
   cout<<"数的平方根 "<<n<<" is "<<invSqRoot;
   
   return 0;
}

输出-

数的平方根 256 is 0.0623942