《雷神之鎚III》裡求平方根的函式

2021-06-20 07:38:24 字數 354 閱讀 5389

從這裡看來的。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...