Re: [閒聊] 寫程式真的這麼邪門嗎?

作者: orpheus2401 (紳士母雞)   2023-01-26 18:10:31
※ 引述 《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%
作者: hdjj (hdjj)   2023-01-26 18:21:00
我看不懂,但我大受震撼
作者: SPDY (Alex)   2023-01-26 18:23:00
就能用 目前誤差尚能接受 之後?誰知道...
作者: lovez04wj06 (車前草)   2023-01-26 18:27:00
1%可以了啦,省去運算太棒了
作者: hdjj (hdjj)   2023-01-26 18:30:00
數學上有很多犠牲精度來簡化運算的方式,在程式上很有用
作者: kirimaru73 (霧丸)   2023-01-26 18:31:00
wiki的寫法是,轉型做快速log2後還需要一個誤差參數
作者: lbowlbow (沉睡的小貓)   2023-01-26 18:31:00
數學近似值計算上也有很多這種怪物運算
作者: kirimaru73 (霧丸)   2023-01-26 18:32:00
後人有找到最差的誤差參數,跟傳說的版本只差約0.5%
作者: hdjj (hdjj)   2023-01-26 18:32:00
像圓周率我都用22/7替代
作者: Erichikaunkr (兩百四)   2023-01-26 19:29:00
這種我是覺得不叫邪門 只是寫的人跟你知識差太多了

Links booklink

Contact Us: admin [ a t ] ucptt.com