題目要求複製代碼
牛頓法是經過選擇一個初始點 z 而後重複這一過程求
Sqrt(x)
的近似值:golang![]()
爲了作到這個,只須要重複計算 10 次,而且觀察不一樣的值(1,2,3,……)是如何逐步逼近結果的。 而後,修改循環條件,使得當值中止改變(或改變很是小)的時候退出循環。觀察迭代次數是否變化。結果與 [[http://golang.org/pkg/math/#Sqrt][math.Sqrt] 接近嗎?bash
提示:定義並初始化一個浮點值,向其提供一個浮點語法或使用轉換:函數
z := float64(1) z := 1.0複製代碼
package main
import (
"fmt"
"math"
)
// 自定義的開平方函數
func Sqrt(x float64) float64 {
z := 1.0
for {
tmp := z-(z*z-x)/(2*z) // 被除數這塊必須帶括號奧
fmt.Println(tmp)
if tmp == z || math.Abs(tmp-z) < 0.000000000001 {
break
}
z = tmp
}
return z
}
func main () {
// 運用自定義的求開平方函數算出結果
fmt.Println(Sqrt(2.0))
// 運用系統內置的開平方函數算出結果
fmt.Println(math.Sqrt(2.0))
}複製代碼
結果
1.5
1.4166666666666667
1.4142156862745099
1.4142135623746899
1.4142135623730951
1.414213562373095
1.4142135623730951
1.4142135623730951複製代碼