0x5f375a86來自一個傳奇算法(求平方根倒數),此算法最早被認為是由約翰·卡馬克所發明(發明時這個值為0x5f3759df,後來由Lomont通過暴力窮舉找到這個更優值),但後來的調查顯示,該算法在這之前就於計算機圖形學的硬體與軟體領域有所套用,如SGI和3dfx就曾在產品中套用此算法。
基本介紹
- 中文名:0x5f375a86
- 外文名:0x5f375a86
- 開發:Gary Tarolli
- 領域:計算機
由來
就現在所知,此算法最早由Gary Tarolli在SGI Indigo的開發中使用。雖說隨後的相關研究也提出了一些可能的來源,但至今為止仍未能確切知曉此常數的起源。
這個引擎的原始碼里包括一個反平方倒數的算法,其速度要比標準的牛頓疊代法快上 4 倍,而其中的關鍵是一行神秘的代碼和一個莫名其妙的數字:[ i = 0x5f3759df - ( i >> 1 ); // what the fuck? ] 。沒有人知道Carmack是怎么發現這個數字的。普度大學的數學家Lomont覺得很好玩,決定要研究一下卡馬克弄出來的這個猜測值有什麼奧秘。Lomont也是個牛人,在精心研究之後從理論上也推導出一個最佳猜測值,和卡馬克的數字非常接近, 0x5f37642f。卡馬克真牛,他是外星人嗎?
傳奇並沒有在這裡結束。Lomont計算出結果以後非常滿意,於是拿自己計算出的起始值和卡馬克的神秘數字做比賽,看看誰的數字能夠更快更精確的求得平方根。結果是卡馬克贏了... 誰也不知道卡馬克是怎么找到這個數字的。最後Lomont怒了,採用暴力方法一個數字一個數字試過來,終於找到一個比卡馬克數字要好上那么一丁點的數字,雖然實際上這兩個數字所產生的結果非常近似,這個暴力得出的數字是0x5f375a86。
Lomont為此寫下一篇論文,"Fast Inverse Square Root"。