抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

​ 今天偶然看到了一个来自《Quake III》(雷神之锤III)的算法,平方根倒数速算法(Fast Inverse Square Root),不得不感叹卡神的智慧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 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, can be removed

return y;
}

(这段代码的精髓在WTF?

​ 虽然算法很精妙,还是有点过时,今天我还是应该直接写1/sqrt(x),然后交给编译器优化就行了,我应该是不如现代编译器会优化的。

评论