今天看到一篇Blog,点击这里看原文,分析了一段Quake III的源代码,是求平方根的,代码片断如下:
/*看 完后不得不佩服John Carmack的功力。作为图形学和3D游戏的泰山北斗,Carmack一直是我非常尊敬的大师,当初发布Doom的时候,引起了一阵下载狂潮,导致服务 器崩溃。是他天才的编程能力带领我们走入了3D世界,由他领导的只有13名员工的id software,公司楼下每天停靠着13辆法拉利跑车的故事曾经在游戏界传为经典。而且他为人非常谦虚,从来不居功自傲,还把源代码公开,非常值得我们 学习。
================
SquareRootFloat
================
*/
float SquareRootFloat(float number) {
long i;
float x, y;
const float f = 1.5F;
x = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 ); //注意这一行
y = * ( float * ) &i;
y = y * ( f - ( x * y * y ) );
y = y * ( f - ( x * y * y ) );
return number * y;
}
学过数值分析的朋友应该能看懂
Carmack现在全身心投入建造他的个人火箭,期待着早日看到他飞向太空。