elasticsearch入門系列">elasticsearch入門系列
1048
2025-03-31
golang系列之浮點型與復數類型
1、浮點類型定義
浮點類型也可以稱之為浮點數,用于存儲小數類型的數據,比如3.14等等,都是浮點型
var price float32 = 100.12 fmt.Println("price="+price)
1
2
2、浮點類型表示
浮點型存儲分為三個部分,符號位+指數位+尾數位,一般使用E指數位來表示,
E為16進制的一個符號指數位,表示的是10的n次方,eg:1.34E08,表示1.34乘以10的8次冪
go語言的浮點類型表示采用IEEE_754標準的表達式,定義了兩個類型:float32和float64,其中float32表示單精度,可以精確到小數點后7位,float64表示雙精度,可以精確到小數點后15位
注意:
go浮點型默認類型是float64
3、浮點類型的精度
浮點數類型的數據保存時,有時候精度會有一些誤差,浮點數不是一種精確的表達方式,因為二進制無法精確表示所有的十進制數,例子
var fNum1 float32 = -123.0000990 var fNum2 float64 = -123.0000990 fmt.Println("fNum1=" , fNum1 , "fNum2=" , fNum2)
1
2
3
fNum1= -123.0001 fNum2= -123.000099
4、浮點數的比較
前面說了,浮點數不是一種精確的表達方式,會有一定精度誤差,所以不能直接拿兩個浮點數進行比較。看起來相等的十進制數,在底層轉化為二進制時會丟失精度,所以去比較
然后,怎么判斷兩個浮點數相等?只能在允許誤差的情況,進行比較,方法引用博客:Go 數據類型篇:浮點型與復數類型
// 最小誤差值 p := 0.000001 // 判斷兩個浮點數誤差是否在誤差值之間 if math.Dim(float64(fNum1), fNum2) < p { fmt.Println("fNum1 和 fNum2 相等") }
1
2
3
4
5
6
5、復數類型
我們常將整型和浮點型稱之為實數,而復數是實數的拓展延伸。復數也有兩種 complex64 和 complex128,這兩種類型分別由 float32 和 float64 構成。math/cmplx 庫提供了復數運算所需要的函數。復數可以通過兩個部分表示,一個是實部(real),一個是虛部(imag),表達式可以為:
z = a+ bi
1
其中 a、b 均為實數,i 稱為虛數單位。當 b = 0 時,z 就是常見的實數,當 a = 0 而 b ≠ 0 時,將 z 稱之為純虛數。復數兩種類型,complex64(32 位實部和虛部),complext128(64位實部和虛部)
對于復數的函數,可查閱[math/cmplx](https://golang.org/pkg/math/cmplx/) 標準庫的文檔
參考資料
https://geekr.dev/posts/go-float-and-complex
Go
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。