欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言實(shí)現(xiàn)牛頓法求平方根函數(shù)的案例

 更新時(shí)間:2020年12月17日 09:41:39   作者:Valars  
這篇文章主要介紹了Go語(yǔ)言實(shí)現(xiàn)牛頓法求平方根函數(shù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

牛頓法求平方根

原理

計(jì)算機(jī)常用循環(huán)來(lái)計(jì)算F的平方根.從某個(gè)猜測(cè)的x值開(kāi)始,根據(jù)x^2與F的近似度來(lái)調(diào)整x,產(chǎn)生一個(gè)更好的猜測(cè):

x -= (x * x - F) / (2 * x)

重復(fù)調(diào)整過(guò)程,猜測(cè)的結(jié)果會(huì)越來(lái)越精確,得到的答案越發(fā)的趨近實(shí)際的平方根. 我們可以設(shè)定精度,控制計(jì)算結(jié)果與實(shí)際結(jié)果的偏差.

實(shí)現(xiàn)

package main
import (
 "fmt"
 "math"
)
func Sqrt(F float64) float64 {
 x := 1.0
 for math.Abs(x * x - F) > 1e-10 {
 x -= (x * x - F) / (2 * x);
 }
 return x
}
func main() {
 fmt.Println("牛頓法求平方根:Sqrt(10) = ", Sqrt(10))
 fmt.Println("庫(kù)函數(shù)求平方根:Sqrt(10) = ", math.Sqrt(10))
}

補(bǔ)充知識(shí):X的平方根的golang實(shí)現(xiàn)

實(shí)現(xiàn) int sqrt(int x) 函數(shù)。

計(jì)算并返回 x 的平方根,其中 x 是非負(fù)整數(shù)。

由于返回類(lèi)型是整數(shù),結(jié)果只保留整數(shù)的部分,小數(shù)部分將被舍去。

輸入: 4

輸出: 2

輸入: 8

輸出: 2

說(shuō)明: 8 的平方根是 2.82842...,由于返回類(lèi)型是整數(shù),小數(shù)部分將被舍去。

首先遇到這種題目肯定要想到使用內(nèi)置得api來(lái)解答:

//使用api來(lái)求解
func mySqrt(x int) int {
  f := float64(x)
  ff := math.Sqrt(f)
  return int(ff)
}

其次我們可以使用牛頓法求平方根:

牛頓法:(以本題為例子)

計(jì)算平方根,其實(shí)就是計(jì)算

x^2 =n

的解

令f(x)=x2-n,相當(dāng)于求解f(x)=0的解,如上圖所示。

首先取x0,如果x0不是解,做一個(gè)經(jīng)過(guò)(x0,f(x0))這個(gè)點(diǎn)的切線(xiàn),與x軸的交點(diǎn)為x1。

同樣的道理,如果x1不是解,做一個(gè)經(jīng)過(guò)(x1,f(x1))這個(gè)點(diǎn)的切線(xiàn),與x軸的交點(diǎn)為x2。

以此類(lèi)推。

以這樣的方式得到的xi會(huì)無(wú)限趨近于f(x)=0的解。

判斷xi是否是f(x)=0的解有兩種方法:

一是直接計(jì)算f(xi)的值判斷是否為0,二是判斷前后兩個(gè)解xi和xi-1是否無(wú)限接近。

經(jīng)過(guò)(xi, f(xi))這個(gè)點(diǎn)的切線(xiàn)方程為f(x) = f(xi) + f'(xi)(x - xi),其中f'(x)為f(x)的導(dǎo)數(shù),本題中為2x。令切線(xiàn)方程等于0,即可求出xi+1=xi - f(xi) / f'(xi)。

繼續(xù)化簡(jiǎn)

xi+1=xi - (xi2 - n) / (2xi) = xi - xi / 2 + n / (2xi) = xi / 2 + n / 2xi = (xi + n/xi) / 2

迭代公式就已經(jīng)出來(lái)了

x = (x + n/x) / 2

那么代碼:

//使用牛頓法求平方根
func mySqrt1(x int) int {
  res := x
  //牛頓法求平方根
  for res*res > x {
    res = (res + x/res) / 2
  }
  return res
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • golang?Gorm框架講解

    golang?Gorm框架講解

    gorm是一個(gè)使用Go語(yǔ)言編寫(xiě)的ORM框架,這篇文章主要介紹了golang?Gorm框架,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Go語(yǔ)言中Seeker接口的用法詳解

    Go語(yǔ)言中Seeker接口的用法詳解

    Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的io包提供了一系列接口,用于處理各種I/O操作,其中Seeker接口在處理大文件或需要隨機(jī)訪(fǎng)問(wèn)的場(chǎng)景中非常有用,本文將結(jié)合具體案例,詳細(xì)介紹Go語(yǔ)言中io包的Seeker接口的用法,需要的朋友可以參考下
    2024-10-10
  • go語(yǔ)言中GOPATH GOROOT的作用和設(shè)置方式

    go語(yǔ)言中GOPATH GOROOT的作用和設(shè)置方式

    這篇文章主要介紹了go語(yǔ)言中GOPATH GOROOT的作用和設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • GO語(yǔ)言中ni,零值與空結(jié)構(gòu)體的使用

    GO語(yǔ)言中ni,零值與空結(jié)構(gòu)體的使用

    Go語(yǔ)言為Java開(kāi)發(fā)者帶來(lái)了一些新概念,如零值、nil和空結(jié)構(gòu)體,理解這些概念有助于Go語(yǔ)言的學(xué)習(xí)和應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • 一起聊聊Go語(yǔ)言中的語(yǔ)法糖的使用

    一起聊聊Go語(yǔ)言中的語(yǔ)法糖的使用

    語(yǔ)法糖通常是用來(lái)簡(jiǎn)化代碼編寫(xiě)的,特性就是使用語(yǔ)法糖前后編譯的結(jié)果是相同的。這篇文章主要就來(lái)和大家一起聊聊Go語(yǔ)言中的語(yǔ)法糖的實(shí)現(xiàn)
    2022-07-07
  • Goland和IDEA換行符的設(shè)置方式

    Goland和IDEA換行符的設(shè)置方式

    這篇文章主要介紹了Goland和IDEA換行符的設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • golang指數(shù)運(yùn)算操作

    golang指數(shù)運(yùn)算操作

    這篇文章主要介紹了golang指數(shù)運(yùn)算操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • go語(yǔ)言代碼生成器code?generator使用示例介紹

    go語(yǔ)言代碼生成器code?generator使用示例介紹

    這篇文章主要為大家介紹了go語(yǔ)言代碼生成器code?generator的使用簡(jiǎn)單介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • golang通過(guò)cgo調(diào)用C++庫(kù)源碼示例

    golang通過(guò)cgo調(diào)用C++庫(kù)源碼示例

    這篇文章主要給大家介紹了關(guān)于golang通過(guò)cgo調(diào)用C++庫(kù)的相關(guān)資料,CGO是GO語(yǔ)言里面的一個(gè)特性,CGO屬于GOLANG的高級(jí)用法,主要是通過(guò)使用GOLANG調(diào)用CLANG實(shí)現(xiàn)的程序庫(kù),需要的朋友可以參考下
    2024-02-02
  • Goland 2020或2019軟件版本去掉a...或fmt...提示的方法

    Goland 2020或2019軟件版本去掉a...或fmt...提示的方法

    這篇文章主要介紹了Goland 2020或2019軟件版本去掉a...或fmt...提示的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論