[C/C++] 快速求 sqrt 倒數的方法

float InvSqrt (float x) {
 float xhalf = 0.5f*x;
 int i = *(int*)&x;
 i = 0x5f3759df - (i>>1);
 x = *(float*)&i;
 x = x*(1.5f - xhalf*x*x);
 return x;
}

因為最近都在自己寫 fixed-point 的三角函數運算,所以就莫名其妙地找到這個東西了。

http://blog.ijliao.info/archives/2006/12/04/2739/

詳情可以參考上述網址內容,其實主要就是說Ryszard Sommefeldt回憶起他曾看過的這段code,這段code確實是很有趣,很令人驚訝,在這樣的實作方法下,可以比標準函式庫所提供的方法快四倍。

以下網址還有提到快速的sqrt演算法:

http://www.52rd.com/Blog/Detail_RD.Blog_Roddger_4627.html

發佈留言