http://blog.youkuaiyun.com/WangSanHuai2010/archive/2010/05/08/5570730.aspx
任何一个3D引擎都是通过其内部的数学模型和实现工具来展现它的力量与速度的,Quake III中使用了一个非常有意思的技巧来计算平方根倒数(inverse square root)
Carmack's 不寻常平方根倒数
第一个跳出来的便是对函数Q_rsqrt中对0x5f3759df的使用,这个数计算了一个浮点数的inverse square root,但是为什么这个函数有这样的功能呢?
观察q_math.c原本的函数:
01.float Q_rsqrt( float number )
02.{
03. long i;
04. float x2, y;
05. const float threehalfs = 1.5F;
06. x2 = number * 0.5F;
07. y = number;
08. i = * ( long * ) &y; // evil floating point bit level hacking
09. i = 0x5f3759df - ( i >> 1 );
10. y = * ( float * ) &i;
11. y = y * ( threehalfs - ( x2 * y * y ) ); // 1st