go07 很大的数

简介: go07 很大的数

go07 很大的数

数太大了怎办?


浮点类型可以存储非常大的数值,但是精度不高


整型很精确,但是取值范围有限。


如果你需要很大的数,而且要求很精确,那么怎么办


int64 可以容纳很大的数,如果还不行,那么:


uint64 可以容纳更大的正数,如果还不行,那么:


也可以凑合用浮点类型,但是还有另外一种方法:使用 big 包。


注意: 如果没有为指数形式的数值指定类型的话,那么 Go 将会将它视作 float64 类型。

big 包


对于较大的整数(超过1018 ):big.Int

对于任意精度的浮点类型,big.Float

对于分数,big.Rat

big.Int


一旦使用了 big.Int,那么等式里其它的部分也必须使用 big.Int 。

NewInt() 函数可以把 int64 转化为 big.Int 类型。


71257059ee084408a88f37e278111ced.png


如何把 24 x 1018 转化为 big.Int 类型?

  • 首先 new 一个 big.Int 。
  • 再通过 SetString 函数把数值的字符串形式,和几进制传递进行即可。

缺点:用起来繁琐,且速度慢。


16f1321204a449bc9d76f978d6580be4.png


较大数值的常量

在 Go 里面,可以为常量指明类型(这句话会报错):

也可以不指明常量的类型。。。


对于变量,Go 会使用类型推断。

而在 Go 里面,常量是可以无类型的(untyped),这句话就不会报错:

注意: 上面这个不报错的常量如果用 Println 函数打印会报错,因为这个函数里默认会将没有定义类型的整数类型当做 Int 来处理。


常量使用 const 关键字来声明,程序里的每个字面值都是常量。


这意味着:比较大的数值可以直接使用(作为字面值)。


针对字面值和常量的计算是在编译阶段完成的。


Go 的编译器是用 Go 编写的,这种无类型的数值字面值就是由 big 包所支持的。这使你可以操作很大的数(超过 18 的10¹⁸)


只要能够容纳得下,那么常量就可以赋值给变量。


尽管 Go 编译器使用 big 包来处理无类型的数值常量,但是常量和 big.Int 的值是不能互换的。


【上一讲】go06 整数

【下一讲】go08 多语言文本

目录
相关文章
|
2月前
|
IDE Go 数据处理
Go to Learn Go之第一个Go程序
Go to Learn Go之第一个Go程序
25 0
|
6月前
|
Go
第一个 Go 程序
第一个 Go 程序
31 2
|
6月前
|
存储 Java 编译器
|
6月前
|
存储 NoSQL Go
|
存储 Go
Go学习笔记-Go 浮点数设计原理
Go学习笔记-Go 浮点数设计原理
118 0
|
存储 人工智能 架构师
Go开始:Go基本元素介绍
Go开始:Go基本元素介绍
83 0
|
算法 Java Go
Go的span算法
MMSpan是Go语言垃圾回收器中的一个重要概念,它用于管理和跟踪堆内存的分配和释放。
91 0
|
存储 Go 开发者
GO的几种不同类型
7种基本类型
86 0
|
存储 Go
go06 整数
go06 整数
72 0
Golang:go-hashids从整数生成短唯一ID
Golang:go-hashids从整数生成短唯一ID
269 0