Golang用牛頓法實現開方函數

題目要求複製代碼

牛頓法是經過選擇一個初始點 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複製代碼
相關文章
相關標籤/搜索