go 迴圈與函式

2022-02-09 17:29:47 字數 1445 閱讀 6133

為了練習函式與迴圈,我們來實現乙個平方根函式:用牛頓法實現平方根函式。

計算機通常使用迴圈來計算 x 的平方根。從某個猜測的值 z 開始,我們可以根據 z² 與 x 的近似度來調整 z,產生乙個更好的猜測:

z -= (z*z - x) / (2*z)
重複調整的過程,猜測的結果會越來越精確,得到的答案也會盡可能接近實際的平方根。

在提供的func sqrt中實現它。無論輸入是什麼,對 z 的乙個恰當的猜測為 1。 要開始,請重複計算 10 次並隨之列印每次的 z 值。觀察對於不同的值 x(1、2、3 ...), 你得到的答案是如何逼近結果的,猜測提公升的速度有多快。

z := 1.0

z := float64(1)

然後,修改迴圈條件,使得當值停止改變(或改變非常小)的時候退出迴圈。觀察迭代次數大於還是小於 10。 嘗試改變 z 的初始猜測,如 x 或 x/2。你的函式結果與標準庫中的 math.sqrt 接近嗎?

(*注:* 如果你對該演算法的細節感興趣,上面的 z² − x 是 z² 到它所要到達的值(即 x)的距離, 除以的 2z 為 z² 的導數,我們通過 z² 的變化速度來改變 z 的調整量。 這種通用方法叫做牛頓法。 它對很多函式,特別是平方根而言非常有效。)

package main

import (

"fmt"

"math"

)func sqrt(x float64) float64

return z

}func main()

迭代 1 1.000000 - 1.250000 = -0.250000

迭代 2 1.250000 - 1.359375 = -0.109375

迭代 3 1.359375 - 1.397400 = -0.038025

迭代 4 1.397400 - 1.409218 = -0.011818

迭代 5 1.409218 - 1.412744 = -0.003526

迭代 6 1.412744 - 1.413783 = -0.001038

迭代 7 1.413783 - 1.414087 = -0.000305

迭代 8 1.414087 - 1.414177 = -0.000089

迭代 9 1.414177 - 1.414203 = -0.000026

迭代 10 1.414203 - 1.414210 = -0.000008

迭代 11 1.414210 - 1.414213 = -0.000002

迭代 12 1.414213 - 1.414213 = -0.000001

迭代 13 1.414213 - 1.414213 = -0.000000

迭代 14 1.414213 - 1.414214 = -0.000000

1.4142135390239412

參考 

Go指南練習 迴圈與函式

源位址 為了練習函式與迴圈,我們來實現乙個平方根函式 用牛頓法實現平方根函式。計算機通常使用迴圈來計算 x 的平方根。從某個猜測的值 z 開始,我們可以根據 z 與 x 的近似度來調整 z,產生乙個更好的猜測 z z z x 2 z 重複調整的過程,猜測的結果會越來越精確,得到的答案也會盡可能接近實...

Go指南練習 迴圈與函式

源位址 為了練習函式與迴圈,我們來實現乙個平方根函式 用牛頓法實現平方根函式。計算機通常使用迴圈來計算 x 的平方根。從某個猜測的值 z 開始,我們可以根據 z 與 x 的近似度來調整 z,產生乙個更好的猜測 z z z x 2 z 重複調整的過程,猜測的結果會越來越精確,得到的答案也會盡可能接近實...

Go 分支與迴圈

go 語言的分支迴圈語句選擇性較少,迴圈語句它只有 for 迴圈,平時我們在其它語言用的 while 語句 do while 語句 loop 語句它是沒有的。分支語句只有 if 和 switch,也沒有三元操作符。if else 語句 package main import fmt func mai...