天天看點

golang基礎資料類型-浮點型

go語言提供了兩種精度的浮點數,float32和float64

// float32 is the set of all IEEE-754 32-bit floating-point numbers.
type float32 float32

// float64 is the set of all IEEE-754 64-bit floating-point numbers.
type float64 float64      

零值和預設類型

func TestFloat(t *testing.T) {
   // 零值0
   var f1 float64
   fmt.Println(f1) // 0
   
   // 預設類型
   f2 := 3.14
   fmt.Println(reflect.TypeOf(f2), f2) // float64 3.14
}      

表現形式

func TestFloat(t *testing.T) {
   // 省略小數點後面的數
   f1 := 3.
   // 省略小數點前面的數
   f2 := .14
   // 科學計數法,大寫E和小寫e都支援
   // 等價于5.1234 * 100
   f3 := 5.1234e2
   // 等價于5.1234 / 100
   f4 := 5.1234e-2
   fmt.Println(f1, f2, f3, f4) // 3 0.14 512.34 0.051234
}      

如何選擇

一個float32類型的浮點數可以提供大約6個十進制數的精度,而float64則可以提供約15個十進制數的精度;通常應該優先使用float64類型,因為float32類型的累計計算誤差很容易擴散,并且float32能精确表示的正整數并不是很大

func TestFloat(t *testing.T) {
   var f float32 = 1 << 24
   fmt.Println(f == f+1) // true
}      

邊界值

// Floating-point limit values.
// Max is the largest finite value representable by the type.
// SmallestNonzero is the smallest positive, non-zero value representable by the type.
const (
   MaxFloat32             = 3.40282346638528859811704183484516925440e+38  // 2**127 * (2**24 - 1) / 2**23
   SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45 // 1 / 2**(127 - 1 + 23)

   MaxFloat64             = 1.797693134862315708145274237317043567981e+308 // 2**1023 * (2**53 - 1) / 2**52
   SmallestNonzeroFloat64 = 4.940656458412465441765687928682213723651e-324 // 1 / 2**(1023 - 1 + 52)
)