golang基础数据类型-浮点型

大白能_3db0 · · 445 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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能精确表示的正整数并不是很大

备注:因为float32的有效bit位只有23个,其它的bit位用于指数和符号;当整数大于23bit能表达的范围时,float32的表示将出现误差

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

边界值

math包里面

// 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)
)

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:大白能_3db0

查看原文:golang基础数据类型-浮点型

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

445 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传