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<<"The inverse square root of the number "<<n<<" is "<<invSqRoot;
   
   return 0;
}

输出 −

The inverse square root of the number 256 is 0.0623942

更新于:2021 年 1 月 22 日

2 千次观看

开启你的 职业生涯

完成本课程并获得认证

开始学习
广告