《雷神之锤3》中有个快速的求平方根倒数的方法:
float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // evil floating point bit level hacking(对浮点数的邪恶位元hack) i = 0x5f3759df - ( i >> 1 ); // what the fuck?(这他妈的是怎么回事?) y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration (第一次迭代) // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed(第二次迭代,可以删除) return y; }
具体参考wiki:https://zh.wikipedia.org/wiki/%E5%B9%B3%E6%96%B9%E6%A0%B9%E5%80%92%E6%95%B0%E9%80%9F%E7%AE%97%E6%B3%95