非常教程

Go参考手册

math/big

math/big

  • import "math/big"
  • 概述
  • 索引
  • 示例

概述

Big包实现了任意精度算术(大数)。支持以下数字类型:

Int    signed integers
Rat    rational numbers
Float  floating-point numbers

Int,Rat 或 Float 的零值对应于0。因此,可以用通常的方式声明新值,并且在没有进一步初始化的情况下表示0:

var x Int        //&x是一个值为0的int型
var r = &Rat{}   //r是一个值为0的Rat型
y := new(Float)  //y是一个值为0的float型

或者,可以使用表单的工厂函数分配和初始化新值:

func NewT(v V) *T

例如,NewInt(x)返回* Int,设置为int64参数x的值,NewRat(a, b)返回设置为a/b的小数部分a/b,其中a和b是int64值,NewFloat(f)返回一个初始化为float64参数f的Float。显式设置器提供了更多的灵活性,例如:

var z1 Int
z1.SetUint64(123)                 // z1 := 123
z2 := new(Rat).SetFloat64(1.25)   // z2 := 5/4
z3 := new(Float).SetInt(z1)       // z3 := 123.0

Setters,数字操作和谓词被表示为以下形式的方法:

func (z *T) SetV(v V) *T          // z = v
func (z *T) Unary(x *T) *T        // z = unary x
func (z *T) Binary(x, y *T) *T    // z = x binary y
func (x *T) Pred() P              // p = pred(x)

用 T,Int,Rat 或 Float 中的一个。对于一元和二元运算,结果是接收器(在这种情况下通常命名为z;见下文); 如果它是操作数x或y中的一个,它可能会被安全覆盖(以及它的内存重用)。

算术表达式通常写成一系列单独的方法调用,每个调用都对应一个操作。接收方表示结果,方法参数是操作的操作数。例如,给定三个* Int值a,b和c,调用

c.Add(a, b)

计算总和 a + b 并将结果存储在 c 中,覆盖之前在 c 中保存的任何值。除非另有说明,否则操作允许混叠参数,因此可以完全写入。

sum.Add(sum, x)

在一个和中累加值 x 。

(通过总是通过接收器传递结果值,可以更好地控制内存使用,而不必为每个结果分配新的内存,操作可以重新使用分配给结果值的空间,并用新的值覆盖该值导致该过程。)

符号约定:传入方法参数(包括接收者)在API中被一致命名以阐明其用法。传入的操作数通常命名为 x,y,a,b 等等,但从不 命名为z 。指定结果的参数被命名为 z (通常是接收者)。

例如, (*Int).Add 的参数被命名为 x 和 y,并且因为接收者指定了结果目的地,所以它被称为z:

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

这种形式的方法通常也会返回传入的接收者,以启用简单的呼叫链接。

不需要传入结果值的方法(例如Int.Sign),只需返回结果。在这种情况下,接收器通常是第一个操作数,名为x:

func (x *Int) Sign() int

各种方法支持字符串和相应数值之间的转换,反之亦然:* Int,* Rat 和 * Float 值为值的(默认)字符串表示形式实现Stringer接口,还提供了SetString方法来以各种支持的格式初始化字符串中的值(请参阅相应的SetString文档)。

最后,* Int,* Rat和* Float满足 fmt 软件包的 Scanner 界面进行扫描和格式化界面格式化打印(* Rat除外)。

示例(EConvergents)

这个例子演示了如何使用big.Rat来计算常数 e(自然对数的底数)的有理收敛序列中的前15个项。

package main

import (
	"fmt"
	"math/big"
)

//使用e的经典连续分数
// e = [1; 0,1,1,2,1,1,... 2n,1,1,......]
//即,对于第n个术语,请使用
// 1如果n mod 3!= 1
//(n-1)/ 3 * 2如果n mod 3 == 1
func recur(n, lim int64) *big.Rat {
	term := new(big.Rat)
	if n%3 != 1 {
		term.SetInt64(1)
	} else {
		term.SetInt64((n - 1) / 3 * 2)
	}

	if n > lim {
		return term
	}

//直接将frac初始化为小数
//recur结果的倒数
	frac := new(big.Rat).Inv(recur(n+1, lim))

	return term.Add(term, frac)
}

//这个实例演示了如何使用big.Rat来计算
//在理性收敛序列中的前15个项
//常数e(自然对数的基数
func main() {
	for i := 1; i <= 15; i++ {
		r := recur(0, int64(i))


//将r打印为分数和浮点数。
//由于big.Rat实现了fmt.Formatter,我们可以使用%-13s
//得到分数的左对齐字符串表示。
		fmt.Printf("%-13s = %s\n", r, r.FloatString(8))
	}

}

示例(Fibonacci)

这个例子演示了如何使用big.Int来计算100位十进制数字的最小斐波那契数,并测试它是否为素数。

package main

import (
	"fmt"
	"math/big"
)

func main() {

//使用序列中的前两个数字初始化两个大的整数。
		a := big.NewInt(0)
	b := big.NewInt(1)


//初始化限制为10 ^ 99,最小的100位整数。
		var limit big.Int
	limit.Exp(big.NewInt(10), big.NewInt(99), nil)


//当a小于1e100时循环。
	for a.Cmp(&limit) < 0 {
		//计算下一个Fibonacci数,将其存储在a中。
		a.Add(a, b)
		//交换a和b,使b成为序列中的下一个数字。
		a, b = b, a
	}
	fmt.Println(a)// 100位Fibonacci数

//测试一个素数。
//(ProbablyPrimes的论点设定了米勒 - 拉宾的数量
//要进行的回合。 20是一个很好的值。) 
	fmt.Println(a.ProbablyPrime(20))

}

示例(Sqrt2)

此示例说明如何使用 big.Float 以200位的精度计算2的平方根,以及如何将结果打印为十进制数。

package main

import (
	"fmt"
	"math"
	"math/big"
)

func main() {
	// 我们将做计算与200位精度在尾数。
	const prec = 200

	// 用牛顿法计算2的平方根。我们从
	// sqrt (2) 的初始估计值, 然后循环访问:
	//     x_{n+1} = 1/2 * ( x_n + (2.0 / x_n) )

	// 因为牛顿的方法加倍的正确数字在每个
	// 迭代, 我们至少需要 log_2 (prec) 步骤。
	steps := int(math.Log2(prec))

	// 初始化计算所需的值。
	two := new(big.Float).SetPrec(prec).SetInt64(2)
	half := new(big.Float).SetPrec(prec).SetFloat64(0.5)

	// 使用1作为初始估计值。
	x := new(big.Float).SetPrec(prec).SetInt64(1)

	// 我们使用 t 作为一个临时变量。没有必要设定它的精确度
	// 从大。浮动值 (== 0) 精度自动承担
	// 作为结果使用时参数的最大精度 (接收者)
	// 大。浮动操作。
	t := new(big.Float)

	// 迭代。
	for i := 0; i <= steps; i++ {
		t.Quo(two, x)  // t = 2.0 / x_n
		t.Add(x, t)    // t = x_n + (2.0 / x_n)
		x.Mul(half, t) // x_{n+1} = 0.5 * t
	}

	// 我们可以使用常规的裂变材料。自大以来的 Printf 动词。浮动实现了裂变材料。格式
	fmt.Printf("sqrt(2) = %.50f\n", x)

	// 打印2和之间的x*x错误。
	t.Mul(x, x) // t = x*x
	fmt.Printf("error = %e\n", t.Sub(two, t))

}

索引

  • 常量
  • func Jacobi(x, y *Int) int
  • type Accuracy
  • func (i Accuracy) String() string
  • type ErrNaN
  • func (err ErrNaN) Error() string
  • type Float
  • func NewFloat(x float64) *Float
  • func ParseFloat(s string, base int, prec uint, mode RoundingMode) (f *Float, b int, err error)
  • func (z *Float) Abs(x *Float) *Float
  • func (x *Float) Acc() Accuracy
  • func (z *Float) Add(x, y *Float) *Float
  • func (x *Float) Append(buf []byte, fmt byte, prec int) []byte
  • func (x *Float) Cmp(y *Float) int
  • func (z *Float) Copy(x *Float) *Float
  • func (x *Float) Float32() (float32, Accuracy)
  • func (x *Float) Float64() (float64, Accuracy)
  • func (x *Float) Format(s fmt.State, format rune)
  • func (z *Float) GobDecode(buf []byte) error
  • func (x *Float) GobEncode() ([]byte, error)
  • func (x *Float) Int(z *Int) (*Int, Accuracy)
  • func (x *Float) Int64() (int64, Accuracy)
  • func (x *Float) IsInf() bool
  • func (x *Float) IsInt() bool
  • func (x *Float) MantExp(mant *Float) (exp int)
  • func (x *Float) MarshalText() (text []byte, err error)
  • func (x *Float) MinPrec() uint
  • func (x *Float) Mode() RoundingMode
  • func (z *Float) Mul(x, y *Float) *Float
  • func (z *Float) Neg(x *Float) *Float
  • func (z *Float) Parse(s string, base int) (f *Float, b int, err error)
  • func (x *Float) Prec() uint
  • func (z *Float) Quo(x, y *Float) *Float
  • func (x *Float) Rat(z *Rat) (*Rat, Accuracy)
  • func (z *Float) Scan(s fmt.ScanState, ch rune) error
  • func (z *Float) Set(x *Float) *Float
  • func (z *Float) SetFloat64(x float64) *Float
  • func (z *Float) SetInf(signbit bool) *Float
  • func (z *Float) SetInt(x *Int) *Float
  • func (z *Float) SetInt64(x int64) *Float
  • func (z *Float) SetMantExp(mant *Float, exp int) *Float
  • func (z *Float) SetMode(mode RoundingMode) *Float
  • func (z *Float) SetPrec(prec uint) *Float
  • func (z *Float) SetRat(x *Rat) *Float
  • func (z *Float) SetString(s string) (*Float, bool)
  • func (z *Float) SetUint64(x uint64) *Float
  • func (x *Float) Sign() int
  • func (x *Float) Signbit() bool
  • func (x *Float) String() string
  • func (z *Float) Sub(x, y *Float) *Float
  • func (x *Float) Text(format byte, prec int) string
  • func (x *Float) Uint64() (uint64, Accuracy)
  • func (z *Float) UnmarshalText(text []byte) error
  • type Int
  • func NewInt(x int64) *Int
  • func (z *Int) Abs(x *Int) *Int
  • func (z *Int) Add(x, y *Int) *Int
  • func (z *Int) And(x, y *Int) *Int
  • func (z *Int) AndNot(x, y *Int) *Int
  • func (x *Int) Append(buf []byte, base int) []byte
  • func (z *Int) Binomial(n, k int64) *Int
  • func (x *Int) Bit(i int) uint
  • func (x *Int) BitLen() int
  • func (x *Int) Bits() []Word
  • func (x *Int) Bytes() []byte
  • func (x *Int) Cmp(y *Int) (r int)
  • func (z *Int) Div(x, y *Int) *Int
  • func (z *Int) DivMod(x, y, m *Int) (*Int, *Int)
  • func (z *Int) Exp(x, y, m *Int) *Int
  • func (x *Int) Format(s fmt.State, ch rune)
  • func (z *Int) GCD(x, y, a, b *Int) *Int
  • func (z *Int) GobDecode(buf []byte) error
  • func (x *Int) GobEncode() ([]byte, error)
  • func (x *Int) Int64() int64
  • func (x *Int) IsInt64() bool
  • func (x *Int) IsUint64() bool
  • func (z *Int) Lsh(x *Int, n uint) *Int
  • func (x *Int) MarshalJSON() ([]byte, error)
  • func (x *Int) MarshalText() (text []byte, err error)
  • func (z *Int) Mod(x, y *Int) *Int
  • func (z *Int) ModInverse(g, n *Int) *Int
  • func (z *Int) ModSqrt(x, p *Int) *Int
  • func (z *Int) Mul(x, y *Int) *Int
  • func (z *Int) MulRange(a, b int64) *Int
  • func (z *Int) Neg(x *Int) *Int
  • func (z *Int) Not(x *Int) *Int
  • func (z *Int) Or(x, y *Int) *Int
  • func (x *Int) ProbablyPrime(n int) bool
  • func (z *Int) Quo(x, y *Int) *Int
  • func (z *Int) QuoRem(x, y, r *Int) (*Int, *Int)
  • func (z *Int) Rand(rnd *rand.Rand, n *Int) *Int
  • func (z *Int) Rem(x, y *Int) *Int
  • func (z *Int) Rsh(x *Int, n uint) *Int
  • func (z *Int) Scan(s fmt.ScanState, ch rune) error
  • func (z *Int) Set(x *Int) *Int
  • func (z *Int) SetBit(x *Int, i int, b uint) *Int
  • func (z *Int) SetBits(abs []Word) *Int
  • func (z *Int) SetBytes(buf []byte) *Int
  • func (z *Int) SetInt64(x int64) *Int
  • func (z *Int) SetString(s string, base int) (*Int, bool)
  • func (z *Int) SetUint64(x uint64) *Int
  • func (x *Int) Sign() int
  • func (z *Int) Sqrt(x *Int) *Int
  • func (x *Int) String() string
  • func (z *Int) Sub(x, y *Int) *Int
  • func (x *Int) Text(base int) string
  • func (x *Int) Uint64() uint64
  • func (z *Int) UnmarshalJSON(text []byte) error
  • func (z *Int) UnmarshalText(text []byte) error
  • func (z *Int) Xor(x, y *Int) *Int
  • type Rat
  • func NewRat(a, b int64) *Rat
  • func (z *Rat) Abs(x *Rat) *Rat
  • func (z *Rat) Add(x, y *Rat) *Rat
  • func (x *Rat) Cmp(y *Rat) int
  • func (x *Rat) Denom() *Int
  • func (x *Rat) Float32() (f float32, exact bool)
  • func (x *Rat) Float64() (f float64, exact bool)
  • func (x *Rat) FloatString(prec int) string
  • func (z *Rat) GobDecode(buf []byte) error
  • func (x *Rat) GobEncode() ([]byte, error)
  • func (z *Rat) Inv(x *Rat) *Rat
  • func (x *Rat) IsInt() bool
  • func (x *Rat) MarshalText() (text []byte, err error)
  • func (z *Rat) Mul(x, y *Rat) *Rat
  • func (z *Rat) Neg(x *Rat) *Rat
  • func (x *Rat) Num() *Int
  • func (z *Rat) Quo(x, y *Rat) *Rat
  • func (x *Rat) RatString() string
  • func (z *Rat) Scan(s fmt.ScanState, ch rune) error
  • func (z *Rat) Set(x *Rat) *Rat
  • func (z *Rat) SetFloat64(f float64) *Rat
  • func (z *Rat) SetFrac(a, b *Int) *Rat
  • func (z *Rat) SetFrac64(a, b int64) *Rat
  • func (z *Rat) SetInt(x *Int) *Rat
  • func (z *Rat) SetInt64(x int64) *Rat
  • func (z *Rat) SetString(s string) (*Rat, bool)
  • func (x *Rat) Sign() int
  • func (x *Rat) String() string
  • func (z *Rat) Sub(x, y *Rat) *Rat
  • func (z *Rat) UnmarshalText(text []byte) error
  • type RoundingMode
  • func (i RoundingMode) String() string
  • type Word
  • Bugs

示例

Float.Add Float.Cmp Float.Scan Float (Shift) Int.Scan Int.SetString Rat.Scan Rat.SetString RoundingMode Package (EConvergents) Package (Fibonacci) Package (Sqrt2)

文件包

accuracy_string.go arith.go arith_decl.go decimal.go doc.go float.go floatconv.go floatmarsh.go ftoa.go int.go intconv.go intmarsh.go nat.go natconv.go prime.go rat.go ratconv.go ratmarsh.go roundingmode_string.go

常量

指数和精度限制。

const (
        MaxExp  = math.MaxInt32  // largest supported exponent
        MinExp  = math.MinInt32  // smallest supported exponent
        MaxPrec = math.MaxUint32 // largest (theoretically) supported precision; likely memory-limited
)

MaxBase是字符串转换所接受的最大数字基数。

const MaxBase = 'z' - 'a' + 10 + 1

func Jacobi(显示源代码)

func Jacobi(x, y *Int) int

Jacobi返回Jacobi符号(x/y),即+1,-1或0. y参数必须是奇数。

type Accuracy(显示源代码)

准确度描述了最近一次生成Float值的操作产生的舍入误差,相对于精确值。

type Accuracy int8

描述浮点精度的常量。

const (
        Below Accuracy = -1
        Exact Accuracy = 0
        Above Accuracy = +1
)

func (Accuracy) String(显示源代码)

func (i Accuracy) String() string

type ErrNaN(显示源代码)

Float 操作引发了一个 ErrNaN 恐慌,该操作将导致遵循 IEEE-754 规则的 NaN 。ErrNaN 实现错误接口。

type ErrNaN struct {
        // contains filtered or unexported fields
}

func (ErrNaN) Error(显示源代码)

func (err ErrNaN) Error() string

type Float(显示源代码)

非零有限Float表示一个多精度浮点数

sign × mantissa × 2**exponent

其中0.5 <=尾数<1.0,且MinExp <=指数<= MaxExp。浮点数也可以是零 (+0, -0) 或无限(+Inf, -Inf)。所有浮点都是有序的,并且两个浮点x和y的排序由x.Cmp(y)定义。

每个浮点值还具有精度,舍入模式和准确度。精度是可用于表示值的尾数位的最大数量。舍入模式指定应如何舍入结果以适合尾数位,准确性描述相对于精确结果的舍入误差。

除非另有规定,否则指定结果的* Float变量(通常通过接收方除MantExp外)的所有操作(包括setter)根据结果变量的精度和舍入模式对数值结果进行舍入。

如果提供的结果精度为0(见下文),则在进行舍入之前将其设置为具有最大精度值的参数的精度,舍入模式保持不变。因此,作为结果参数提供的未初始化的 Floats 将其精度设置为由操作数确定的合理值,并且它们的模式是RoundingMode(ToNearestEven)的零值。

通过将所需精度设置为24或53并使用匹配舍入模式(通常为ToNearestEven),Float 操作产生与对应于正常(即非denormal)float32 或 float64 的操作数的相应 float32 或 float64 IEEE-754 算法相同的结果数字。对于与 IEEE-754 不同的值,指数下溢和溢出会导致0或无穷大,因为 Float 指数具有更大的范围。

Float 的零(未初始化)值已准备好使用,并精确地表示数字+0.0,精度为0,舍入模式为 ToNearestEven 。

type Float struct {
        // 包含筛选或 unexported 字段
}

示例(Shift)

package main

import (
	"fmt"
	"math/big"
)

func main() {
	// Implement Float "shift" by modifying the (binary) exponents directly.
	for s := -5; s <= 5; s++ {
		x := big.NewFloat(0.5)
		x.SetMantExp(x, x.MantExp(nil)+s) // shift x by s
		fmt.Println(x)
	}
}

func NewFloat(显示源代码)

func NewFloat(x float64) *Float

NewFloat 分配并返回一个新的 Float 设置为 x ,精度为53,舍入模式为 ToNearestEven 。如果 x 是 NaN , NewFloat 会与 ErrNaN 混淆。

func ParseFloat(显示源代码)

func ParseFloat(s string, base int, prec uint, mode RoundingMode) (f *Float, b int, err error)

ParseFloat 就像f.Parse(s,base),f 设置为给定的精度和舍入模式。

func (*Float) Abs(显示源代码)

func (z *Float) Abs(x *Float) *Float

Abs 将 z 设置为(可能为四舍五入)值 |x|(x的绝对值)并返回 z 。

func (*Float) Acc(显示源代码)

func (x *Float) Acc() Accuracy

Acc返回最近操作产生的x的精确度。

func (*Float) Add(显示源代码)

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

将 z 设置为舍入和 x + y 并返回 z 。如果 z 的精度为0,则在操作之前将其更改为x或y的精度中的较大者。舍入是根据z的精度和舍入模式执行的;并且z的准确性报告相对于确切(不是四舍五入)结果的结果错误。如果x和y是符号相反的无穷大,则用 ErrNaN 添加恐慌。在这种情况下 z 的值是未定义的。

BUG(gri)四舍五入 ToNegativeInf 时,Float 值的符号舍入为0是不正确的。

示例

package main

import (
	"fmt"
	"math/big"
)

func main() {
	// Operate on numbers of different precision.
	var x, y, z big.Float
	x.SetInt64(1000)          // x is automatically set to 64bit precision
	y.SetFloat64(2.718281828) // y is automatically set to 53bit precision
	z.SetPrec(32)
	z.Add(&x, &y)
	fmt.Printf("x = %.10g (%s, prec = %d, acc = %s)\n", &x, x.Text('p', 0), x.Prec(), x.Acc())
	fmt.Printf("y = %.10g (%s, prec = %d, acc = %s)\n", &y, y.Text('p', 0), y.Prec(), y.Acc())
	fmt.Printf("z = %.10g (%s, prec = %d, acc = %s)\n", &z, z.Text('p', 0), z.Prec(), z.Acc())
}

func (*Float) Append(显示源代码)

func (x *Float) Append(buf []byte, fmt byte, prec int) []byte

追加附加到 buf 浮点数 x 的字符串形式,由x.Text生成,并返回扩展缓冲区。

func (*Float) Cmp(显示源代码)

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

Cmp 比较 x 和 y 并返回:

-1 if x <  y
 0 if x == y (incl. -0 == 0, -Inf == -Inf, and +Inf == +Inf)
+1 if x >  y

示例

package main

import (
	"fmt"
	"math"
	"math/big"
)

func main() {
	inf := math.Inf(1)
	zero := 0.0

	operands := []float64{-inf, -1.2, -zero, 0, +1.2, +inf}

	fmt.Println("   x     y  cmp")
	fmt.Println("---------------")
	for _, x64 := range operands {
		x := big.NewFloat(x64)
		for _, y64 := range operands {
			y := big.NewFloat(y64)
			fmt.Printf("%4g  %4g  %3d\n", x, y, x.Cmp(y))
		}
		fmt.Println()
	}

}

func (*Float) Copy(显示源代码)

func (z *Float) Copy(x *Float) *Float

将 z 设置为 x ,具有相同的精度,舍入模式,精度等于 x ,并返回 z 。即使 z 和 x 相同,x 也不会改变。

func (*Float) Float32(显示源代码)

func (x *Float) Float32() (float32, Accuracy)

Float32返回最接近x的float32值。如果x太小而不能用float32(| x | <math.SmallestNonzeroFloat32)表示,则结果分别为(0,Below)或(-0,Above),具体取决于x的符号。如果x太大而无法用float32(| x |> math.MaxFloat32)表示,则结果为(+ Inf,Above)或(-Inf,Below),具体取决于x的符号。

func (*Float) Float64(显示源代码)

func (x *Float) Float64() (float64, Accuracy)

Float64返回最接近x的float64值。如果x太小而无法用float64(|x| < math.SmallestNonzeroFloat64)表示,则结果分别为 (0, Below) 或 (-0, Above),具体取决于x的符号。如果x太大而无法用float64(|x| > math.MaxFloat64)表示,则结果为(+Inf, Above)或(-Inf, Below),具体取决于x的符号。

func (*Float) Format(显示源代码)

func (x *Float) Format(s fmt.State, format rune)

格式实现了fmt.Formatter。它接受浮点数的所有常规格式('b','e','E','f','F','g','G')以及'p'和'v' 。请参阅(* Float).Text以解释'p'。'v'格式被处理为'g'。格式还支持以数字表示的最小精度,输出字段宽度以及用于符号控制的格式标志'+'和'',空格或零填充为'0',左或右对齐为' - ' 。有关详细信息,请参阅 fmt 包。

func (*Float) GobDecode(显示源文件)

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

GobDecode实现了gob.GobDecoder接口。除非z的精度为0,否则结果会按z的精度和舍入模式进行舍入,在这种情况下,z将精确设置为解码值。

func (*Float) GobEncode(显示源文件)

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

GobEncode实现gob.GobEncoder接口。Float值及其所有属性(精度,舍入模式,准确度)将被封送。

func (*Float) Int(显示源文件)

func (x *Float) Int(z *Int) (*Int, Accuracy)

Int返回将 x 截断为零的结果;如果 x 是无穷大,则为零。结果是Exact if x.IsInt(); 否则它是下面的x> 0和上面的x <0。如果提供了非零* Int参数 z,则 Int 将结果存储在z中,而不是分配新的 Int 。

func (*Float) Int64(显示源文件)

func (x *Float) Int64() (int64, Accuracy)

Int64返回将x截断为零的整数。如果math.MinInt64 <= x <= math.MaxInt64,则结果为Exact(如果x是整数),否则结果为Above(x <0)或Below(x> 0)。结果是(math.MinInt64,Above)for x <math.MinInt64,和(math.MaxInt64,Below)for x> math.MaxInt64。

func (*Float) IsInf(显示源文件)

func (x *Float) IsInf() bool

IsInf报告x是否是+ Inf或-Inf。

func (*Float) IsInt(显示源文件)

func (x *Float) IsInt() bool

IsInt报告 x 是否是整数。±Inf值不是整数。

func (*Float) MantExp(显示源文件)

func (x *Float) MantExp(mant *Float) (exp int)

MantExp将x分成尾数和指数分量并返回指数。如果提供非零mant参数,则其值被设置为x的尾数,具有与x相同的精度和舍入模式。组件满足x == mant×2 ** exp,其中 0.5 <= |mant| < 1.0。用nil参数调用MantExp是获得接收者指数的有效方法。

特殊情况是:

(  ±0).MantExp(mant) = 0, with mant set to   ±0
(±Inf).MantExp(mant) = 0, with mant set to ±Inf

x和mant可以是相同的,在这种情况下x被设置为其尾数值。

func (*Float) MarshalText(显示源文件)

func (x *Float) MarshalText() (text []byte, err error)

MarshalText 实现了encoding.TextMarshaler接口。只有浮点值被编组(全精度),其他属性(如精度或精度)被忽略。

func (*Float) MinPrec(显示源文件)

func (x *Float) MinPrec() uint

MinPrec 返回精确表示x所需的最小精度(即x.SetPrec(prec)将开始舍入x)之前的最小精度。对于 |x| == 0和|x| == Inf。结果为0

func (*Float) Mode(显示源文件)

func (x *Float) Mode() RoundingMode

模式返回 x 的舍入模式。

func (*Float) Mul(显示源文件)

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

Mul 将 z 设置为舍入乘积 x * y 并返回 z 。精确度,舍入和准确性报告与 Add 相同。如果一个操作数为零而另一个操作数为无穷大,则 Mul 会与 ErrNaN 发生混乱。在这种情况下 z 的值是未定义的。

func (*Float) Neg(显示源文件)

func (z *Float) Neg(x *Float) *Float

Neg将z设置为x的(可能为四舍五入的)值,其符号取反,并返回z。

func (*Float) Parse(显示源文件)

func (z *Float) Parse(s string, base int) (f *Float, b int, err error)

Parse解析 s ,其中必须包含浮点数的文本表示,其中尾数在给定的转换基数(指数始终为十进制数)或表示无限值的字符串中。

它将 z 设置为相应浮点值的(可能为四舍五入的)值,并返回 z,实际的基数 b 和错误错误(如果有的话)。整个字符串(不只是一个前缀)必须被成功消耗。如果z的精度为0,则在舍入生效之前将其更改为64。该号码必须是以下格式:

number   = [ sign ] [ prefix ] mantissa [ exponent ] | infinity .
sign     = "+" | "-" .
prefix   = "0" ( "x" | "X" | "b" | "B" ) .
mantissa = digits | digits "." [ digits ] | "." digits .
exponent = ( "E" | "e" | "p" ) [ sign ] digits .
digits   = digit { digit } .
digit    = "0" ... "9" | "a" ... "z" | "A" ... "Z" .
infinity = [ sign ] ( "inf" | "Inf" ) .

基本参数必须是0,2,10或16。提供无效的基本参数将导致运行时恐慌。

对于基数0,数字前缀确定实际基数:“0x”或“0X”的前缀选择基数16,而“0b”或“0B”前缀选择基数2; 否则,实际基数为10,并且不接受前缀。不支持八进制前缀“0”(前导“0”简单地被认为是“0”)。

“p”指数表示二进制(而不是十进制)指数; 例如“0x1.fffffffffffffp1023”(使用基数0)表示float64的最大值。对于十六进制mantissae,指数必须是二进制的(如果存在的话)(“e”或“E”指数指示不能与尾数数字区分开来)。

返回的* Float f是零,并且 z 的值有效,但是如果报告错误则不定义。

func (*Float) Prec(显示源文件)

func (x *Float) Prec() uint

Prec 以位为单位返回 x 的尾数精度。对于|x| == 0和|x| == Inf,结果可能为0。

func (*Float) Quo(显示源文件)

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

现在将 z 设置为四舍五入的商x/y并返回 z 。精确度,舍入和准确性报告与 Add 相同。如果两个操作数都是零或无穷大,那么现在恐慌与 ErrNaN 。在这种情况下 z 的值是未定义的。

func (*Float) Rat(显示源文件)

func (x *Float) Rat(z *Rat) (*Rat, Accuracy)

Rat 返回对应于 x 的有理数; 如果 x 是无穷大,则为零。如果 x 不是 Inf,结果是 Exact。如果提供非零* Rat参数 z,则 Rat 将结果存储在 z 中,而不是分配新的 Rat 。

func (*Float) Scan(显示源文件)

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

扫描是fmt.Scanner的支持例程;它将 z 设置为扫描号码的值。它接受fmt.Scan为浮点值支持的动词格式,它们是:'b'(二进制),'e','E','f','F','g'和'G'。扫描不处理±Inf。

示例

package main

import (
	"fmt"
	"log"
	"math/big"
)

func main() {
	// 扫描功能很少直接使用;
	// 禁产条约包承认它是裂变材料条约的一个实施。扫描仪。
	f := new(big.Float)
	_, err := fmt.Sscan("1.19282e99", f)
	if err != nil {
		log.Println("error scanning value:", err)
	} else {
		fmt.Println(f)
	}
}

func (*Float) Set(显示源文件)

func (z *Float) Set(x *Float) *Float

将z设置为x的(可能为四舍五入的)值并返回z。如果z的精度为0,则在设置z之前将其更改为x的精度(并且舍入将不起作用)。舍入是根据z的精度和舍入模式执行的; 并且z的准确性报告相对于确切(不是四舍五入)结果的结果错误。

func (*Float) SetFloat64(显示源文件)

func (z *Float) SetFloat64(x float64) *Float

SetFloat64 将 z 设置为 x 的(可能为四舍五入的)值并返回 z 。如果 z 的精度为0,则其更改为53(并且舍入将不起作用)。如果 x 是 NaN,则 SetFloat64 与 ErrNaN 发生混乱。

func (*Float) SetInf(显示源文件)

func (z *Float) SetInf(signbit bool) *Float

SetInf 将 z 设置为无限Float -Inf(如果设置了符号位)或者+Inf(如果未设置符号位)并返回 z 。z 的精度不变,结果总是精确的。

func (*Float) SetInt(显示源文件)

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

SetInt将 z 设置为 x 的(可能为四舍五入的)值并返回 z。如果 z 的精度为0,则将其更改为x.BitLen()或64中较大的一个(并且舍入将不起作用)。

func (*Float) SetInt64(显示源文件)

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

SetInt64将 z 设置为 x 的(可能为四舍五入的)值并返回 z。如果z的精度为0,则它​​变为64(并且舍入将不起作用)。

func (*Float) SetMantExp(显示源文件)

func (z *Float) SetMantExp(mant *Float, exp int) *Float

SetMantExp 将 z 设置为mant×2 ** exp并返回 z 。结果 z 与 mant 具有相同的精度和舍入模式。SetMantExp 与 MantExp 相反,但不要求 0.5 <= |mant| < 1.0。特别:

mant := new(Float)
new(Float).SetMantExp(mant, x.MantExp(mant)).Cmp(x) == 0

特殊情况是:

z.SetMantExp(  ±0, exp) =   ±0
z.SetMantExp(±Inf, exp) = ±Inf

z 和 mant 可以相同,在这种情况下 z 的指数设置为 exp 。

func (*Float) SetMode(显示源文件)

func (z *Float) SetMode(mode RoundingMode) *Float

SetMode 将 z 的舍入模式设置为模式并返回确切的 z 。z 保持不变。z.SetMode(z.Mode())是将 z 的准确性设置为 Exact 的廉价方法。

func (*Float) SetPrec(显示源文件)

func (z *Float) SetPrec(prec uint) *Float

SetPrec 将 z 的精度设置为 prec 并返回(可能)z的四舍五入值。如果尾数不能用精确比特表示,并且没有精度损失,则根据z的舍入模式舍入。SetPrec(0) 将所有有限值映射为±0;无限的价值保持不变。如果prec> MaxPrec,则将其设置为 MaxPrec 。

func (*Float) SetRat(显示源文件)

func (z *Float) SetRat(x *Rat) *Float

SetRat 将 z 设置为 x 的(可能是舍入的)值并返回z。如果 z 的精度为0,则将其更改为a.BitLen(),b.BitLen()或64中的最大值;与x = a/ b。

func (*Float) SetString(显示源文件)

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

SetString 将 z 设置为 s 的值,并返回z和一个表示成功的布尔值。s 必须是一个与 Parse 接受的格式相同的浮点数,其基数为0。整个字符串(不只是前缀)必须对成功有效。如果操作失败,则z的值未定义,但返回值为零。

func (*Float) SetUint64(显示源文件)

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

SetUint64 将 z 设置为 x 的(可能为四舍五入的)值并返回z。如果 z 的精度为0,则它​​变为64(并且舍入将不起作用)。

func (*Float) Sign(显示源文件)

func (x *Float) Sign() int

符号返回:

-1 if x <   0
 0 if x is ±0
+1 if x >   0

func (*Float) Signbit(显示源文件)

func (x *Float) Signbit() bool

如果 x 是负值或负值,则 Signbit 返回 true 。

func (*Float) String(显示源文件)

func (x *Float) String() string

字符串格式 x,如x.Text('g',10)。(字符串必须显式调用,Float.Format不支持%s动词。)

func (*Float) Sub(显示源文件)

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

Sub 将 z 设置为舍入差异 xy 并返回 z 。精确度,舍入和准确性报告与 Add 相同。如果 x 和 y 是等号的无穷大,则会与 ErrNaN 发生混淆。在这种情况下 z 的值是未定义的。

func (*Float) Text(显示源文件)

func (x *Float) Text(format byte, prec int) string

文本根据给定的格式和精度 prec 将浮点数 x 转换为一个字符串。格式是以下之一:

'e'	-d.dddde±dd, decimal exponent, at least two (possibly 0) exponent digits
'E'	-d.ddddE±dd, decimal exponent, at least two (possibly 0) exponent digits
'f'	-ddddd.dddd, no exponent
'g'	like 'e' for large exponents, like 'f' otherwise
'G'	like 'E' for large exponents, like 'f' otherwise
'b'	-ddddddp±dd, binary exponent
'p'	-0x.dddp±dd, binary exponent, hexadecimal mantissa

对于二进制指数格式,尾数以标准化形式打印:

'b'	decimal integer mantissa using x.Prec() bits, or -0
'p'	hexadecimal fraction with 0.5 <= 0.mantissa < 1.0, or -0

如果格式是不同的字符,则文本将返回“%”,后跟无法识别的格式字符。

precision prec控制由'e','E','f','g'和'G'格式打印的位数(不包括指数)。对于'e','E'和'f',它是小数点后的位数。对于'g'和'G'这是总位数。负精度选择使用x.Pre()尾数位唯一标识值x所需的最小小数位数。“b”或“p”格式的 prec 值将被忽略。

func (*Float) Uint64(显示源文件)

func (x *Float) Uint64() (uint64, Accuracy)

Uint64 返回将 x 截断为零的无符号整数。如果0 <= x <= math.MaxUint64,则结果为 Exact,如果x是一个整数,否则返回 Below。对于x <0,结果为(0,Above);对于x> math.MaxUint64,结果为(math.MaxUint64,Below)。

func (*Float) UnmarshalText(显示源文件)

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

UnmarshalText实现了encoding.TextUnmarshaler接口。结果按z的精度和舍入模式四舍五入。如果z的精度为0,则在舍入生效之前将其更改为64。

type Int(显示源文件)

Int 表示一个带符号的多精度整数。Int 的零值表示值0。

type Int struct {
        // 包含筛选或 unexported 字段
}

func NewInt(显示源文件)

func NewInt(x int64) *Int

NewInt 分配并返回一个新的 Int 集到 x 。

func (*Int) Abs(显示源文件)

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

Abs 将 z 设置为 |x|(x 的绝对值)并返回 z 。

func (*Int) Add(显示源文件)

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

将 z 设置为总和 x + y 并返回 z 。

func (*Int) And(显示源文件)

func (z *Int) And(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) Append(显示源文件)

func (x *Int) Append(buf []byte, base int) []byte

Append 将由 x.Text(base)生成的 x 的字符串表示形式附加到 buf 并返回扩展缓冲区。

func (*Int) Binomial(显示源文件)

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

二项式将 z 设置为 (n, k) 的二项式系数并返回 z 。

func (*Int) Bit(显示源文件)

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

位返回 x 的第 i 位的值。也就是说,它返回 (x>>i)&1。位索引 i 必须> = 0。

func (*Int) BitLen(显示源文件)

func (x *Int) BitLen() int

BitLen 以位为单位返回 x 的绝对值的长度。0的位长度是0。

func (*Int) Bits(显示源文件)

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

位通过返回它的绝对值作为一个小尾端的 Word 片来提供对 x 的原始(未经检查但快速)访问。结果和x共享相同的底层数组。位旨在支持在此包外部实现缺少的低级别 Int 功能;否则应该避免。

func (*Int) Bytes(显示源文件)

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

字节返回 x 的绝对值作为大端字节片。

func (*Int) Cmp (显示源文件)

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

Cmp 比较 x 和 y 并返回:

-1 if x <  y
 0 if x == y
+1 if x >  y

func (*Int) Div(显示源文件)

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

Div 将 z 设置为 y!= 0 的商x / y并返回 z 。如果y == 0,则会发生除零运行时恐慌。Div 实现欧几里德分割(与Go不同); 请参阅 DivMod 了解更多详情。

func (*Int) DivMod(显示源文件)

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

DivMod 将 z 设置为商x div y和m至模x mod y并返回y(y,y)对(z,m)。如果y == 0,则发生除零运行时恐慌。

DivMod 实现欧几里德分割和模数(与Go不同):

q = x div y  such that
m = x - y*q  with 0 <= m < |y|

(参见Raymond T.Boute,“功能div和mod的欧几里得定义”,ACM Transactions on Programming Languages and Systems(TOPLAS), 14(2):127-144, New York, NY, USA, 4/1992. ACM press)。请参阅QuoRem了解T-分割和模量(如Go)。

func (*Int) Exp(显示源文件)

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

Exp 设置 z = x**y mod |m|(即 m 的符号被忽略),并返回z。如果y <= 0,则结​​果为1 mod |m;如果m == nil或m == 0,则z = x ** y。

特定大小输入的模块化指数不是一个密码恒定时间操作。

func (*Int) Format(显示源文件)

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

格式实现了fmt.Formatter。它接受格式'b'(二进制),'o'(八进制),'d'(十进制),'x'(小写十六进制)和'X'(大写十六进制)。还支持整套fmt格式的整型标志,包括用于符号控制的'+'和'',用于八进制和十六进制的前导零,'%'的前导“0”或“0X” #x“和”%#X“分别指定最小位数精度,输出字段宽度,空格或零填充以及用于左对齐或右对齐的' - '。

func (*Int) GCD(显示源文件)

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

GCD将z设置为a和b的最大公约数,它们都必须> 0,并返回z。如果x和y不为零,则GCD将x和y设置为z = a * x + b * y。如果a或b <= 0,则GCD设置z = x = y = 0。

func (*Int) GobDecode(显示源文件)

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

GobDecode实现了gob.GobDecoder接口。

func (*Int) GobEncode(显示源文件)

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

GobEncode 实现 gob.GobEncoder 接口。

func (*Int) Int64(显示源文件)

func (x *Int) Int64() int64

Int64 返回 x 的 int64 表示形式。如果 x 不能在 int64 中表示,结果是未定义的。

func (*Int) IsInt64(显示源文件)

func (x *Int) IsInt64() bool

IsInt64报告x是否可以表示为int64。

func (*Int) IsUint64(显示源文件)

func (x *Int) IsUint64() bool

IsUint64 报告 x 是否可以表示为 uint64 。

func (*Int) Lsh(显示源文件)

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

Lsh 设置z = x << n并返回 z 。

func (*Int) MarshalJSON(显示源文件)

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

MarshalJSON实现了json.Marshaler接口。

func (*Int) MarshalText(显示源文件)

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

MarshalText 实现了encoding.TextMarshaler接口。

func (*Int) Mod(显示源文件)

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

Mod 将 z 设置为y!= 0的模量x%y并返回 z 。如果y == 0,则会发生除零运行时恐慌。Mod 实现欧几里德模量(与Go不同); 请参阅 DivMod 了解更多详情。

func (*Int) ModInverse(显示源文件)

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

ModInverse 将 z 设置为环中的 g 的乘法倒数 ℤ/nℤ 并返回 z 。如果 g 和 n 不是相对的素数,结果是不确定的。

func (*Int) ModSqrt(显示源文件)

func (z *Int) ModSqrt(x, p *Int) *Int

如果这样的平方根存在并且返回 z,则 ModSqrt 将 z 设置为x mod p的平方根。模数 p 必须是一个奇素数。如果 x 不是平方 mod p,则 ModSqrt 保持 z 不变并返回 nil 。如果 p 不是奇数,此函数会发生混乱。

func (*Int) Mul(显示源文件)

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

Mul 将 z 设置为产品 x * y 并返回 z。

func (*Int) MulRange(显示源文件)

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

MulRange 将 z 设置为范围a,b中所有整数的乘积,并且返回 z。如果a> b(空范围),结果为1。

func (*Int) Neg(显示源文件)

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

Neg 将 z 设置为 -x 并返回 z 。

func (*Int) Not(显示源文件)

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

未设置z = ^ x并返回 z 。

func (*Int) Or(显示源文件)

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

或者设置z = x | y并返回 z 。

func (*Int) ProbablyPrime(显示源文件)

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

ProbablyPrime 报告 x 是否可能是素数,用 n 个伪随机选择的碱基以及 Baillie-PSW 测试应用 Miller-Rabin 测试。

如果 x 是素数,则 ProbablyPrime 返回 true 。如果 x 随机选择而不是素数,则 ProbablyPrime 可能返回 false 。对于随机选择的非素数返回真的概率至多为1/4。

对于小于2⁶4的输入,ProbablyPrime 100%准确。关于误差概率的进一步讨论参见 Menezes 等人,应用密码学手册,1997年,第145-149页和 FIPS 186-4 附录 F.

ProbablyPrime 不适用于判断对手可能制造出来欺骗测试的素数。

从 Go 1.8 开始,ProbablyPrime(0)是允许的,仅适用于 Baillie-PSW 测试。在Go 1.8之前,ProbablyPrime 只应用 Miller-Rabin 测试,而 ProbablyPrime(0) 恐慌。

func (*Int) Quo(显示源文件)

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

现在将 z 设置为y!= 0的商 x / y 并返回 z 。如果y == 0,则会发生除零运行时恐慌。现在实现截断分裂(像Go); 请参阅 QuoRem 了解更多详情。

func (*Int) QuoRem(显示源文件)

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

QuoRem 将 z 设置为商 x/y,将 r 设置为余数 x%y,并返回 y(y)= 0 时的对 (z, r) 。如果 y == 0,则会发生除零运行时恐慌。

QuoRem实现T分割和模数(如Go):

q = x/y      with the result truncated to zero
r = x - y*q

(请参阅Daan Leijen,“计算机科学家的分部和模数”。)请参见DivMod的欧几里德除法和模数(与 Go 不同)。

func (*Int) Rand(显示源文件)

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

Rand 将 z 设置为[0,n)中的伪随机数并返回 z 。

func (*Int) Rem(显示源文件)

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

Rem 将 z 设置为y!= 0的余数 x%y 并返回 z 。如果 y == 0,则会发生除零运行时恐慌。Rem 实现截断模数(如Go); 请参阅 QuoRem 了解更多详情。

func (*Int) Rsh(显示源文件)

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

Rsh 设置z = x >> n并返回 z 。

func (*Int) Scan(显示源文件)

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

扫描是fmt.Scanner的支持例程; 它将z设置为扫描号码的值。它接受格式'b'(二进制),'o'(八进制),'d'(十进制),'x'(小写十六进制)和'X'(大写十六进制)。

示例

package main

import (
	"fmt"
	"log"
	"math/big"
)

func main() {
	// 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)
	}
}

func (*Int) Set(显示源文件)

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

将 z 设置为 x 并返回 z 。

func (*Int) SetBit(显示源文件)

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

SetBit 将 z 设置为 x,并将 x 的第 i 位设置为 b(0或1)。也就是说,如果 b 是1,SetBit 设置z = x | (1 << i); 如果 b为0,SetBit 设置 z = x &^ (1 << i) 。如果 b不是0或1,SetBit 将会发生混乱。

func (*Int) SetBits(显示源文件)

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

SetBits 通过将其值设置为 abs,解释为 little-endian Word 切片并返回 z ,提供对 z 的原始(未检查但快速)访问。结果和 abs 共享相同的底层数组。SetBits 旨在支持在此包外部实现缺少的低级别 Int 功能;否则应该避免。

func (*Int) SetBytes(显示源文件)

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

SetBytes 将 buf 解释为大端无符号整数的字节,将z设置为该值并返回 z 。

func (*Int) SetInt64(显示源文件)

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

SetInt64 将 z 设置为 x 并返回 z 。

func (*Int) SetString(显示源文件)

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

SetString 将 z 设置为 s 的值,在给定的基础中进行解释,并返回 z 和一个表示成功的布尔值。整个字符串(不只是一个前缀)必须对成功有效。如果 SetString 失败,则z的值未定义,但返回值为零。

基本参数必须为0或介于2和 MaxBase 之间的值。如果基数为0,则字符串前缀将确定实际的转换基数。前缀“0x”或“0X”选择基址16;“0”前缀选择基数8,而“0b”或“0B”前缀选择基数2,否则选择的基数为10。

示例

package main

import (
	"fmt"
	"math/big"
)

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

func (*Int) SetUint64(显示源文件)

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

SetUint64 将 z 设置为 x 并返回 z 。

func (*Int) Sign(显示源文件)

func (x *Int) Sign() int

符号返回:

-1 if x <  0
 0 if x == 0
+1 if x >  0

func (*Int) Sqrt(显示源文件)

func (z *Int) Sqrt(x *Int) *Int

Sqrt 将 z 设置为⌊√x⌋,即 z²≤x 的最大整数,并返回 z 。如果 x 是负数,它会发生恐慌。

func (*Int) String(显示源文件)

func (x *Int) String() string

func (*Int) Sub(显示源文件)

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

Sub 将 z 设置为差值 xy 并返回 z 。

func (*Int) Text(显示源文件)

func (x *Int) Text(base int) string

文本返回给定基础中 x 的字符串表示形式。基数必须介于2和36之间,包括2和36。结果对数字值> = 10使用小写字母'a'到'z'。没有基本前缀(例如“0x”)被添加到字符串中。

func (*Int) Uint64(显示源文件)

func (x *Int) Uint64() uint64

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

func (*Int) UnmarshalJSON(显示源文件)

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

UnmarshalJSON 实现了 json.Unmarshaler 接口。

func (*Int) UnmarshalText(显示源文件)

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

UnmarshalText实现了encoding.TextUnmarshaler接口。

func (*Int) Xor(显示源文件)

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

Xor 设置z = x ^ y并返回 z 。

type Rat(显示源文件)

Rat 表示任意精度的商 a/b 。Rat 的零值表示值0。

type Rat struct {
        // 包含筛选或 unexported 字段
}

func NewRat(显示源文件)

func NewRat(a, b int64) *Rat

NewRat 用分子 a 和分母 b 创建一个新的 Rat 。

func (*Rat) Abs(显示源文件)

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

Abs 将 z 设置为|x|(x的绝对值)并返回 z 。

func (*Rat) Add(显示源文件)

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

将 z 设置为总和 x + y 并返回 z 。

func (*Rat) Cmp(显示源文件)

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

Cmp 比较 x 和 y 并返回:

-1 if x <  y
 0 if x == y
+1 if x >  y

func (*Rat) Denom(显示源文件)

func (x *Rat) Denom() *Int

Denom 返回 x 的分母;它始终> 0。结果是对x的分母的引用;如果新的值被分配给 x ,它可能会改变,反之亦然。

func (*Rat) Float32(显示源文件)

func (x *Rat) Float32() (f float32, exact bool)

Float32 返回 x 的最接近的 float32 值和一个 bool,指示 f 是否准确地表示 x 。如果 x 的大小太大而不能用 float32 表示,则 f 是无穷大,精确是错误的。f 的符号总是匹配 x 的符号,即使 f == 0 。

func (*Rat) Float64(显示源文件)

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

Float64 返回 x 的最接近的 float64 值和一个 bool 指示 f 是否完全代表 x 。如果 x 的大小太大而不能用 float64 表示,则 f 是无穷大,精确是错误的。f 的符号总是匹配 x 的符号,即使 f == 0 。

func (*Rat) FloatString(显示源文件)

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

FloatString 以十进制形式返回 x 的字符串表示形式,小数点后的精度为精度数字。最后一位数字四舍五入到最接近的位置,其中一半从零圆整。

func (*Rat) GobDecode(显示源文件)

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

GobDecode 实现了 gob.GobDecoder 接口。

func (*Rat) GobEncode(显示源文件)

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

GobEncode 实现 gob.GobEncoder 接口。

func (*Rat) Inv(显示源文件)

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

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

func (*Rat) IsInt(显示源文件)

func (x *Rat) IsInt() bool

IsInt 报告 x 的分母是否为1。

func (*Rat) MarshalText(显示源文件)

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

MarshalText 实现了encoding.TextMarshaler接口。

func (*Rat) Mul(显示源文件)

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

Mul 将 z 设置为产品 x * y 并返回 z 。

func (*Rat) Neg(显示源文件)

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

Neg 将 z 设置为 -x 并返回 z 。

func (*Rat) Num(显示源文件)

func (x *Rat) Num() *Int

Num 返回 x 的分子;它可能<= 0。结果是对 x 的分子的引用;如果新的值被分配给 x,它可能会改变,反之亦然。分子的符号对应于 x 的符号。

func (*Rat) Quo(显示源文件)

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

现在将 z 设为商 x/y 并返回 z 。如果 y == 0,则会发生除零运行时恐慌。

func (*Rat) RatString(显示源文件)

func (x *Rat) RatString() string

如果b!= 1,RatString 返回 x 形式的字符串表示形式“a/b”,如果b == 1则形式为“a”形式。

func (*Rat) Scan(显示源文件)

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

扫描是fmt.Scanner的支持例程。它接受格式'e','E','f','F','g','G'和'v'。所有格式都是相同的。

示例

package main

import (
	"fmt"
	"log"
	"math/big"
)

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) Set(显示源文件)

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

将 z 设置为 x(通过制作 x 的副本)并返回 z 。

func (*Rat) SetFloat64(显示源文件)

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

SetFloat64 将 z 设置为完全 f 并返回 z 。如果 f 不是有限的,SetFloat 返回 nil 。

func (*Rat) SetFrac(显示源文件)

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

SetFrac 将 z 设置为 a/b 并返回 z 。

func (*Rat) SetFrac64(显示源文件)

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

SetFrac64 将 z 设置为 a/b 并返回 z 。

func (*Rat) SetInt(显示源文件)

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

SetInt 将 z 设置为 x(通过制作x的副本)并返回 z 。

func (*Rat) SetInt64(显示源文件)

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

SetInt64 将 z 设置为 x 并返回 z 。

func (*Rat) SetString(显示源文件)

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

SetString 将 z 设置为 s 的值,并返回 z 和一个表示成功的布尔值。s 可以作为分数 “a/b” 给出,也可以作为浮点数可选地跟随一个指数。整个字符串(不只是一个前缀)必须对成功有效。如果操作失败,则z的值未定义,但返回值为零。

示例

package main

import (
	"fmt"
	"math/big"
)

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

func (*Rat) Sign(显示源文件)

func (x *Rat) Sign() int

符号返回:

-1 if x <  0
 0 if x == 0
+1 if x >  0

func (*Rat) String(显示源文件)

func (x *Rat) String() string

字符串以“a/b”的形式返回x的字符串表示形式(即使b == 1)。

func (*Rat) Sub(显示源文件)

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

Sub 将 z 设置为差值 xy 并返回 z 。

func (*Rat) UnmarshalText(显示源文件)

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

UnmarshalText实现了encoding.TextUnmarshaler接口。

type RoundingMode(显示源文件)

RoundingMode 确定浮点值如何四舍五入到所需的精度。舍入可能会改变浮点值;舍入误差由Float's Accuracy 描述。

type RoundingMode byte

这些常量定义了支持的舍入模式。

const (
        ToNearestEven RoundingMode = iota // == IEEE 754-2008 roundTiesToEven
        ToNearestAway                     // == IEEE 754-2008 roundTiesToAway
        ToZero                            // == IEEE 754-2008 roundTowardZero
        AwayFromZero                      // no IEEE 754-2008 equivalent
        ToNegativeInf                     // == IEEE 754-2008 roundTowardNegative
        ToPositiveInf                     // == IEEE 754-2008 roundTowardPositive
)

示例

package main

import (
	"fmt"
	"math/big"
)

func main() {
	operands := []float64{2.6, 2.5, 2.1, -2.1, -2.5, -2.6}

	fmt.Print("   x")
	for mode := big.ToNearestEven; mode <= big.ToPositiveInf; mode++ {
		fmt.Printf("  %s", mode)
	}
	fmt.Println()

	for _, f64 := range operands {
		fmt.Printf("%4g", f64)
		for mode := big.ToNearestEven; mode <= big.ToPositiveInf; mode++ {
			// sample operands above require 2 bits to represent mantissa
			// set binary precision to 2 to round them to integer values
			f := new(big.Float).SetPrec(2).SetMode(mode).SetFloat64(f64)
			fmt.Printf("  %*g", len(mode.String()), f)
		}
		fmt.Println()
	}

}

func (RoundingMode) String(显示源文件)

func (i RoundingMode) String() string

type Word(显示源文件)

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

type Word uint

Bugs

  • ☞ 舍入 ToNegativeInf 时,Float 值的符号舍入为0是不正确的。

math/big相关

Go

Go 是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。

主页 https://golang.org/
源码 https://go.googlesource.com/go
发布版本 1.9.2

Go目录

1.档案 | archive
2.缓冲区 | bufio
3.内置 | builtin
4.字节 | bytes
5.压缩 | compress
6.容器 | container
7.上下文 | context
8.加密 | crypto
9.数据库 | database
10.调试 | debug
11.编码 | encoding
12.错误 | errors
13. expvar
14.flag
15. fmt
16. go
17.散列 | hash
18.html
19.图像 | image
20.索引 | index
21.io
22.日志 | log
23.数学 | math
24. math/big
25.math/bits
26.math/cmplx
27.math/rand
28.拟态 | mime
29.net
30.net/http
31. net/mail
32. net/rpc
33.net/smtp
34. net/textproto
35. net/url
36.os
37.路径 | path
38.插件 | plugin
39.反射 | reflect
40.正则表达式 | regexp
41.运行时 | runtime
42.排序算法 | sort
43.转换 | strconv
44.字符串 | strings
45.同步 | sync
46.系统调用 | syscall
47.测试 | testing
48.文本 | text
49.时间戳 | time
50.unicode
51.不安全性 | unsafe
52.Go 语言数据类型
53.Go 语言基础语法
54.Go 语言结构
55.Go 语言 select 语句
56.Go 语言 switch 语句
57.Go 语言 if 语句嵌套
58.Go 语言 if…else 语句
59.Go 语言 if 语句
60.Go 语言运算符
61.Go 语言常量
62.Go 语言函数闭包
63.Go 语言函数作为实参
64.Go 语言函数引用传递值
65.Go 语言函数值传递值
66.Go 语言函数
67.Go 语言 goto 语句
68.Go 语言 continue 语句
69.Go 语言 break 语句
70.Go 语言循环嵌套
71.Go 语言 for 循环
72.Go 语言结构体
73.Go 语言指针作为函数参数
74.Go 语言指向指针的指针
75.Go 语言指针数组
76.Go 语言指针
77.Go 语言向函数传递数组
78.Go 语言多维数组
79.Go 语言变量作用域
80.Go 语言函数方法
81.Go 错误处理
82.Go 语言接口
83.Go 语言类型转换
84.Go 语言递归函数
85.Go 语言Map(集合)
86.Go 语言范围(Range)
87.Go 语言切片(Slice)
88.Go 并发
89.Go fmt.Sprintf 格式化字符串