最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

牛頓法求平方根

原理

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

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

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

實現(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("庫函數(shù)求平方根:Sqrt(10) = ", math.Sqrt(10))
}

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

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

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

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

輸入: 4

輸出: 2

輸入: 8

輸出: 2

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

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

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

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

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

計算平方根,其實就是計算

x^2 =n

的解

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

首先取x0,如果x0不是解,做一個經(jīng)過(x0,f(x0))這個點的切線,與x軸的交點為x1。

同樣的道理,如果x1不是解,做一個經(jīng)過(x1,f(x1))這個點的切線,與x軸的交點為x2。

以此類推。

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

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

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

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

繼續(xù)化簡

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

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

x = (x + n/x) / 2

那么代碼:

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

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

相關文章

  • Golang 實現(xiàn)Socket服務端和客戶端使用TCP協(xié)議通訊

    Golang 實現(xiàn)Socket服務端和客戶端使用TCP協(xié)議通訊

    這篇文章主要介紹了Golang 實現(xiàn)Socket服務端和客戶端使用TCP協(xié)議通訊,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 使用Go語言開發(fā)一個高并發(fā)系統(tǒng)

    使用Go語言開發(fā)一個高并發(fā)系統(tǒng)

    高并發(fā)系統(tǒng)是指能同時支持眾多用戶請求,處理大量并行計算的系統(tǒng),這篇文章主要為大家詳細介紹了如何使用Go語言開發(fā)一個高并發(fā)系統(tǒng),感興趣的小伙伴可以了解下
    2023-11-11
  • goland中使用leetcode插件實現(xiàn)

    goland中使用leetcode插件實現(xiàn)

    本文主要介紹了goland中使用leetcode插件實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • golang中struct和[]byte的相互轉(zhuǎn)換示例

    golang中struct和[]byte的相互轉(zhuǎn)換示例

    這篇文章主要介紹了golang中struct和[]byte的相互轉(zhuǎn)換示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 用Go+Redis實現(xiàn)分布式鎖的示例代碼

    用Go+Redis實現(xiàn)分布式鎖的示例代碼

    在分布式的業(yè)務中 , 如果有的共享資源需要安全的被訪問和處理 , 那就需要分布式鎖,本文主要介紹了用Go+Redis實現(xiàn)分布式鎖的示例代碼,感興趣的可以了解一下
    2021-12-12
  • go-zero源碼閱讀之布隆過濾器實現(xiàn)代碼

    go-zero源碼閱讀之布隆過濾器實現(xiàn)代碼

    布隆過濾器可以用于檢索一個元素是否在一個集合中。它的優(yōu)點是空間效率和查詢時間都比一般的算法要好的多,缺點是有一定的誤識別率和刪除困難,這篇文章主要介紹了go-zero源碼閱讀-布隆過濾器,需要的朋友可以參考下
    2023-02-02
  • golang文件讀取-按指定BUFF大小讀取方式

    golang文件讀取-按指定BUFF大小讀取方式

    這篇文章主要介紹了golang文件讀取-按指定BUFF大小讀取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 基于golang時間轉(zhuǎn)換的問題

    基于golang時間轉(zhuǎn)換的問題

    下面小編就為大家?guī)硪黄趃olang時間轉(zhuǎn)換的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Golang map實現(xiàn)原理淺析

    Golang map實現(xiàn)原理淺析

    Go中Map是一個KV對集合,下面這篇文章主要給大家介紹了關于Golang中map探究的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-12-12
  • golang使用OpenTelemetry實現(xiàn)跨服務全鏈路追蹤詳解

    golang使用OpenTelemetry實現(xiàn)跨服務全鏈路追蹤詳解

    這篇文章主要為大家介紹了golang使用OpenTelemetry實現(xiàn)跨服務全鏈路追蹤詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09

最新評論

慈利县| 裕民县| 尖扎县| 瑞金市| 桑植县| 峨山| 中宁县| 秦皇岛市| 太谷县| 凤山市| 犍为县| 靖江市| 岢岚县| 平潭县| 会东县| 北票市| 钟祥市| 卢龙县| 罗平县| 乌兰浩特市| 古蔺县| 林甸县| 华坪县| 海林市| 辽宁省| 金溪县| 宁远县| 乌苏市| 呼玛县| 镶黄旗| 赤壁市| 谢通门县| 临猗县| 新乡县| 澄江县| 长葛市| 三原县| 西华县| 尚志市| 梨树县| 留坝县|