2006/12/09

Note: InvSqrt

前幾天在Solidot看到這一篇新聞 有快速的InvSqrt (開根號倒數)方法
還有人大費周章去追這段Code是誰寫的,甚至有人寫了一篇Paper去分析這段Code
然後今天在這也看到了一些討論 以及有人以前用SSE指令寫的另一種加速方式

說實在話 能寫出這種Code真的是要有一點天份吧...
下面有一個神奇的數字 0x5f3759df 在Paper中有分析並解釋這數字如何求得
並且導出 0x5f375a86可以得到更好的近似值...
馬上把他加到自己的Code當中 XD
float InvSqrt(float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f375a86- (i>>1);
x = *(float*)&i;
x = x*(1.5f-xhalf*x*x);
return x;
}

0 comments:

 
Back to Top
This Site Power by JoStudio. Some Rights Reserved.