從這裡看來的。quakeiii自然就是傳奇高手卡馬克的傑作之一了。
在有的cpu上,這個函式比普通的(float)(1.0/sqrt(x)快4倍!
快的原因之一是用了乙個神秘常數,0x5f3759df。
普渡大學的chris lomont在這篇**裡討論了這個常數的意義,嘗試用嚴格的方法推導出這個常數(他還提到有人認為這個函式是在nvidia工作過的gary tarolli寫的)。
chris推出的常數是0x5f37642f,和q_rsqrt裡的稍有不同,而且實際表現也稍有不如。
卡馬克到底怎麼推出這個常數的就是謎了。這種高手不寫書,實在可惜。
float q_rsqrt( float number )
《雷神之鎚III》裡求平方根的函式
更新 有人問這個演算法的原理。其實原理很簡單。就是牛頓迭代求根。卡馬克演算法牛x的地方就是他選了乙個常數作為起始值。而這個起始值讓他只用一次迭代就夠了。從這裡看來的。quakeiii自然就是 傳奇高手卡馬克的傑作之一了。在有的cpu上,這個函式比普通的 float 1.0 sqrt x 快4倍!快的...
《雷神之鎚III》裡求平方根的函式
更新 有人問這個演算法的原理。其實原理很簡單。就是牛頓迭代求根。卡馬克演算法牛x的地方就是他選了乙個常數作為起始值。而這個起始值讓他只用一次迭代就夠了。從 這裡看來的。quakeiii自然就是 傳奇高手卡馬克的傑作之一了。在有的cpu上,這個函式比普通的 float 1.0 sqrt x 快4倍!快...
求平方根函式
加一點注釋 unsigned short work unsigned int n 要進行開平方運算的物件 unsigned int ans 0 開平方運算的結果 unsigned int square 0 記錄中間產生的平方值 unsigned short r 0 程式最終的返回結果 for int...