作者orpheus2401 (紳士母雞)
看板C_Chat
標題Re: [閒聊] 寫程式真的這麼邪門嗎?
時間Thu Jan 26 18:10:31 2023
※ 引述 《SkyPlus (Sky)》 之銘言:
: https://liuslog.wordpress.com/2014/06/20/0x5f3759df/
:
: 1/sqrt(x) 用神秘的數字y=0x5f3759df 帶入:
:
: y+y*(1.5-(x*y^2)/2) 後直接算出來
:
針對inverse square root
其實回覆提供的文章沒有很好的解釋神秘數字的由來
https://youtu.be/p8u_k2LIZyo
我認為這部影片講解得很清楚
簡單來說是利用浮點數bit representation與log base 2近似的特性
直接把bit representation當log處理
神秘數字則是轉換過程留下的常數
所以後面只需要一次牛頓插值法就能把誤差壓到1%
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.9.196.44 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1674727833.A.D8C.html
推 hdjj: 我看不懂,但我大受震撼 01/26 18:21
推 SPDY: 就能用 目前誤差尚能接受 之後?誰知道... 01/26 18:23
推 lovez04wj06: 1%可以了啦,省去運算太棒了 01/26 18:27
→ hdjj: 數學上有很多犠牲精度來簡化運算的方式,在程式上很有用 01/26 18:30
推 kirimaru73: wiki的寫法是,轉型做快速log2後還需要一個誤差參數 01/26 18:31
→ lbowlbow: 數學近似值計算上也有很多這種怪物運算 01/26 18:31
→ kirimaru73: 後人有找到最差的誤差參數,跟傳說的版本只差約0.5% 01/26 18:32
→ hdjj: 像圓周率我都用22/7替代 01/26 18:32
→ Erichikaunkr: 這種我是覺得不叫邪門 只是寫的人跟你知識差太多了 01/26 19:29