Golang标准库——math

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

math

math包提供了基本的数学常数和数学函数。

Constants

const (
    E   = 2.71828182845904523536028747135266249775724709369995957496696763 // A001113
    Pi  = 3.14159265358979323846264338327950288419716939937510582097494459 // A000796
    Phi = 1.61803398874989484820458683436563811772030917980576286213544862 // A001622
    Sqrt2   = 1.41421356237309504880168872420969807856967187537694807317667974 // A002193
    SqrtE   = 1.64872127070012814684865078781416357165377610071014801157507931 // A019774
    SqrtPi  = 1.77245385090551602729816748334114518279754945612238712821380779 // A002161
    SqrtPhi = 1.27201964951406896425242246173749149171560804184009624861664038 // A139339
    Ln2    = 0.693147180559945309417232121458176568075500134360255254120680009 // A002162
    Log2E  = 1 / Ln2
    Ln10   = 2.30258509299404568401799145468436420760110148862877297603332790 // A002392
    Log10E = 1 / Ln10
)

数学常数,参见:http://oeis.org/Axxxxxx

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

浮点数的取值极限。Max是该类型所能表示的最大有限值;SmallestNonzero是该类型所能表示的最小非零正数值。

const (
    MaxInt8   = 1<<7 - 1
    MinInt8   = -1 << 7
    MaxInt16  = 1<<15 - 1
    MinInt16  = -1 << 15
    MaxInt32  = 1<<31 - 1
    MinInt32  = -1 << 31
    MaxInt64  = 1<<63 - 1
    MinInt64  = -1 << 63
    MaxUint8  = 1<<8 - 1
    MaxUint16 = 1<<16 - 1
    MaxUint32 = 1<<32 - 1
    MaxUint64 = 1<<64 - 1
)

整数的取值极限。

func NaN

func NaN() float64

函数返回一个IEEE 754“这不是一个数字”值。

func IsNaN

func IsNaN(f float64) (is bool)

报告f是否表示一个NaN(Not A Number)值。

func Inf

func Inf(sign int) float64

如果sign>=0函数返回正无穷大,否则返回负无穷大。

func IsInf

func IsInf(f float64, sign int) bool

如果sign > 0,f是正无穷大时返回真;如果sign<0,f是负无穷大时返回真;sign==0则f是两种无穷大时都返回真。

func Float32bits

func Float32bits(f float32) uint32

函数返回浮点数f的IEEE 754格式二进制表示对应的4字节无符号整数。

func Float32frombits

func Float32frombits(b uint32) float32

函数返回无符号整数b对应的IEEE 754格式二进制表示的4字节浮点数。

func Float64bits

func Float64bits(f float64) uint64

函数返回浮点数f的IEEE 754格式二进制表示对应的8字节无符号整数。

func Float64frombits

func Float64frombits(b uint64) float64

函数返回无符号整数b对应的IEEE 754格式二进制表示的8字节浮点数。

func Signbit

func Signbit(x float64) bool

如果x是一个负数或者负零,返回真。

func Copysign

func Copysign(x, y float64) float64

返回拥有x的量值(绝对值)和y的标志位(正负号)的浮点数。

func Ceil

func Ceil(x float64) float64

返回不小于x的最小整数(的浮点值),特例如下:

Ceil(±0) = ±0
Ceil(±Inf) = ±Inf
Ceil(NaN) = NaN

func Floor

func Floor(x float64) float64

返回不大于x的最大整数(的浮点值),特例如下:

Floor(±0) = ±0
Floor(±Inf) = ±Inf
Floor(NaN) = NaN

func Trunc

func Trunc(x float64) float64

返回x的整数部分(的浮点值)。特例如下:

Trunc(±0) = ±0
Trunc(±Inf) = ±Inf
Trunc(NaN) = NaN

func Modf

func Modf(f float64) (int float64, frac float64)

返回f的整数部分和小数部分,结果的正负号和都x相同;特例如下:

Modf(±Inf) = ±Inf, NaN
Modf(NaN) = NaN, NaN

func Nextafter

func Nextafter(x, y float64) (r float64)

参数x到参数y的方向上,下一个可表示的数值;如果x==y将返回x。特例如下:

Nextafter(NaN, y) = NaN
Nextafter(x, NaN) = NaN

func Abs

func Abs(x float64) float64

返回x的绝对值;特例如下:

Abs(±Inf) = +Inf
Abs(NaN) = NaN

func Max

func Max(x, y float64) float64

返回x和y中最大值,特例如下:

Max(x, +Inf) = Max(+Inf, x) = +Inf
Max(x, NaN) = Max(NaN, x) = NaN
Max(+0, ±0) = Max(±0, +0) = +0
Max(-0, -0) = -0

func Min

func Min(x, y float64) float64

返回x和y中最小值,特例如下:

Min(x, -Inf) = Min(-Inf, x) = -Inf
Min(x, NaN) = Min(NaN, x) = NaN
Min(-0, ±0) = Min(±0, -0) = -0

func Dim

func Dim(x, y float64) float64

函数返回x-y和0中的最大值,特殊情况:

Dim(+Inf, +Inf) = NaN
Dim(-Inf, -Inf) = NaN
Dim(x, NaN) = Dim(NaN, x) = NaN

func Mod

func Mod(x, y float64) float64

取余运算,可以理解为 x-Trunc(x/y)*y,结果的正负号和x相同;特例如下:

Mod(±Inf, y) = NaN
Mod(NaN, y) = NaN
Mod(x, 0) = NaN
Mod(x, ±Inf) = x
Mod(x, NaN) = NaN

func Remainder

func Remainder(x, y float64) float64

IEEE 754差数求值,即x减去最接近x/y的整数值(如果有两个整数与x/y距离相同,则取其中的偶数)与y的乘积。特例如下:

Remainder(±Inf, y) = NaN
Remainder(NaN, y) = NaN
Remainder(x, 0) = NaN
Remainder(x, ±Inf) = x
Remainder(x, NaN) = NaN

func Sqrt

func Sqrt(x float64) float64

返回x的二次方根,特例如下:

Sqrt(+Inf) = +Inf
Sqrt(±0) = ±0
Sqrt(x < 0) = NaN
Sqrt(NaN) = NaN

func Cbrt

func Cbrt(x float64) float64

返回x的三次方根,特例如下:

Cbrt(±0) = ±0
Cbrt(±Inf) = ±Inf
Cbrt(NaN) = NaN

func Hypot

func Hypot(p, q float64) float64

返回Sqrt(pp + qq),注意要避免不必要的溢出或下溢。特例如下:

Hypot(±Inf, q) = +Inf
Hypot(p, ±Inf) = +Inf
Hypot(NaN, q) = NaN
Hypot(p, NaN) = NaN

func Sin

func Sin(x float64) float64

求正弦。特例如下:

Sin(±0) = ±0
Sin(±Inf) = NaN
Sin(NaN) = NaN

func Cos

func Cos(x float64) float64

求余弦。特例如下:

Cos(±Inf) = NaN
Cos(NaN) = NaN

func Tan

func Tan(x float64) float64

求正切。特例如下:

Tan(±0) = ±0
Tan(±Inf) = NaN
Tan(NaN) = NaN

func Sincos

func Sincos(x float64) (sin, cos float64)

函数返回Sin(x), Cos(x)。特例如下:

Sincos(±0) = ±0, 1
Sincos(±Inf) = NaN, NaN
Sincos(NaN) = NaN, NaN

func Asin

func Asin(x float64) float64

求反正弦(x是弧度)。特例如下:

Asin(±0) = ±0
Asin(x) = NaN if x < -1 or x > 1

func Acos

func Acos(x float64) float64

求反余弦(x是弧度)。特例如下:

Acos(x) = NaN if x < -1 or x > 1

func Atan

func Atan(x float64) float64

求反正切(x是弧度)。特例如下:

Atan(±0) = ±0
Atan(±Inf) = ±Pi/2

func Atan2

func Atan2(y, x float64) float64

类似Atan(y/x),但会根据x,y的正负号确定象限。特例如下(前面的优先):

Atan2(y, NaN) = NaN
Atan2(NaN, x) = NaN
Atan2(+0, x>=0) = +0
Atan2(-0, x>=0) = -0
Atan2(+0, x<=-0) = +Pi
Atan2(-0, x<=-0) = -Pi
Atan2(y>0, 0) = +Pi/2
Atan2(y<0, 0) = -Pi/2
Atan2(+Inf, +Inf) = +Pi/4
Atan2(-Inf, +Inf) = -Pi/4
Atan2(+Inf, -Inf) = 3Pi/4
Atan2(-Inf, -Inf) = -3Pi/4
Atan2(y, +Inf) = 0
Atan2(y>0, -Inf) = +Pi
Atan2(y<0, -Inf) = -Pi
Atan2(+Inf, x) = +Pi/2
Atan2(-Inf, x) = -Pi/2

func Sinh

func Sinh(x float64) float64

求双曲正弦,特例如下:

Sinh(±0) = ±0
Sinh(±Inf) = ±Inf
Sinh(NaN) = NaN

func Cosh

func Cosh(x float64) float64

求双曲余弦,特例如下:

Cosh(±0) = 1
Cosh(±Inf) = +Inf
Cosh(NaN) = NaN

func Tanh

func Tanh(x float64) float64

求双曲正切,特例如下:

Tanh(±0) = ±0
Tanh(±Inf) = ±1
Tanh(NaN) = NaN

func Asinh

func Asinh(x float64) float64

求反双曲正弦,特例如下:

Asinh(±0) = ±0
Asinh(±Inf) = ±Inf
Asinh(NaN) = NaN

func Acosh

func Acosh(x float64) float64

求反双曲余弦,特例如下:

Acosh(+Inf) = +Inf
Acosh(x) = NaN if x < 1
Acosh(NaN) = NaN

func Atanh

func Atanh(x float64) float64

求反双曲正切,特例如下:

Atanh(1) = +Inf
Atanh(±0) = ±0
Atanh(-1) = -Inf
Atanh(x) = NaN if x < -1 or x > 1
Atanh(NaN) = NaN

func Log

func Log(x float64) float64

求自然对数,特例如下:

Log(+Inf) = +Inf
Log(0) = -Inf
Log(x < 0) = NaN
Log(NaN) = NaN

func Log1p

func Log1p(x float64) float64

等价于Log(1+x)。但是在x接近0时,本函数更加精确;特例如下:

Log1p(+Inf) = +Inf
Log1p(±0) = ±0
Log1p(-1) = -Inf
Log1p(x < -1) = NaN
Log1p(NaN) = NaN

func Log2

func Log2(x float64) float64

求2为底的对数;特例和Log相同。

func Log10

func Log10(x float64) float64

求10为底的对数;特例和Log相同。

func Logb

func Logb(x float64) float64

返回x的二进制指数值,可以理解为Trunc(Log2(x));特例如下:

Logb(±Inf) = +Inf
Logb(0) = -Inf
Logb(NaN) = NaN

func Ilogb

func Ilogb(x float64) int

类似Logb,但返回值是整型;特例如下:

Ilogb(±Inf) = MaxInt32
Ilogb(0) = MinInt32
Ilogb(NaN) = MaxInt32

func Frexp

func Frexp(f float64) (frac float64, exp int)

返回一个标准化小数frac和2的整型指数exp,满足f == frac * 2**exp,且0.5 <= Abs(frac) < 1;特例如下:

Frexp(±0) = ±0, 0
Frexp(±Inf) = ±Inf, 0
Frexp(NaN) = NaN, 0

func Ldexp

func Ldexp(frac float64, exp int) float64

Frexp的反函数,返回 frac * 2**exp。特例如下:

Ldexp(±0, exp) = ±0
Ldexp(±Inf, exp) = ±Inf
Ldexp(NaN, exp) = NaN

func Exp

func Exp(x float64) float64

返回E**x;x绝对值很大时可能会溢出为0或者+Inf,x绝对值很小时可能会下溢为1。特例如下:

Exp(+Inf) = +Inf
Exp(NaN) = NaN

func Expm1

func Expm1(x float64) float64

等价于Exp(x)-1,但是在x接近零时更精确;x绝对值很大时可能会溢出为-1或+Inf。特例如下:

Expm1(+Inf) = +Inf
Expm1(-Inf) = -1
Expm1(NaN) = NaN

func Exp2

func Exp2(x float64) float64

返回2**x;特例和Exp相同。

func Pow

func Pow(x, y float64) float64

返回x**y;特例如下(前面的优先):

Pow(x, ±0) = 1 for any x
Pow(1, y) = 1 for any y
Pow(x, 1) = x for any x
Pow(NaN, y) = NaN
Pow(x, NaN) = NaN
Pow(±0, y) = ±Inf for y an odd integer < 0
Pow(±0, -Inf) = +Inf
Pow(±0, +Inf) = +0
Pow(±0, y) = +Inf for finite y < 0 and not an odd integer
Pow(±0, y) = ±0 for y an odd integer > 0
Pow(±0, y) = +0 for finite y > 0 and not an odd integer
Pow(-1, ±Inf) = 1
Pow(x, +Inf) = +Inf for |x| > 1
Pow(x, -Inf) = +0 for |x| > 1
Pow(x, +Inf) = +0 for |x| < 1
Pow(x, -Inf) = +Inf for |x| < 1
Pow(+Inf, y) = +Inf for y > 0
Pow(+Inf, y) = +0 for y < 0
Pow(-Inf, y) = Pow(-0, -y)
Pow(x, y) = NaN for finite x < 0 and finite non-integer y

func Pow10

func Pow10(e int) float64

返回10**e;特例如下:

Pow10(e) = +Inf for e > 309
Pow10(e) = 0 for e < -324

func Gamma

func Gamma(x float64) float64

伽玛函数(当x为正整数时,值为(x-1)!)。特例如下:

Gamma(+Inf) = +Inf
Gamma(+0) = +Inf
Gamma(-0) = -Inf
Gamma(x) = NaN for integer x < 0
Gamma(-Inf) = NaN
Gamma(NaN) = NaN

func Lgamma

func Lgamma(x float64) (lgamma float64, sign int)

返回Gamma(x)的自然对数和正负号。特例如下:

Lgamma(+Inf) = +Inf
Lgamma(0) = +Inf
Lgamma(-integer) = +Inf
Lgamma(-Inf) = -Inf
Lgamma(NaN) = NaN

func Erf

func Erf(x float64) float64

误差函数,特例如下:

Erf(+Inf) = 1
Erf(-Inf) = -1
Erf(NaN) = NaN

func Erfc

func Erfc(x float64) float64

余补误差函数,特例如下:

Erfc(+Inf) = 0
Erfc(-Inf) = 2
Erfc(NaN) = NaN

func J0

func J0(x float64) float64

第一类贝塞尔函数,0阶。特例如下:

J0(±Inf) = 0
J0(0) = 1
J0(NaN) = NaN

func J1

func J1(x float64) float64

第一类贝塞尔函数,1阶。特例如下:

J1(±Inf) = 0
J1(NaN) = NaN

func Jn

func Jn(n int, x float64) float64

第一类贝塞尔函数,n阶。特例如下:

Jn(n, ±Inf) = 0
Jn(n, NaN) = NaN

func Y0

func Y0(x float64) float64

第二类贝塞尔函数,0阶。特例如下:

Y0(+Inf) = 0
Y0(0) = -Inf
Y0(x < 0) = NaN
Y0(NaN) = NaN

func Y1

func Y1(x float64) float64

第二类贝塞尔函数,1阶。特例如下:

Y1(+Inf) = 0
Y1(0) = -Inf
Y1(x < 0) = NaN
Y1(NaN) = NaN

func Yn

func Yn(n int, x float64) float64

第二类贝塞尔函数,n阶。特例如下:

Yn(n, +Inf) = 0
Yn(n > 0, 0) = -Inf
Yn(n < 0, 0) = +Inf if n is odd, -Inf if n is even
Y1(n, x < 0) = NaN
Y1(n, NaN) = NaN
  • big
  • cmplx
  • rand

big

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

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

方法一般为如下格式:

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

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

Constants

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

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

type Word

type Word uintptr

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

type Int

type Int struct {
    neg bool // sign
    abs nat  // absolute value of the integer
}

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"表示八进制;否则为十进制。

func main() {
    i := new(big.Int)
    i.SetString("644", 8)
    fmt.Println(i)
}

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设为xy mod |m|并返回z;如果y <= 0,返回1;如果m == nil 或 m == 0,z设为xy。

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设置为满足ax + by==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'(大写十六进制)。

func main() {
    i := new(big.Int)
    _, err := fmt.Sscan("18446744073709551617", i)
    if err != nil {
        log.Println("error scanning value:", err)
    } else {
        fmt.Println(i)
    }
}

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 {
    // To make zero values for Rat work w/o initialization,
    // a zero value of b (len(b) == 0) acts like b == 1. At
    // the earliest opportunity (when an assignment to the Rat
    // is made), such uninitialized denominators are set to 1.
    // a.neg determines the sign of the Rat, b.neg is ignored.
    a, b Int
}

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。

func main() {
    r := new(big.Rat)
    r.SetString("355/113")
    fmt.Println(r.FloatString(3))
}

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';它们都是等价的。

func main() {
    r := new(big.Rat)
    _, err := fmt.Sscan("1.5000", r)
    if err != nil {
        log.Println("error scanning value:", err)
    } else {
        fmt.Println(r)
    }
}

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接口。

cmplx

cmplx包提供了复数的常用常数和常用函数。

func NaN

func NaN() complex128

返回一个复数的“Not A Number”值。

func IsNaN

func IsNaN(x complex128) bool

如果x的实部或者虚部是“Not A Number”值,则返回真。

func Inf

func Inf() complex128

返回一个复数的无穷大,complex(+Inf, +Inf)。

func IsInf

func IsInf(x complex128) bool

如果x的实部或者虚部是无穷(不管正负),则返回真。

func Abs

func Abs(x complex128) float64

返回x的绝对值(也被称为模)。

func Phase

func Phase(x complex128) float64

返回x的相位(也被称为幅角),返回值范围[-Pi, Pi]。

func Polar

func Polar(x complex128) (r, θ float64)

将直角坐标的复数表示为极坐标(r, θ)。其中r是x的绝对值,θ是x的相位,范围[-Pi, Pi]。

func Rect

func Rect(r, θ float64) complex128

返回极坐标(r, θ)表示的复数。

func Conj

func Conj(x complex128) complex128

返回x的共轭复数(实部相等,虚部相反)。

func Sqrt

func Sqrt(x complex128) complex128

返回x的平方根。返回值的实部不小于0,而虚部的正负号和x的虚部相同。

func Log

func Log(x complex128) complex128

返回x的自然对数。

func Log10

func Log10(x complex128) complex128

返回x的常用对数。

func Exp

func Exp(x complex128) complex128

返回e**x。

func Pow

func Pow(x, y complex128) complex128

返回x**y;有如下特例:

Pow(0, ±0)  returns 1+0i
Pow(0, c)   如果image(c)==0,则当real(c)<0时返回Inf+0i;否则返回Inf+Inf i

func Sin

func Sin(x complex128) complex128

求正弦。

func Cos

func Cos(x complex128) complex128

求余弦。

func Tan

func Tan(x complex128) complex128

求正切。

func Cot

func Cot(x complex128) complex128

求余切。

func Asin

func Asin(x complex128) complex128

求反正弦。

func Acos

func Acos(x complex128) complex128

求反余弦。

func Atan

func Atan(x complex128) complex128

求反正切。

func Sinh

func Sinh(x complex128) complex128

求双曲正弦。

func Cosh

func Cosh(x complex128) complex128

求双曲余弦。

func Tanh

func Tanh(x complex128) complex128

求双曲正切。

func Asinh

func Asinh(x complex128) complex128

求反双曲正弦。

func Acosh

func Acosh(x complex128) complex128

求反双曲余弦。

func Atanh

func Atanh(x complex128) complex128

求反双曲正切。

rand

随机数从资源生成。包水平的函数都使用的默认的公共资源。该资源会在程序每次运行时都产生确定的序列。如果需要每次运行产生不同的序列,应使用Seed函数进行初始化。默认资源可以安全的用于多go程并发。

type Source

type Source interface {
    Int63() int64
    Seed(seed int64)
}

Source代表一个生成均匀分布在范围[0, 1<<63)的int64值的(伪随机的)资源。

func NewSource

func NewSource(seed int64) Source

使用给定的种子创建一个伪随机资源。

type Rand

type Rand struct {
    src Source
    s64 Source64 // non-nil if src is source64

    // readVal contains remainder of 63-bit integer used for bytes
    // generation during most recent Read call.
    // It is saved so next Read call can start where the previous
    // one finished.
    readVal int64
    // readPos indicates the number of low-order bytes of readVal
    // that are still valid.
    readPos int8
}

Rand生成服从多种分布的随机数。

func New

func New(src Source) *Rand

返回一个使用src生产的随机数来生成其他各种分布的随机数值的*Rand。

func (*Rand) Seed

func (r *Rand) Seed(seed int64)

使用给定的seed来初始化生成器到一个确定的状态。

func main() {
   rand.Seed(42) // Try changing this number!
   answers := []string{
      "It is certain",
      "It is decidedly so",
      "Without a doubt",
      "Yes definitely",
      "You may rely on it",
      "As I see it yes",
      "Most likely",
      "Outlook good",
      "Yes",
      "Signs point to yes",
      "Reply hazy try again",
      "Ask again later",
      "Better not tell you now",
      "Cannot predict now",
      "Concentrate and ask again",
      "Don't count on it",
      "My reply is no",
      "My sources say no",
      "Outlook not so good",
      "Very doubtful",
   }
   fmt.Println("Magic 8-Ball says:", answers[rand.Intn(len(answers))])
}

func (*Rand) Int

func (r *Rand) Int() int

返回一个非负的伪随机int值。

func (*Rand) Int31

func (r *Rand) Int31() int32

返回一个int32类型的非负的31位伪随机数。

func (*Rand) Int63

func (r *Rand) Int63() int64

返回一个int64类型的非负的63位伪随机数。

func (*Rand) Uint32

func (r *Rand) Uint32() uint32

返回一个uint32类型的非负的32位伪随机数。

func (*Rand) Intn

func (r *Rand) Intn(n int) int

返回一个取值范围在[0,n)的伪随机int值,如果n<=0会panic。

func (*Rand) Int31n

func (r *Rand) Int31n(n int32) int32

返回一个取值范围在[0,n)的伪随机int32值,如果n<=0会panic

func (*Rand) Int63n

func (r *Rand) Int63n(n int64) int64

返回一个取值范围在[0,n)的伪随机int64值,如果n<=0会panic。

func (*Rand) Float32

func (r *Rand) Float32() float32

返回一个取值范围在[0.0, 1.0)的伪随机float32值。

func (*Rand) Float64

func (r *Rand) Float64() float64

返回一个取值范围在[0.0, 1.0)的伪随机float64值。

func (*Rand) NormFloat64

func (r *Rand) NormFloat64() float64

返回一个服从标准正态分布(标准差=1,期望=0)、取值范围在[-math.MaxFloat64, +math.MaxFloat64]的float64值

如果要生成不同的正态分布值,调用者可用如下代码调整输出:

sample = NormFloat64() * 标准差 + 期望

func (*Rand) ExpFloat64

func (r *Rand) ExpFloat64() float64

返回一个服从标准指数分布(率参数=1,率参数是期望的倒数)、取值范围在(0, +math.MaxFloat64]的float64值

如要生成不同的指数分布值,调用者可用如下代码调整输出:

sample = ExpFloat64() / 率参数

func (*Rand) Perm

func (r *Rand) Perm(n int) []int

返回一个有n个元素的,[0,n)范围内整数的伪随机排列的切片。

type Zipf

type Zipf struct {
    r            *Rand
    imax         float64
    v            float64
    q            float64
    s            float64
    oneminusQ    float64
    oneminusQinv float64
    hxm          float64
    hx0minusHxm  float64
}

Zipf生成服从齐普夫分布的随机数。

func NewZipf

func NewZipf(r *Rand, s float64, v float64, imax uint64) *Zipf

NewZipf返回一个[0, imax]范围内的齐普夫随机数生成器。

齐普夫分布:值k出现的几率p(k)正比于(v+k)**(-s),其中s>1且k>=0且v>=1。

func (*Zipf) Uint64

func (z *Zipf) Uint64() uint64

Uint64返回一个服从Zipf对象描述的齐普夫分布的随机数。

func Seed

func Seed(seed int64)

使用给定的seed将默认资源初始化到一个确定的状态;如未调用Seed,默认资源的行为就好像调用了Seed(1)。

func Int

func Int() int

返回一个非负的伪随机int值。

func Int31

func Int31() int32

返回一个int32类型的非负的31位伪随机数。

func Int63

func Int63() int64

返回一个int64类型的非负的63位伪随机数。

func Uint32

func Uint32() uint32

返回一个uint32类型的非负的32位伪随机数。

func Intn

func Intn(n int) int

返回一个取值范围在[0,n)的伪随机int值,如果n<=0会panic。

func Int31n

func Int31n(n int32) int32

返回一个取值范围在[0,n)的伪随机int32值,如果n<=0会panic。

func Int63n

func Int63n(n int64) int64

返回一个取值范围在[0, n)的伪随机int64值,如果n<=0会panic。

func Float32

func Float32() float32

返回一个取值范围在[0.0, 1.0)的伪随机float32值。

func Float64

func Float64() float64

返回一个取值范围在[0.0, 1.0)的伪随机float64值。

func NormFloat64

func NormFloat64() float64

返回一个服从标准正态分布(标准差=1,期望=0)、取值范围在[-math.MaxFloat64, +math.MaxFloat64]的float64值

如果要生成不同的正态分布值,调用者可用如下代码调整输出:

sample = NormFloat64() * 标准差 + 期望

func ExpFloat64

func ExpFloat64() float64

返回一个服从标准指数分布(率参数=1,率参数是期望的倒数)、取值范围在(0, +math.MaxFloat64]的float64值

如要生成不同的指数分布值,调用者可用如下代码调整输出:

sample = ExpFloat64() / 率参数

func Perm

func Perm(n int) []int

返回一个有n个元素的,[0,n)范围内整数的伪随机排列的切片。

func main() {
   r := rand.New(rand.NewSource(99))
   w := tabwriter.NewWriter(os.Stdout, 1, 1, 1, ' ', 0)
   defer w.Flush()
   show := func(name string, v1, v2, v3 interface{}) {
      fmt.Fprintf(w, "%s\t%v\t%v\t%v\n", name, v1, v2, v3)
   }
   show("Float32", r.Float32(), r.Float32(), r.Float32())
   show("Float64", r.Float64(), r.Float64(), r.Float64())
   show("ExpFloat64", r.ExpFloat64(), r.ExpFloat64(), r.ExpFloat64())
   show("NormFloat64", r.NormFloat64(), r.NormFloat64(), r.NormFloat64())
   show("Int31", r.Int31(), r.Int31(), r.Int31())
   show("Int63", r.Int63(), r.Int63(), r.Int63())
   show("Uint32", r.Int63(), r.Int63(), r.Int63())
   show("Intn(10)", r.Intn(10), r.Intn(10), r.Intn(10))
   show("Int31n(10)", r.Int31n(10), r.Int31n(10), r.Int31n(10))
   show("Int63n(10)", r.Int63n(10), r.Int63n(10), r.Int63n(10))
   show("Perm", r.Perm(5), r.Perm(5), r.Perm(5))
}

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

本文来自:简书

感谢作者:DevilRoshan

查看原文:Golang标准库——math

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

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