github pull request 討論修改 - gonum - floats.Norm()
收錄在 Ameba 的一百篇
繼 github 提交 - gonum - floats.Norm()
挺有趣的, 短短一個晚上多了近十封的討論,
overflow / underflow / diff * diff 值可能不正確的確是當初沒有想到的
https://github.com/gonum/gonum/pull/1131
查了一下 math Sqrt(p*p + q*q)
他先把 q 換成了 q/p
然後用 p * Sqrt(1 + q) 的方式來做
// Hypot returns Sqrt(p*p + q*q), taking care to avoid 12 // unnecessary overflow and underflow. 13 // 14 // Special cases are: 15 // Hypot(±Inf, q) = +Inf 16 // Hypot(p, ±Inf) = +Inf 17 // Hypot(NaN, q) = NaN 18 // Hypot(p, NaN) = NaN 19 func Hypot(p, q float64) float64 20 21 func hypot(p, q float64) float64 { 22 // special cases 23 switch { 24 case IsInf(p, 0) || IsInf(q, 0): 25 return Inf(1) 26 case IsNaN(p) || IsNaN(q): 27 return NaN() 28 } 29 p, q = Abs(p), Abs(q) 30 if p < q { 31 p, q = q, p 32 } 33 if p == 0 { 34 return 0 35 } 36 q = q / p 37 return p * Sqrt(1+q*q) 38 }
https://github.com/neojou/go-ameba/blob/master/tGOpl/ch11/floats.go
剛好藉這次機會, 重新整理 fork 出的 gonum github 中的 commits
https://github.com/neojou/gonum
首先我們先在 local 端 revert 到自己修改之前
1. 把修改的檔案 floats.go 先做備份
2. 用 git log 看看最後其他人的修改, commit hash 是 94c839...
3. git reset 94c839
這時候 git log 就看不到自己的 commit 了
4. 備份的修改檔案放進來, 可以 git diff 一下看看
5. 如之前方式 git add . ; git commit -s; 然後 git log 看看是否是所要的
6. 用 git push --force 強迫 github 雲端修改
7. 神奇的 github 原來 pull request 的地方也會跟著修改
https://github.com/gonum/gonum/pull/1131
討論中, 其他人有建議用 Blas 的 dnrm2
https://godoc.org/gonum.org/v1/gonum/blas/gonum#Implementation.Dnrm2
並有人開始另起 pull request 來做
https://github.com/gonum/gonum/pull/1132
果然多交流獲益良多
之後有空時, 再來進一步研究看看 overflow/underflow/以及 Blas dnrm2 是否比較快
留言
張貼留言