編程筆記 Golang基礎 045 math包

編程筆記 Golang基礎 045 math包

  • 一、math包
    • 主要功能
    • 常量:
    • 函數:
      • 數值運算:
      • 三角函數:
      • 對數函數:
      • 隨機數相關:
  • 二、示例代碼一
  • 三、示例代碼二
  • 小結

Go 語言的標準庫 math 提供了一系列基礎數學函數和常量,用于進行科學計算、幾何計算和其他數學相關的操作。以下是一些 math 包中的核心功能和函數。

一、math包

主要功能

Go 語言的標準庫 math 包主要用于解決各種基礎和高級數學運算問題,它提供了大量數學函數和常量,服務于編程中涉及的數學需求。math 包主要解決的問題包括但不限于以下幾個方面:

  1. 三角函數計算

    • 正弦(Sin)、余弦(Cos)、正切(Tan)、反正弦(Asin)、反余弦(Acos)、反正切(Atan)以及相應的雙曲函數。
  2. 指數和對數運算

    • 自然對數(Log,以 e 為底),常用對數(Log10,以 10 為底),指數函數(Exp),冪運算(Pow),以及針對特定場景優化的 Log1p(用于計算 log(1+x) 避免精度損失)。
  3. 超越函數

    • 冪運算(如平方根Sqrt)、伽馬函數(Gamma)、誤差函數(Erf)、互補誤差函數(Erfc)以及其他特殊函數如 Bessel 函數(J0, J1 等)。
  4. 浮點數操作

    • 浮點數的絕對值(Abs)、取整(Floor, Ceil, Trunc)、四舍五入(Round)、分解為分數和指數形式(Frexp 和 Ldexp)、判斷是否為無窮大或NaN(IsInf, IsNaN)以及處理浮點數邊界問題(如最小非零正浮點數)。
  5. 幾何計算

    • 求直角三角形邊長關系(如 Hypot 函數計算歐幾里得范數),以及模運算(Mod)。
  6. 數學常數

    • 提供了常用的數學常數,如圓周率 Pi 和自然對數的底數 e。
  7. 比較和取值限制

    • 提供了 Min 和 Max 函數來獲取兩個數之間的較大或較小值。

常量:

  • math.MaxFloat64math.SmallestNonzeroFloat64 分別表示 IEEE-754 浮點數的最大值和最小非零正值。
  • math.Pi 表示圓周率 π。
  • math.E 表示自然對數的底數 e。

示例代碼

 fmt.Printf("float64的最大值是:%.f\n", math.MaxFloat64)fmt.Printf("float64的最小值是:%.f\n", math.SmallestNonzeroFloat64)fmt.Printf("float32的最大值是:%.f\n", math.MaxFloat32)fmt.Printf("float32的最小值是:%.f\n", math.SmallestNonzeroFloat32)fmt.Printf("Int8的最大值是:%d\n", math.MaxInt8)fmt.Printf("Int8的最小值是:%d\n", math.MinInt8)fmt.Printf("Uint8的最大值是:%d\n", math.MaxUint8)fmt.Printf("Int16的最大值是:%d\n", math.MaxInt16)fmt.Printf("Int16的最小值是:%d\n", math.MinInt16)fmt.Printf("Uint16的最大值是:%d\n", math.MaxUint16)fmt.Printf("Int32的最大值是:%d\n", math.MaxInt32)fmt.Printf("Int32的最小值是:%d\n", math.MinInt32)fmt.Printf("Uint32的最大值是:%d\n", math.MaxUint32)fmt.Printf("Int64的最大值是:%d\n", math.MaxInt64)fmt.Printf("Int64的最小值是:%d\n", math.MinInt64)fmt.Printf("圓周率默認為:%.200f\n", math.Pi)

運行結果

float64的最大值是:179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
float64的最小值是:0
float32的最大值是:340282346638528859811704183484516925440
float32的最小值是:0
Int8的最大值是:127
Int8的最小值是:-128
Uint8的最大值是:255
Int16的最大值是:32767
Int16的最小值是:-32768
Uint16的最大值是:65535
Int32的最大值是:2147483647
Int32的最小值是:-2147483648
Uint32的最大值是:4294967295
Int64的最大值是:9223372036854775807
Int64的最小值是:-9223372036854775808
圓周率默認為:3.14159265358979311599796346854418516159057617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

函數:

數值運算:

  • math.Abs(x float64) float64 返回 x 的絕對值。
  • math.Ceil(x float64) float64 返回大于或等于 x 的最小整數。
  • math.Floor(x float64) float64 返回小于或等于 x 的最大整數。
  • math.Pow(x, y float64) float64 返回 xy 次方。
  • math.Sqrt(x float64) float64 返回 x 的平方根。
  • math.Cbrt(x float64) float64 返回 x 的立方根。

三角函數:

  • math.Sin(x float64) float64 返回 x 弧度的正弦值。
  • math.Cos(x float64) float64 返回 x 弧度的余弦值。
  • math.Tan(x float64) float64 返回 x 弧度的正切值。
  • 還有它們的反函數如 math.Asin, math.Acos, math.Atan,以及雙角形式如 math.Sinh, math.Cosh, math.Tanh 等。

對數函數:

  • math.Log(x float64) float64 返回 x 的自然對數(以 e 為底)。
  • math.Log10(x float64) float64 返回 x 的以10為底的對數。
  • math.Exp(x float64) float64 返回 ex 次方。

隨機數相關:

雖然 math 包本身不直接提供隨機數生成器,但 math/rand 子包提供了生成偽隨機數的功能:

  • rand.Intn(n int) int 返回一個在 [0, n) 范圍內的隨機整數。
  • rand.Float64() float64 返回 [0.0, 1.0) 范圍內的隨機浮點數。

要使用這些函數,你需要導入對應的包:

import ("fmt""math"
)func main() {// 示例用法val := math.Sin(math.Pi / 2)fmt.Println(val)
}

此外,math 包還包含其他高級數學函數,比如求最大公約數 (GCD)、最小二乘解 (Sqrt)、反正切函數的完整范圍版本 (Atan2) 等。通過查閱官方文檔可以獲得更完整的函數列表和詳細說明。

二、示例代碼一

package mainimport ("fmt""math"
)func main() {/*取絕對值,函數簽名如下:func Abs(x float64) float64*/fmt.Printf("[-3.14]的絕對值為:[%.2f]\n", math.Abs(-3.14))/*取x的y次方,函數簽名如下:func Pow(x, y float64) float64*/fmt.Printf("[2]的16次方為:[%.f]\n", math.Pow(2, 16))/*取余數,函數簽名如下:func Pow10(n int) float64*/fmt.Printf("10的[3]次方為:[%.f]\n", math.Pow10(3))/*取x的開平方,函數簽名如下:func Sqrt(x float64) float64*/fmt.Printf("[64]的開平方為:[%.f]\n", math.Sqrt(64))/*取x的開立方,函數簽名如下:func Cbrt(x float64) float64*/fmt.Printf("[27]的開立方為:[%.f]\n", math.Cbrt(27))/*向上取整,函數簽名如下:func Ceil(x float64) float64*/fmt.Printf("[3.14]向上取整為:[%.f]\n", math.Ceil(3.14))/*向下取整,函數簽名如下:func Floor(x float64) float64*/fmt.Printf("[8.75]向下取整為:[%.f]\n", math.Floor(8.75))/*取余數,函數簽名如下:func Floor(x float64) float64*/fmt.Printf("[10/3]的余數為:[%.f]\n", math.Mod(10, 3))/*分別取整數和小數部分,函數簽名如下:func Modf(f float64) (int float64, frac float64)*/Integer, Decimal := math.Modf(3.14159265358979)fmt.Printf("[3.14159265358979]的整數部分為:[%.f],小數部分為:[%.14f]\n", Integer, Decimal)
}

三、示例代碼二

生成隨機數。

package mainimport ("fmt""math/rand""time"
)func init() {//以時間作為初始化種子rand.Seed(time.Now().UnixNano())
}
func main() {for i := 0; i < 10; i++ {a := rand.Int()fmt.Println(a)}fmt.Println("------------")for i := 0; i < 10; i++ {a := rand.Intn(100)fmt.Println(a)}fmt.Println("------------")for i := 0; i < 10; i++ {a := rand.Float32()fmt.Println(a)}
}

小結

通過這些函數和常量的支持,math 包使得 Go 程序員能夠方便地在程序中進行精確的數學計算和分析,覆蓋了大多數實際編程中可能遇到的基礎數學需求。同時,math 包也是構建更復雜算法和數學應用的基礎模塊。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713756.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713756.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713756.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EasyRecovery數據恢復軟件2024最新版包括Windows和Mac

EasyRecovery數據恢復軟件適用于多種環境和使用場景。首先&#xff0c;它適用于各種操作系統&#xff0c;包括Windows和Mac。無論用戶使用的是哪種操作系統&#xff0c;都可以使用該軟件進行數據恢復。 其次&#xff0c;EasyRecovery支持從各種存儲設備和媒介中恢復數據&#…

自定義BeanNameGenerator生成規則

通過點進ComponentScan注解進入源碼可以看到 追隨BeanNameGenerator進入源碼可以看到該類是個借口且只有一個方法 點擊上面黑色箭頭出現兩個實現方法 點擊第一個方法 進入determineBeanNameFromAnnotation方法中 通過上訴自定義一個生成beanName方法 先創建一個CustomeBeanN…

使用結構體和類在Unity中管理IMU數據

使用結構體和類在Unity中管理IMU數據 IMU數據簡介使用結構體管理IMU數據結構體的優點結構體的使用場景 使用類管理IMU數據類的優點類的使用場景 結構體(struct) vs 類(class)為什么考慮使用結構體 結論 在Unity開發中&#xff0c;合理地選擇數據結構對于確保游戲和應用的性能和…

60 個 CSS 選擇器,一網打盡!

CSS 選擇器用于選擇 HTML 元素并將樣式應用于它們。使用這些選擇器&#xff0c;可以定義特定條件下應用哪些樣式。除了普通的選擇器外&#xff0c;還有偽類和偽元素&#xff0c;用于選擇具有特定狀態或特定部分的元素&#xff0c;并將樣式應用于它們。本文將通過圖文并茂的方式…

Windows11家庭版安裝Docker

文章目錄 安裝Docker安裝hyper-v繼續解決報錯完成效果圖進一步測試是否完成安裝 安裝Docker windows如何安裝docker 裝好之后&#xff0c;我打開報錯。 安裝hyper-v 按這個視頻操作&#xff1a;Windows 11 家庭版安裝 Hyper-V bat文件里的代碼是&#xff1a; pushd "…

【Educoder數據挖掘實訓】異常值檢測-3σ法

【Educoder數據挖掘實訓】異常值檢測-3σ法 開挖&#xff01; 這個異常值檢測基于的是兩點&#xff1a; 數據往往遵循正態分布在正態分布中&#xff0c; [ μ ? 3 σ , μ 3 σ ] [\mu - 3\sigma, \mu 3\sigma] [μ?3σ,μ3σ]包含了正態分布中 99.74 % 99.74\% 99.74%的數…

【投稿優惠|快速見刊】2024年圖像,機器學習和人工智能國際會議(ICIMLAI 2024)

【投稿優惠|快速見刊】2024年圖像&#xff0c;機器學習和人工智能國際會議&#xff08;ICIMLAI 2024&#xff09; 重要信息 會議官網&#xff1a;http://www.icimlai.com會議地址&#xff1a;深圳召開日期&#xff1a;2024.03.30截稿日期&#xff1a;2024.03.20 &#xff08;先…

2024全國水科技大會暨高氨氮廢水厭氧氨氧化處理技術論壇(四)

一、會議背景 為積極應對“十四五”期間我國生態環境治理面臨的挑戰&#xff0c;加快生態環境科技創新&#xff0c;構建綠色技術創新體系&#xff0c;全面落實科學技術部、生態環境部等部委編制的《“十四五”生態環境領域科技創新專項規劃》&#xff0c;積極落實省校合作&…

pip下載paddle、sklearn、cv2問題

ModuleNotFoundError: No module named ‘paddle‘ ModuleNotFoundError: No module named sklearn No matching distribution found for cv2 Could not build wheels for opencv-python, which is required to install pyproj

什么是BGP網絡 (邊界網關協議)

BGP&#xff08;邊界網關協議&#xff09;是一種用于在互聯網中交換路由信息的協議。作為網關或路由器之間的協議&#xff0c;BGP主要用于幫助確定數據包在網絡中的路徑。它通過在不同自治系統&#xff08;AS&#xff09;之間交換路徑信息&#xff0c;實現了全球互聯網網絡的連…

MySQL進階之(三)InnoDB數據存儲結構之數據頁結構

三、InnoDB數據存儲結構之數據頁結構 3.1 數據庫的存儲結構3.1.1 MySQL 數據存儲目錄3.1.2 頁的引入3.1.3 頁的概述3.1.4 頁的上層結構 3.2 數據頁結構3.2.1 文件頭和文件尾01、File Header&#xff08;文件頭部&#xff09;02、File Trailer&#xff08;文件尾部&#xff09; …

【JavaEE】_Spring Web MVC簡介

目錄 1. Spring Web MVC簡介 2. MVC簡介 3. Spring MVC 1. Spring Web MVC簡介 官網對于Spring Web MVC的介紹如下&#xff1a; 鏈接如下&#xff1a; https://docs.spring.io/spring-framework/reference/web/webmvc.html#https://docs.spring.io/spring-framework/refer…

將SU模型導入ARCGIS,并獲取高度信息,多面體轉SHP文件(ARCMAP)

問題:將Sketchup中導出的su模型,導入arcgis并得到面shp文件,進而獲取各建筑的高度、面積等信息。 思路: (1)導入arcgis得到多面體 (2)轉為面shp文件 (3)計算高度/面積等 1、【3D Analyst工具】【轉換】【由文件轉出】【導入3D文件】(在此步驟之間,建議先建立一個…

棧和隊列OJ題

文章目錄 一、雙隊列實現棧二、雙棧實現隊列 一、雙隊列實現棧 題目鏈接&#xff1a; https://leetcode.cn/problems/implement-stack-using-queues/description/ 題目分析&#xff1a; 棧的結構是后進先出&#xff0c;而隊列的結構是先進先出&#xff0c;我們利用這個性質&a…

AI Word Helper (Chorme Extentions) AI單詞助手(谷歌瀏覽器插件)

AI Word Helper (Chorme Extentions) AI單詞助手&#xff08;谷歌瀏覽器插件&#xff09; 英文網站&#xff0c;劃詞查單詞&#xff0c;還是看不懂&#xff1f;因為單詞意思那么多&#xff0c;詞性搞不清&#xff0c;上下文搞不清&#xff0c;出來的意思就沒法用&#xff0c;G…

一個基于輪詢的廣告系統

無論PC 客戶端還是手機客戶端&#xff0c;可能會遇到需要發布一些廣告&#xff0c;這些廣告可能是自己開發的&#xff0c;可能是三方的&#xff0c;而且希望是比較通用&#xff0c;能隨時發布&#xff0c;隨時就能看到效果。 本文提供了一種基于輪詢的廣告系統&#xff0c;主要…

【服務器數據恢復】昆騰存儲中raid5磁盤陣列數據恢復案例

服務器數據恢復環境&故障&#xff1a; 10個磁盤柜&#xff0c;每個磁盤柜配24塊硬盤。9個磁盤柜用于存儲數據&#xff0c;1個磁盤柜用于存儲元數據。 元數據存儲中24塊硬盤&#xff0c;組建了9組RAID1陣列1組RAID10陣列&#xff0c;4個全局熱備硬盤。 數據存儲中&#xff0…

Java基于springboot的個人理財系統

基于springboot的個人理財系統 摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了個人理財系統的開發全過程。通過分析個人理財系統管理的不足&#xff0c;創建了一個計算機管理個人理財系統的方案。文章介紹了個…

多人音視頻實時通訊架構

直播中的協議與格式 在直播系統中&#xff0c;協議和格式的選擇對于傳輸效率、畫面質量和用戶體驗都至關重要。以下是直播中常見的協議與格式&#xff1a; 協議 RTSP (Real Time Streaming Protocol) RTSP是一個網絡流媒體協議&#xff0c;常用于視頻監控和IPTV等場景。它本身…

考研機試C++題目精選

更多內容會在godownio.github.io更新 算法練習&#xff08;C代碼&#xff09; 考研上機或C語言代碼筆試準備&#xff0c;暨大機試原題letcode牛客中南大等高校機試 快速冪算法 題目&#xff1a;輸入一個整數 n &#xff0c;求 n^n 的個位數是多少。 快速冪算法&#xff1a;…