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
广告