快速平方根算法
今天在solidot上看到了这个极其巧妙的算法,能够计算平方根倒数,即1/sqrt(x),据称是Quake 3中的代码。简单测试了一下,速度要比math.h提供的sqrt函数快上一倍左右。
float InvSqrt(float x){
float xhalf=0.5f*x;
long i=*(long*)&x;
i=0x5f3759df - (i>>1);
x=*(float *)&i;
x=x*(1.5f-xhalf*x*x);
return x;
}
看完后觉得十分巧妙,于是开始读Chris Lomont于2003年撰写的一篇分析论文, 看到一半的时候发现fcicq比我捷足先登, 并给出了一个中文版的算法分析页面。 该网页的作者自称看完GameDev.net的算法后觉得自己火星了,看来我还真是从冥王星来的,哈雷彗星也未可知。