doushijiao0679 2016-06-09 18:35
浏览 39
已采纳

如何计算Go的迭代次数?

So I have this small piece of code that iterates as long as needed until the difference between the value sought after is abysmal. I want to count and print the number of iterations after the code is done running and preferably in my main function (along with printing everything else I need).

Edit: Okay, I've managed to do it like this. I wonder if there's an easier way of counting the iterations and passing them to the output function.

func sqrt(x float64) (float64, int) {
    k := 1
    z := 1.0
    q := (z*z - x)/(2*z)
    for {
      if  math.Abs(-q) > 0.001 {
      z -= q
      q = (z*z - x)/(2*z)
      k += 1
      } else {
        break
      }
    }
    return z, k
}

func main() {
    k := 1
    z := 1.0
    z, k = sqrt(9)
    fmt.Println("Your sqrt = ", z)
    fmt.Println("Math Sqrt = ",math.Sqrt(9))
    fmt.Println("Iterations: ", k)
}
  • 写回答

2条回答 默认 最新

  • douxianliu6756 2016-06-09 18:53
    关注

    You can return your float value and an int (as the number of iterations). I made very minor revision to your example to demonstrate.

    func sqrt(x float64) (float64, int) {
    
        z := 1.0
        i := 1
        q := (z*z - x) / (2 * z)
        for {
            if math.Abs(-q) > 0.01 {
                i++
                z -= q
                q = (z*z - x) / (2 * z)
            } else {
                break
            }
        }
        return z, i
    }
    
    func main() {
        f, i := sqrt(9)
        fmt.Printf("result: %f iterations: %d
    ", f, i)
        fmt.Println(math.Sqrt(9))
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line