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 是否比較快





留言

熱門文章