Go 语言

Go 语言教程 Go 语言环境安装 Go 语言结构 Go 语言基础语法 Go 语言数据类型 Go 语言变量 Go 语言常量 Go 语言运算符 Go 语言条件语句 Go 语言 if 语句 Go 语言 if...else 语句 Go 语言 if 语句嵌套 Go 语言 switch 语句 Go 语言 select 语句 Go 语言循环语句 Go 语言 for 循环 Go 语言循环嵌套 Go 语言 break 语句 Go 语言 continue 语句 Go 语言 goto 语句 Go 语言函数 Go 语言函数值传递值 Go 语言函数引用传递值 Go 语言函数作为值 Go 语言函数闭包 Go 语言函数方法 Go 语言变量作用域 Go 语言数组 Go 语言多维数组 Go 语言向函数传递数组 Go 语言指针 Go 语言指针数组 Go 语言指向指针的指针 Go 语言指针作为函数参数 Go 语言结构体 Go 语言切片(Slice) Go 语言范围(Range) Go 语言Map(集合) Go 语言递归函数 Go 语言类型转换 Go 语言接口 Go 错误处理 Go 语言开发工具Go 语言标准库

Go 语言标准库


package big

import "math/big"

big包实现了大数字的多精度计算。 支持如下数字类型:

- Int	有符号整数
- Rat	有理数

方法一般为如下格式:

func (z *Int) Op(x, y *Int) *Int	(similar for *Rat)

该方法实现了操作z = x Op y:计算并将结果写入z。如果结果是操作数之一,可能会重写该参数(重用其内存);为了实现链式的计算,计算结果同时会作为返回值。方法返回一个结果而不是让*Int/*Rat调用方法获取另一个操作数。

Go语言标准库 >>


  • Constants
  • type Word
  • type Int
  • type Rat
  • Examples

    Go语言标准库 >>


  • Int.Scan
  • Int.SetString
  • Rat.Scan
  • Rat.SetString
  • Constants

    const MaxBase = 'z' - 'a' + 10 + 1 // = hexValue('z') + 1
    

    MaxBase是字符串转换函数接受的最大进制。

    type Word

    type Word uintptr

    Word代表一个多精度无符号整数的单个数字。

    type Int

    type Int struct {
        // 内含隐藏或非导出字段
    }

    Int类型代表多精度的整数,零值代表数字0。

    func NewInt

    func NewInt(x int64) *Int

    创建一个值为x的*Int。

    func (*Int) Int64

    func (x *Int) Int64() int64

    返回x的int64表示,如果不能用int64表示,结果是未定义的。

    func (*Int) Uint64

    func (x *Int) Uint64() uint64

    返回x的uint64表示,如果不能用uint64表示,结果是未定义的。

    func (*Int) Bytes

    func (x *Int) Bytes() []byte

    返回x的绝对值的大端在前的字节切片表示。

    func (*Int) String

    func (x *Int) String() string

    func (*Int) BitLen

    func (x *Int) BitLen() int

    返回x的绝对值的字位数,0的字位数为0。

    func (*Int) Bits

    func (x *Int) Bits() []Word

    提供了对x的数据不检查而快速的访问,返回构成x的绝对值的小端在前的word切片。该切片与x的底层是同一个数组,本函数用于支持在包外实现缺少的低水平功能,否则不应被使用。

    func (*Int) Bit

    func (x *Int) Bit(i int) uint

    返回第i个字位的值,即返回(x>>i)&1。i必须不小于0。

    func (*Int) SetInt64

    func (z *Int) SetInt64(x int64) *Int

    将z设为x并返回z。

    func (*Int) SetUint64

    func (z *Int) SetUint64(x uint64) *Int

    将z设为x并返回z。

    func (*Int) SetBytes

    func (z *Int) SetBytes(buf []byte) *Int

    将buf视为一个大端在前的无符号整数,将z设为该值,并返回z。

    func (*Int) SetString

    func (z *Int) SetString(s string, base int) (*Int, bool)

    将z设为s代表的值(base为基数)。返回z并用一个bool来表明成功与否。如果失败,z的值是不确定的,但返回值为nil。基数必须是0或者2到MaxBase之间的整数。如果基数为0,字符串的前缀决定实际的转换基数:"0x"、"0X"表示十六进制;"0b"、"0B"表示二进制;"0"表示八进制;否则为十进制。

    Example
    i := new(big.Int)
    i.SetString("644", 8) // octal
    fmt.Println(i)

    Output:

    420
    

    func (*Int) SetBits

    func (z *Int) SetBits(abs []Word) *Int

    提供了对z的数据不检查而快速的操作,将abs视为小端在前的word切片并直接赋给z,返回z。会将z的底层设置为abs的同一底层数组,本函数用于支持在包外实现缺少的低水平功能,否则不应被使用。

    func (*Int) SetBit

    func (z *Int) SetBit(x *Int, i int, b uint) *Int

    将z设为x并设置z的第i位为b,返回z。如b为1,z = x | (1 << i);如b为0,z = x & ^(1 << i);否则会panic。

    func (*Int) MulRange

    func (z *Int) MulRange(a, b int64) *Int

    将z设置为区间[a, b]内所有整数的乘积A(a, b),并返回z。如果a>b会将z设为1并返回。

    func (*Int) Binomial

    func (z *Int) Binomial(n, k int64) *Int

    将z设为k次二项式展开第n项的系数C(n, k),并返回z。

    func (*Int) Rand

    func (z *Int) Rand(rnd *rand.Rand, n *Int) *Int

    将z设为一个范围在[0, n)的伪随机值,并返回z。

    func (*Int) ProbablyPrime

    func (x *Int) ProbablyPrime(n int) bool

    对x进行n次Miller-Rabin质数检测。如果方法返回真则x是质数的几率为1-(1/4)**n;否则x不是质数。

    func (*Int) Sign

    func (x *Int) Sign() int

    返回x的正负号。x<0时返回-1;x>0时返回+1;否则返回0。

    func (*Int) Cmp

    func (x *Int) Cmp(y *Int) (r int)

    比较x和y的大小。x<y时返回-1;x>y时返回+1;否则返回0。

    func (*Int) Not

    func (z *Int) Not(x *Int) *Int

    将z设为^x并返回z(按位取反)。

    func (*Int) And

    func (z *Int) And(x, y *Int) *Int

    将z设为x & y并返回z(按位且)。

    func (*Int) Or

    func (z *Int) Or(x, y *Int) *Int

    将z设为x | y并返回z(按位或)。

    func (*Int) Xor

    func (z *Int) Xor(x, y *Int) *Int

    将z设为x ^ y并返回z(按位异或)。

    func (*Int) AndNot

    func (z *Int) AndNot(x, y *Int) *Int

    将z设为x & (^y)并返回z(按位减)。

    func (*Int) Lsh

    func (z *Int) Lsh(x *Int, n uint) *Int

    将z设为x << n并返回z(左位移运算)。

    func (*Int) Rsh

    func (z *Int) Rsh(x *Int, n uint) *Int

    将z设为x >> n并返回z(右位移运算)。

    func (*Int) Abs

    func (z *Int) Abs(x *Int) *Int

    将z设为|x|并返回z。

    func (*Int) Neg

    func (z *Int) Neg(x *Int) *Int

    将z设为-x并返回z。

    func (*Int) Set

    func (z *Int) Set(x *Int) *Int

    将z设为x(生成一个拷贝)并返回z

    func (*Int) Add

    func (z *Int) Add(x, y *Int) *Int

    将z设为x + y并返回z。

    func (*Int) Sub

    func (z *Int) Sub(x, y *Int) *Int

    将z设为x - y并返回z。

    func (*Int) Mul

    func (z *Int) Mul(x, y *Int) *Int

    将z设为x * y并返回z。

    func (*Int) Div

    func (z *Int) Div(x, y *Int) *Int

    如果y != 0会将z设为x/y并返回z;如果y==0会panic。函数采用欧几里德除法(和Go不同),参见DivMod。

    func (*Int) Mod

    func (z *Int) Mod(x, y *Int) *Int

    如果y != 0会将z设为x%y并返回z;如果y==0会panic。函数采用欧几里德除法(和Go不同),参见DivMod。

    func (*Int) DivMod

    func (z *Int) DivMod(x, y, m *Int) (*Int, *Int)

    如果y != 0将z设为x/y,将m设为x%y并返回(z, m);如果y == 0会panic。采用欧几里德除法(和Go不同)

    DivMod方法实现了欧几里德带余除法:

    q = x div y  满足
    m = x - y*q  且 0 <= m < |q|
    

    func (*Int) Quo

    func (z *Int) Quo(x, y *Int) *Int

    如果y != 0会将z设为x/y并返回z;如果y==0会panic。函数采用截断除法(和Go相同),参见QuoRem。

    func (*Int) Rem

    func (z *Int) Rem(x, y *Int) *Int

    如果y != 0会将z设为x%y并返回z;如果y==0会panic。函数采用截断除法(和Go相同),参见QuoRem。

    func (*Int) QuoRem

    func (z *Int) QuoRem(x, y, r *Int) (*Int, *Int)

    如果y != 0将z设为x/y,将r设为x%y并返回(z, r);如果y == 0会panic。函数采用截断除法(和Go相同)

    QuoRem方法实现了截断带余除法:

    q = x/y      返回值向零的方向截断
    r = x - y*q

    func (*Int) ModInverse

    func (z *Int) ModInverse(g, p *Int) *Int

    将z设为g相对p的模逆(即z、g满足(z * g) % p == 1)。返回值z大于0小于p。

    func (*Int) Exp

    func (z *Int) Exp(x, y, m *Int) *Int

    将z设为x**y mod |m|并返回z;如果y <= 0,返回1;如果m == nil 或 m == 0,z设为x**y。

    func (*Int) GCD

    func (z *Int) GCD(x, y, a, b *Int) *Int

    将z设为a和b的最大公约数并返回z。a或b为nil时会panic;a和b都>0时设置z为最大公约数;如果任一个<=0方法就会设置z = x = y = 0。如果x和y都不是nil,会将x和y设置为满足a*x + b*y==z。

    func (*Int) Format

    func (x *Int) Format(s fmt.State, ch rune)

    Format方法实现了fmt.Formatter接口。本方法接受格式'b'(二进制)、'o'(八进制)、'd'(十进制)、'x'(小写十六进制)、'X'(大写十六进制)。

    方法支持全套fmt包对整数类型的动作:包括用于符号控制的'+'、'-'、' ';用于十六进制和八进制前导0的'#';"%#x"和"%#X"会设置前导的"0x"或"0X";指定最小数字精度;输出字段宽度;空格或'0'的补位;左右对齐。

    func (*Int) Scan

    func (z *Int) Scan(s fmt.ScanState, ch rune) error

    Scan实现了fmt.Scanner接口,将z设为读取的数字。方法可以接受接受格式'b'(二进制)、'o'(八进制)、'd'(十进制)、'x'(小写十六进制)、'X'(大写十六进制)。

    Example
    // The Scan function is rarely used directly;
    // the fmt package recognizes it as an implementation of fmt.Scanner.
    i := new(big.Int)
    _, err := fmt.Sscan("18446744073709551617", i)
    if err != nil {
        log.Println("error scanning value:", err)
    } else {
        fmt.Println(i)
    }

    Output:

    18446744073709551617
    

    func (*Int) GobEncode

    func (x *Int) GobEncode() ([]byte, error)

    本方法实现了gob.GobEncoder接口。

    func (*Int) GobDecode

    func (z *Int) GobDecode(buf []byte) error

    本方法实现了gob.GobDecoder接口。

    func (*Int) MarshalJSON

    func (z *Int) MarshalJSON() ([]byte, error)

    本方法实现了json.Marshaler接口。

    func (*Int) UnmarshalJSON

    func (z *Int) UnmarshalJSON(text []byte) error

    本方法实现了json.Unmarshaler接口。

    func (*Int) MarshalText

    func (z *Int) MarshalText() (text []byte, err error)

    本方法实现了encoding.TextMarshaler接口。

    func (*Int) UnmarshalText

    func (z *Int) UnmarshalText(text []byte) error

    本方法实现了encoding.TextUnmarshaler接口。

    type Rat

    type Rat struct {
        // 内含隐藏或非导出字段
    }

    Rat类型代表一个任意精度的有理数(底层采用分数表示),Rat的零值代表数字0。

    func NewRat

    func NewRat(a, b int64) *Rat

    NewRat函数使用分子a和分母b创建一个Rat。

    func (*Rat) Num

    func (x *Rat) Num() *Int

    返回x的分子,分子可能<=0。返回的是x分子的指针,因此对返回值的操作可能改变x,反之亦然。x的符号与分子的符号是绑定的。

    func (*Rat) Denom

    func (x *Rat) Denom() *Int

    返回x的分母,分母总是>0。返回的是x分母的指针,因此对返回值的操作可能改变x,反之亦然。

    func (*Rat) Float64

    func (x *Rat) Float64() (f float64, exact bool)

    返回最接近x的值的float64值,exact用于说明f是否精确的表示了x。  如果x的量级太大或太小不能被float64类型表示,返回无穷和false;f的符号始终与x的符号一致,即使f==0。

    func (*Rat) RatString

    func (x *Rat) RatString() string

    返回z的字符串表示,如果分母不等于1,格式为"a/b";否则格式为"a"。

    func (*Rat) FloatString

    func (x *Rat) FloatString(prec int) string

    返回z的字符串表示为精度为prec的十进制浮点数,最后一位会进行四舍五入。

    func (*Rat) String

    func (x *Rat) String() string

    返回z的字符串表示,格式为"a/b"(即使分母等于1)。

    func (*Rat) IsInt

    func (x *Rat) IsInt() bool

    返回x的分母是否为1(即x为整数)。

    func (*Rat) SetInt64

    func (z *Rat) SetInt64(x int64) *Rat

    将z设为x,并返回z。

    func (*Rat) SetFrac64

    func (z *Rat) SetFrac64(a, b int64) *Rat

    将z设为a/b,并返回z。

    func (*Rat) SetFloat64

    func (z *Rat) SetFloat64(f float64) *Rat

    将z设为f的精确值并返回z。如果f不是有穷数(即f为+Inf、+Inf或NaN)时会返回nil。。

    func (*Rat) SetInt

    func (z *Rat) SetInt(x *Int) *Rat

    将z设为x(生成一个拷贝)并返回z。

    func (*Rat) SetFrac

    func (z *Rat) SetFrac(a, b *Int) *Rat

    将z设为a/b,并返回z。

    func (*Rat) SetString

    func (z *Rat) SetString(s string) (*Rat, bool)

    将z设为字符串代表的值,返回z并用一个bool表明是否成功。字符串s的格式可以是形如"a/b"的分数格式,也可以是浮点数后跟可选的指数的科学计数法格式。如果操作失败,z的值是不确定的,但返回值为nil。

    Example
    r := new(big.Rat)
    r.SetString("355/113")
    fmt.Println(r.FloatString(3))

    Output:

    3.142
    

    func (*Rat) Sign

    func (x *Rat) Sign() int

    返回x的正负号。如x < 0返回-1;如x > 0返回+1;否则返回0。

    func (*Rat) Cmp

    func (x *Rat) Cmp(y *Rat) int

    比较x和y的大小。如x < y返回-1;如x > y返回+1;否则返回0。

    func (*Rat) Abs

    func (z *Rat) Abs(x *Rat) *Rat

    将z设为|x|并返回z。

    func (*Rat) Neg

    func (z *Rat) Neg(x *Rat) *Rat

    将z设为-x并返回z。

    func (*Rat) Inv

    func (z *Rat) Inv(x *Rat) *Rat

    将z设为1/x并返回z。

    func (*Rat) Set

    func (z *Rat) Set(x *Rat) *Rat

    将z设为x(生成一个拷贝)并返回z。

    func (*Rat) Add

    func (z *Rat) Add(x, y *Rat) *Rat

    将z设为x + y并返回z。

    func (*Rat) Sub

    func (z *Rat) Sub(x, y *Rat) *Rat

    将z设为x - y并返回z。

    func (*Rat) Mul

    func (z *Rat) Mul(x, y *Rat) *Rat

    将z设为x * y并返回z。

    func (*Rat) Quo

    func (z *Rat) Quo(x, y *Rat) *Rat

    如果y != 0会将z设为x/y并返回z;如果y==0会panic。

    func (*Rat) Scan

    func (z *Rat) Scan(s fmt.ScanState, ch rune) error

    本方法实现了fmt.Scanner接口,将z设为读取到的数字。接受格式'e'、'E'、'f'、'F'、'g'、'G'、'v';它们都是等价的。

    Example
    // The Scan function is rarely used directly;
    // the fmt package recognizes it as an implementation of fmt.Scanner.
    r := new(big.Rat)
    _, err := fmt.Sscan("1.5000", r)
    if err != nil {
        log.Println("error scanning value:", err)
    } else {
        fmt.Println(r)
    }

    Output:

    3/2
    

    func (*Rat) GobEncode

    func (x *Rat) GobEncode() ([]byte, error)

    本方法实现了gob.GobEncoder接口。

    func (*Rat) GobDecode

    func (z *Rat) GobDecode(buf []byte) error

    本方法实现了gob.GobDecoder接口。

    func (*Rat) MarshalText

    func (r *Rat) MarshalText() (text []byte, err error)

    本方法实现了encoding.TextMarshaler接口。

    func (*Rat) UnmarshalText

    func (r *Rat) UnmarshalText(text []byte) error

    本方法实现了encoding.TextUnmarshaler接口。