Spec-Zone.ru › Go

Пакет big

  • import "math/big"
  • Обзор
  • Указатель
  • Примеры
  • Подкаталоги

Обзор

Пакет big реализует арифметику произвольной точности (большие числа). Поддерживаются следующие числовые типы:

Int    signed integers
Rat    rational numbers
Float  floating-point numbers

Нулевое значение Int, Rat или Float соответствует 0. Таким образом, новые значения можно объявлять обычным способом, и они будут обозначать 0 без дополнительной инициализации:

var x Int        // &x is an *Int of value 0
var r = &Rat{}   // r is a *Rat of value 0
y := new(Float)  // y is a *Float of value 0

Кроме того, новые значения можно выделить и инициализировать с помощью фабричных функций следующего вида:

func NewT(v V) *T

Например, NewInt(x) возвращает *Int, которому присвоено значение аргумента int64 x, NewRat(a, b) возвращает *Rat, которому присвоена дробь a/b, где a и b — значения int64, а NewFloat(f) возвращает *Float, инициализированный аргументом float64 f. Дополнительную гибкость обеспечивают явные методы установки, например:

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

Методы установки, числовые операции и предикаты представлены методами следующего вида:

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, заменяя его прежнее значение. Если не указано иное, операции допускают псевдонимы параметров, поэтому вполне допустимо написать

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 для сканирования, а также интерфейс Formatter (кроме *Rat) для форматированного вывода.

Пример (EConvergents)

В этом примере показано, как использовать big.Rat для вычисления первых 15 членов последовательности рациональных приближений константы e (основания натурального логарифма).

Код:

package big_test

import (
    "fmt"
    "math/big"
)

// Use the classic continued fraction for e
//
//	e = [1; 0, 1, 1, 2, 1, 1, ... 2n, 1, 1, ...]
//
// i.e., for the nth term, use
//
//	   1          if   n mod 3 != 1
//	(n-1)/3 * 2   if   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
    }

    // Directly initialize frac as the fractional
    // inverse of the result of recur.
    frac := new(big.Rat).Inv(recur(n+1, lim))

    return term.Add(term, frac)
}

// This example demonstrates how to use big.Rat to compute the
// first 15 terms in the sequence of rational convergents for
// the constant e (base of natural logarithm).
func Example_eConvergents() {
    for i := 1; i <= 15; i++ {
        r := recur(0, int64(i))

        // Print r both as a fraction and as a floating-point number.
        // Since big.Rat implements fmt.Formatter, we can use %-13s to
        // get a left-aligned string representation of the fraction.
        fmt.Printf("%-13s = %s\n", r, r.FloatString(8))
    }

    // Output:
    // 2/1           = 2.00000000
    // 3/1           = 3.00000000
    // 8/3           = 2.66666667
    // 11/4          = 2.75000000
    // 19/7          = 2.71428571
    // 87/32         = 2.71875000
    // 106/39        = 2.71794872
    // 193/71        = 2.71830986
    // 1264/465      = 2.71827957
    // 1457/536      = 2.71828358
    // 2721/1001     = 2.71828172
    // 23225/8544    = 2.71828184
    // 25946/9545    = 2.71828182
    // 49171/18089   = 2.71828183
    // 517656/190435 = 2.71828183
}

Пример (Fibonacci)

В этом примере показано, как использовать big.Int для вычисления наименьшего числа Фибоначчи со 100 десятичными цифрами и проверки его на простоту.

Код:

// Initialize two big ints with the first two numbers in the sequence.
a := big.NewInt(0)
b := big.NewInt(1)

// Initialize limit as 10^99, the smallest integer with 100 digits.
var limit big.Int
limit.Exp(big.NewInt(10), big.NewInt(99), nil)

// Loop while a is smaller than 1e100.
for a.Cmp(&limit) < 0 {
    // Compute the next Fibonacci number, storing it in a.
    a.Add(a, b)
    // Swap a and b so that b is the next number in the sequence.
    a, b = b, a
}
fmt.Println(a) // 100-digit Fibonacci number

// Test a for primality.
// (ProbablyPrimes' argument sets the number of Miller-Rabin
// rounds to be performed. 20 is a good value.)
fmt.Println(a.ProbablyPrime(20))

Вывод:

1344719667586153181419716641724567886890850696275767987106294472017884974410332069524504824747437757
false

Пример (Sqrt2)

В этом примере показано, как использовать big.Float для вычисления квадратного корня из 2 с точностью 200 бит и как вывести результат в виде десятичного числа.

Код:

// We'll do computations with 200 bits of precision in the mantissa.
const prec = 200

// Compute the square root of 2 using Newton's Method. We start with
// an initial estimate for sqrt(2), and then iterate:
//     x_{n+1} = 1/2 * ( x_n + (2.0 / x_n) )

// Since Newton's Method doubles the number of correct digits at each
// iteration, we need at least log_2(prec) steps.
steps := int(math.Log2(prec))

// Initialize values we need for the computation.
two := new(big.Float).SetPrec(prec).SetInt64(2)
half := new(big.Float).SetPrec(prec).SetFloat64(0.5)

// Use 1 as the initial estimate.
x := new(big.Float).SetPrec(prec).SetInt64(1)

// We use t as a temporary variable. There's no need to set its precision
// since big.Float values with unset (== 0) precision automatically assume
// the largest precision of the arguments when used as the result (receiver)
// of a big.Float operation.
t := new(big.Float)

// Iterate.
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
}

// We can use the usual fmt.Printf verbs since big.Float implements fmt.Formatter
fmt.Printf("sqrt(2) = %.50f\n", x)

// Print the error between 2 and x*x.
t.Mul(x, x) // t = x*x
fmt.Printf("error = %e\n", t.Sub(two, t))

Вывод:

sqrt(2) = 1.41421356237309504880168872420969807856967187537695
error = 0.000000e+00

Указатель

  • Константы
  • 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) AppendText(b []byte) ([]byte, error)
  • 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 (z *Float) Sqrt(x *Float) *Float
  • 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 (x *Int) AppendText(b []byte) (text []byte, err error)
  • 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 (x *Int) CmpAbs(y *Int) int
  • func (z *Int) Div(x, y *Int) *Int
  • func (z *Int) DivMod(x, y, m *Int) (*Int, *Int)
  • func (z *Int) Divide(x, y, r *Int, mode RoundingMode) (*Int, *Int)
  • func (z *Int) Exp(x, y, m *Int) *Int
  • func (x *Int) FillBytes(buf []byte) []byte
  • func (x *Int) Float64() (float64, Accuracy)
  • 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) TrailingZeroBits() uint
  • 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) AppendText(b []byte) ([]byte, error)
  • 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) FloatPrec() (n int, 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 (z *Rat) SetUint64(x uint64) *Rat
  • 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

Примеры

Float.Add
Float.Cmp
Float.Copy
Float.Scan
Float.SetString
Float (Сдвиг)
Int.Scan
Int.SetString
Rat.Scan
Rat.SetString
RoundingMode
Пакет (EConvergents)
Пакет (Fibonacci)
Пакет (Sqrt2)

Файлы пакета

accuracy_string.go arith.go arith_amd64.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 natdiv.go natmul.go prime.go rat.go ratconv.go ratmarsh.go roundingmode_string.go sqrt.go

Константы

Пределы показателя и точности.

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

Режимы округления, определяющие, как корректируется целочисленное частное при целочисленном делении. Подробности см. в статье Даана Лейена «Division and Modulus for Computer Scientists».

const (
    Trunc = ToZero        // T-division (same as Go division)
    Floor = ToNegativeInf // F-division
    Round = ToNearestEven // R-division
    Ceil  = ToPositiveInf // C-division
)

MaxBase — наибольшее основание системы счисления, допустимое при преобразовании строк.

const MaxBase = 10 + ('z' - 'a' + 1) + ('Z' - 'A' + 1)

func Jacobi 1.5

func Jacobi(x, y *Int) int

Jacobi возвращает символ Якоби (x/y): +1, -1 или 0. Аргумент y должен быть нечётным целым числом.

type Accuracy 1.5

Accuracy описывает погрешность округления, возникающую при последней операции, создавшей значение Float, относительно точного значения.

type Accuracy int8

Константы, описывающие Accuracy значения Float.

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

func (Accuracy) String 1.5

func (i Accuracy) String() string

type ErrNaN 1.5

Паника ErrNaN возникает при выполнении операции Float, которая по правилам IEEE 754 привела бы к NaN. ErrNaN реализует интерфейс error.

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

func (ErrNaN) Error 1.5

func (err ErrNaN) Error() string

type Float 1.5

Ненулевое конечное значение Float представляет собой число с плавающей точкой и многократной точностью

sign × mantissa × 2**exponent

с мантиссой 0.5 <= mantissa < 1.0 и показателем MinExp <= exponent <= MaxExp. Float также может быть нулём (+0, -0) или бесконечностью (+Inf, -Inf). Все значения Float упорядочены, а порядок двух значений Float x и y определяется методом x.Cmp(y).

Каждое значение Float также имеет точность, режим округления и точность результата. Точность — это максимальное число бит мантиссы, доступных для представления значения. Режим округления определяет, как округлять результат, чтобы он поместился в биты мантиссы, а точность результата описывает погрешность округления относительно точного результата.

Если не указано иное, все операции (включая методы установки), в которых для результата указывается переменная *Float (обычно через получатель, за исключением Float.MantExp), округляют числовой результат в соответствии с точностью и режимом округления переменной результата.

Если указанная точность результата равна 0 (см. ниже), перед округлением она устанавливается в значение наибольшей точности аргументов, а режим округления остаётся неизменным. Таким образом, неинициализированные значения Float, переданные в качестве аргументов результата, получат разумное значение точности, определяемое операндами, а их режим будет равен нулевому значению RoundingMode (ToNearestEven).

Если установить требуемую точность равной 24 или 53 и выбрать соответствующий режим округления (обычно ToNearestEven), операции Float будут давать те же результаты, что и соответствующие операции арифметики IEEE 754 над float32 или float64, для операндов, соответствующих нормальным (то есть не субнормальным) числам float32 или float64. Антипереполнение и переполнение показателя приводят к 0 или бесконечности при значениях, отличных от IEEE 754, поскольку диапазон показателей Float значительно шире.

Нулевое (неинициализированное) значение Float готово к использованию и точно представляет число +0.0 с точностью 0 и режимом округления ToNearestEven.

Операции всегда принимают указатели (*Float), а не значения Float, и каждому уникальному значению Float должен соответствовать собственный уникальный указатель *Float. Чтобы «скопировать» значение Float, существующему (или только что выделенному) Float нужно присвоить новое значение с помощью метода Float.Set; поверхностное копирование Float не поддерживается и может привести к ошибкам.

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

Пример (Shift)

Код:

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

Вывод:

0.015625
0.03125
0.0625
0.125
0.25
0.5
1
2
4
8
16

func NewFloat 1.5

func NewFloat(x float64) *Float

NewFloat выделяет память для нового Float со значением x, точностью 53 и режимом округления ToNearestEven. NewFloat вызывает панику ErrNaN, если x — это NaN.

func ParseFloat 1.5

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 1.5

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

Abs присваивает z (возможно, округлённое) значение |x| (абсолютное значение x) и возвращает z.

func (*Float) Acc 1.5

func (x *Float) Acc() Accuracy

Acc возвращает точность результата x, полученного последней операцией, если в документации этой операции явно не указано иное.

func (*Float) Add 1.5

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

Add присваивает z округлённую сумму x+y и возвращает z. Если точность z равна 0, перед выполнением операции она устанавливается в большее из значений точности x и y. Округление выполняется в соответствии с точностью и режимом округления z; точность результата z показывает погрешность результата относительно точного (неокруглённого) значения. Add вызывает панику ErrNaN, если x и y — бесконечности с противоположными знаками. В этом случае значение z не определено.

Пример

Код:

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

Вывод:

x = 1000 (0x.fap+10, prec = 64, acc = Exact)
y = 2.718281828 (0x.adf85458248cd8p+2, prec = 53, acc = Exact)
z = 1002.718282 (0x.faadf854p+10, prec = 32, acc = Below)

func (*Float) Append 1.5

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

Append добавляет в buf строковое представление числа с плавающей точкой x, сформированное методом x.Text, и возвращает расширенный буфер.

func (*Float) AppendText 1.24

func (x *Float) AppendText(b []byte) ([]byte, error)

AppendText реализует интерфейс encoding.TextAppender. Сериализуется только значение Float (с полной точностью); остальные атрибуты, например точность или погрешность, игнорируются.

func (*Float) Cmp 1.5

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

Cmp сравнивает x и y и возвращает:

  • -1, если x < y;
  • 0, если x == y (включая -0 == 0, -Inf == -Inf и +Inf == +Inf);
  • +1, если x > y.

Пример

Код:

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

Вывод:

   x     y  cmp
---------------
-Inf  -Inf    0
-Inf  -1.2   -1
-Inf    -0   -1
-Inf     0   -1
-Inf   1.2   -1
-Inf  +Inf   -1

-1.2  -Inf    1
-1.2  -1.2    0
-1.2    -0   -1
-1.2     0   -1
-1.2   1.2   -1
-1.2  +Inf   -1

  -0  -Inf    1
  -0  -1.2    1
  -0    -0    0
  -0     0    0
  -0   1.2   -1
  -0  +Inf   -1

   0  -Inf    1
   0  -1.2    1
   0    -0    0
   0     0    0
   0   1.2   -1
   0  +Inf   -1

 1.2  -Inf    1
 1.2  -1.2    1
 1.2    -0    1
 1.2     0    1
 1.2   1.2    0
 1.2  +Inf   -1

+Inf  -Inf    1
+Inf  -1.2    1
+Inf    -0    1
+Inf     0    1
+Inf   1.2    1
+Inf  +Inf    0

func (*Float) Copy 1.5

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

Copy присваивает z значение x, а также точность, режим округления и точность результата x. Copy возвращает z. Если x и z идентичны, Copy ничего не делает.

Пример

Код:

var x, z big.Float

x.SetFloat64(1.23)
r := z.Copy(&x)
fmt.Printf("a) r = %g, z = %g, x = %g, r == z = %v\n", r, &z, &x, r == &z)

// changing z changes r since they are identical
z.SetInt64(42)
fmt.Printf("b) r = %g, z = %g, r == z = %v\n", r, &z, r == &z)

x.SetPrec(1)
z.Copy(&x)
fmt.Printf("c) z = %g, x = %g, z == x = %v\n", &z, &x, &z == &x)

Вывод:

a) r = 1.23, z = 1.23, x = 1.23, r == z = true
b) r = 42, z = 42, r == z = true
c) z = 1, x = 1, z == x = false

func (*Float) Float32 1.5

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 1.5

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 1.5

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

Format реализует интерфейс fmt.Formatter. Метод принимает все стандартные форматы чисел с плавающей точкой ('b', 'e', 'E', 'f', 'F', 'g', 'G', 'x'), а также 'p' и 'v'. Интерпретацию 'p' см. в описании (*Float).Text. Формат 'v' обрабатывается как 'g'. Format также поддерживает указание минимальной точности в цифрах, ширины выходного поля и флагов формата '+' и ' ' для управления знаком, '0' для дополнения пробелами или нулями, а также '-' для выравнивания по левому или правому краю. Подробности см. в пакете fmt.

func (*Float) GobDecode 1.7

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

GobDecode реализует интерфейс encoding/gob.GobDecoder. Результат округляется в соответствии с точностью и режимом округления z, если только точность z не равна 0; в этом случае z устанавливается точно в декодированное значение.

func (*Float) GobEncode 1.7

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

GobEncode реализует интерфейс encoding/gob.GobEncoder. Сериализуются значение Float и все его атрибуты (точность, режим округления, точность результата).

func (*Float) Int 1.5

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

Int возвращает результат усечения x к нулю или nil, если x — бесконечность. Результат имеет значение Exact, если x.IsInt(); в противном случае — Below при x > 0 и Above при x < 0. Если передан ненулевой аргумент *Int z, Int сохраняет результат в z, а не выделяет новый Int.

func (*Float) Int64 1.5

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

Int64 возвращает целое число, полученное усечением x к нулю. Если math.MinInt64 <= x <= math.MaxInt64, результат имеет значение Exact, если x — целое число, и Above (при x < 0) или Below (при x > 0) в противном случае. Результатом будет (math.MinInt64, Above) при x < math.MinInt64 и (math.MaxInt64, Below) при x > math.MaxInt64.

func (*Float) IsInf 1.5

func (x *Float) IsInf() bool

IsInf сообщает, является ли x значением +Inf или -Inf.

func (*Float) IsInt 1.5

func (x *Float) IsInt() bool

IsInt сообщает, является ли x целым числом. Значения ±Inf не являются целыми числами.

func (*Float) MantExp 1.5

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

MantExp раскладывает x на мантиссу и показатель и возвращает показатель. Если передан ненулевой аргумент mant, ему присваивается мантисса x с той же точностью и режимом округления, что и у x. Выполняется равенство x == mant × 2**exp, где 0.5 <= |mant| < 1.0. Вызов MantExp с аргументом nil — эффективный способ получить показатель получателя.

Особые случаи:

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

x и mant могут совпадать; в этом случае x присваивается значение его мантиссы.

func (*Float) MarshalText 1.6

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

MarshalText реализует интерфейс encoding.TextMarshaler. Сериализуется только значение Float (с полной точностью); остальные атрибуты, например точность или погрешность, игнорируются.

func (*Float) MinPrec 1.5

func (x *Float) MinPrec() uint

MinPrec возвращает минимальную точность, необходимую для точного представления x (то есть наименьшее значение prec, при котором x.SetPrec(prec) начнёт округлять x). Результат равен 0 при |x| == 0 и |x| == Inf.

func (*Float) Mode 1.5

func (x *Float) Mode() RoundingMode

Mode возвращает режим округления x.

func (*Float) Mul 1.5

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

Mul устанавливает z равным округлённому произведению x*y и возвращает z. Точность, округление и сведения о точности результата соответствуют Float.Add. Mul вызывает панику с ErrNaN, если один операнд равен нулю, а другой — бесконечности. В этом случае значение z не определено.

func (*Float) Neg 1.5

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

Neg устанавливает z равным (возможно, округлённому) значению x с противоположным знаком и возвращает z.

func (*Float) Parse 1.5

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

Parse разбирает строку s, которая должна содержать текстовое представление числа с плавающей точкой с мантиссой в указанной системе счисления (порядок всегда задаётся десятичным числом) либо строку, представляющую бесконечное значение.

При основании 0 символ подчёркивания «_» может находиться между префиксом основания и следующей за ним цифрой, а также между соседними цифрами; такие символы подчёркивания не влияют на значение числа и количество возвращаемых цифр. Неправильное расположение символов подчёркивания сообщается как ошибка, если других ошибок нет. Если base != 0, символы подчёркивания не распознаются и завершают сканирование, как и любой другой символ, не являющийся допустимой десятичной точкой или цифрой.

Метод устанавливает z равным (возможно, округлённому) значению соответствующего числа с плавающей точкой и возвращает z, фактическое основание b и ошибку err, если она возникла. Для успешного выполнения должна быть обработана вся строка, а не только её префикс. Если точность z равна 0, перед округлением она изменяется на 64. Число должно иметь вид:

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

Аргумент base должен быть равен 0, 2, 8, 10 или 16. Недопустимое значение аргумента base приведёт к панике во время выполнения.

При основании 0 префикс числа определяет фактическое основание: префикс «0b» или «0B» задаёт основание 2, «0o» или «0O» — основание 8, а «0x» или «0X» — основание 16. В остальных случаях фактическое основание равно 10, и префикс не допускается. Восьмеричный префикс "0" не поддерживается (начальный "0" просто считается цифрой "0").

Порядок на основании 2 обозначается символом "p" или "P"; например, "0x1.fffffffffffffp1023" (при основании 0) представляет максимальное значение float64. В шестнадцатеричных мантиссах, если символ порядка присутствует, им должен быть 'p' или 'P' (символ порядка "e" или "E" невозможно отличить от цифры мантиссы).

Возвращаемое значение *Float f равно nil, а значение z допустимо, но не определено, если сообщается об ошибке.

func (*Float) Prec 1.5

func (x *Float) Prec() uint

Prec возвращает точность мантиссы x в битах. Результат может быть равен 0, если |x| == 0 или |x| == Inf.

func (*Float) Quo 1.5

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

Quo устанавливает z равным округлённому частному x/y и возвращает z. Точность, округление и сведения о точности результата соответствуют Float.Add. Quo вызывает панику с ErrNaN, если оба операнда равны нулю или бесконечности. В этом случае значение z не определено.

func (*Float) Rat 1.5

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

Rat возвращает рациональное число, соответствующее x, или nil, если x — бесконечность. Результат является точным, если x не равен Inf. Если передан ненулевой аргумент *Rat z, Rat сохраняет результат в z вместо выделения памяти для нового Rat.

func (*Float) Scan 1.8

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

Scan — вспомогательная функция для fmt.Scanner; она устанавливает z равным значению считанного числа. Принимаются форматы, глаголы которых поддерживаются fmt.Scan для чисел с плавающей точкой: 'b' (двоичный), 'e', 'E', 'f', 'F', 'g' и 'G'. Scan не обрабатывает ±Inf.

Пример

Код:

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

Вывод:

1.19282e+99

func (*Float) Set 1.5

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

Set устанавливает z равным (возможно, округлённому) значению x и возвращает z. Если точность z равна 0, перед установкой z она изменяется на точность x (округление не повлияет на результат). Округление выполняется в соответствии с точностью и режимом округления z; точность z показывает погрешность результата относительно точного (неокруглённого) результата.

func (*Float) SetFloat64 1.5

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

SetFloat64 устанавливает z равным (возможно, округлённому) значению x и возвращает z. Если точность z равна 0, она изменяется на 53 (округление не повлияет на результат). SetFloat64 вызывает панику с ErrNaN, если x — NaN.

func (*Float) SetInf 1.5

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

SetInf устанавливает z равным бесконечному Float -Inf, если установлен signbit, или +Inf, если signbit не установлен, и возвращает z. Точность z не изменяется, а результат всегда является точным.

func (*Float) SetInt 1.5

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

SetInt устанавливает z равным (возможно, округлённому) значению x и возвращает z. Если точность z равна 0, она изменяется на большее из значений x.BitLen() и 64 (округление не повлияет на результат).

func (*Float) SetInt64 1.5

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

SetInt64 устанавливает z равным (возможно, округлённому) значению x и возвращает z. Если точность z равна 0, она изменяется на 64 (округление не повлияет на результат).

func (*Float) SetMantExp 1.5

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

SetMantExp устанавливает z равным mant × 2**exp и возвращает z. Результат z имеет ту же точность и режим округления, что и mant. SetMantExp является обратной функцией к Float.MantExp, но не требует, чтобы выполнялось 0.5 <= |mant| < 1.0. В частности, для заданного x типа *Float соотношение SetMantExp и Float.MantExp выглядит следующим образом:

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 1.5

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

SetMode устанавливает режим округления z равным mode и возвращает точное z. В остальном z не изменяется. Вызов z.SetMode(z.Mode()) — простой способ установить точность z в значение Exact.

func (*Float) SetPrec 1.5

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

SetPrec устанавливает точность z равной prec и возвращает (возможно) округлённое значение z. Округление выполняется согласно режиму округления z, если мантиссу невозможно представить с точностью prec бит без потери точности. SetPrec(0) преобразует все конечные значения в ±0; бесконечные значения остаются без изменений. Если prec > MaxPrec, значение устанавливается равным MaxPrec.

func (*Float) SetRat 1.5

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

SetRat устанавливает z равным (возможно, округлённому) значению x и возвращает z. Если точность z равна 0, она изменяется на наибольшее из значений a.BitLen(), b.BitLen() и 64, где x = a/b.

func (*Float) SetString 1.5

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

SetString устанавливает z равным значению s и возвращает z и логическое значение, указывающее на успех. s должно быть числом с плавающей точкой того же формата, что принимается Float.Parse при аргументе base, равном 0. Для успешного выполнения вся строка, а не только её префикс, должна быть допустимой. Если операция завершилась неудачно, значение z не определено, а возвращаемое значение равно nil.

Пример

Код:

f := new(big.Float)
f.SetString("3.14159")
fmt.Println(f)

Вывод:

3.14159

func (*Float) SetUint64 1.5

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

SetUint64 устанавливает z равным (возможно, округлённому) значению x и возвращает z. Если точность z равна 0, она изменяется на 64 (округление не повлияет на результат).

func (*Float) Sign 1.5

func (x *Float) Sign() int

Sign возвращает:

  • -1, если x < 0;
  • 0, если x равен ±0;
  • +1, если x > 0.

func (*Float) Signbit 1.5

func (x *Float) Signbit() bool

Signbit сообщает, является ли x отрицательным числом или отрицательным нулём.

func (*Float) Sqrt 1.10

func (z *Float) Sqrt(x *Float) *Float

Sqrt устанавливает z равным округлённому квадратному корню из x и возвращает его.

Если точность z равна 0, перед операцией она изменяется на точность x. Округление выполняется согласно точности и режиму округления z, но точность z не вычисляется. В частности, результат z.Acc() не определён.

Функция вызывает панику, если z < 0. В этом случае значение z не определено.

func (*Float) String 1.5

func (x *Float) String() string

String форматирует x так же, как x.Text('g', 10). (String необходимо вызывать явно: Float.Format не поддерживает глагол %s.)

func (*Float) Sub 1.5

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

Sub устанавливает z равным округлённой разности x-y и возвращает z. Точность, округление и сведения о точности результата соответствуют Float.Add. Sub вызывает панику с ErrNaN, если x и y — бесконечности с одинаковыми знаками. В этом случае значение z не определено.

func (*Float) Text 1.5

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

Text преобразует число с плавающей точкой x в строку согласно заданным формату и точности prec. Формат может быть одним из следующих:

'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
'x'	-0xd.dddddp±dd, hexadecimal mantissa, decimal power of two exponent
'p'	-0x.dddp±dd, hexadecimal mantissa, decimal power of two exponent (non-standard)
'b'	-ddddddp±dd, decimal mantissa, decimal power of two exponent (non-standard)

Для форматов с порядком в степени двойки мантисса выводится в нормализованном виде:

'x'	hexadecimal mantissa in [1, 2), or 0
'p'	hexadecimal mantissa in [½, 1), or 0
'b'	decimal integer mantissa using x.Prec() bits, or 0

Обратите внимание, что формат 'x' используется в большинстве других языков и библиотек.

Если format — другой символ, Text возвращает "%" и следующий за ним нераспознанный символ формата.

Точность prec задаёт количество цифр (без учёта порядка), выводимых форматами 'e', 'E', 'f', 'g', 'G' и 'x'. Для 'e', 'E', 'f' и 'x' это количество цифр после десятичной точки. Для 'g' и 'G' это общее количество цифр. Отрицательная точность выбирает минимальное количество десятичных цифр, необходимое для однозначной идентификации значения x с использованием x.Prec() бит мантиссы. Значение prec игнорируется для форматов 'b' и 'p'.

Обратите внимание, что Text может возвращать результат, отличный от strconv.FormatFloat с соответствующими аргументами, если переданное в strconv.FormatFloat соответствующее число float32 или float64 является денормализованным.

func (*Float) Uint64 1.5

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

Uint64 возвращает беззнаковое целое число, полученное усечением x в сторону нуля. Если 0 <= x <= math.MaxUint64, результат является точным, если x — целое число, и меньшим в противном случае. Для x < 0 результат равен (0, Above), а для x > math.MaxUint64 — (math.MaxUint64, Below).

func (*Float) UnmarshalText 1.6

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

UnmarshalText реализует интерфейс encoding.TextUnmarshaler. Результат округляется в соответствии с точностью и режимом округления z. Если точность z равна 0, перед округлением она изменяется на 64.

type Int

Int представляет целое число со знаком и произвольной точностью. Нулевое значение Int представляет число 0.

Операции всегда принимают аргументы-указатели (*Int), а не значения Int; каждому уникальному значению Int должен соответствовать собственный уникальный указатель *Int. Чтобы «скопировать» значение Int, необходимо присвоить существующему (или вновь выделенному) Int новое значение с помощью метода Int.Set; поверхностное копирование Int не поддерживается и может привести к ошибкам.

Обратите внимание, что методы могут раскрывать значение Int через побочные каналы, связанные с временем выполнения. По этой причине, а также из-за масштаба и сложности реализации, Int не подходит для криптографических операций. Стандартная библиотека не предоставляет нетривиальные методы Int для данных, контролируемых злоумышленником; решение о том, считается ли ошибка в math/big уязвимостью безопасности, может зависеть от её влияния на стандартную библиотеку.

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

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

Add устанавливает z равным сумме x+y и возвращает z.

func (*Int) And

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

And устанавливает z = x & y и возвращает z.

func (*Int) AndNot

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

AndNot устанавливает z = x &^ y и возвращает z.

func (*Int) Append 1.6

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

Append добавляет в buf строковое представление x, сформированное методом x.Text(base), и возвращает расширенный буфер.

func (*Int) AppendText 1.24

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

AppendText реализует интерфейс encoding.TextAppender.

func (*Int) Binomial

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

Binomial устанавливает z равным биномиальному коэффициенту C(n, k) и возвращает z.

func (*Int) Bit

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

Bit возвращает значение i-го бита x, то есть (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

Bits предоставляет прямой (непроверяемый, но быстрый) доступ к x, возвращая его абсолютное значение в виде среза Word в порядке от младшего байта к старшему. Результат и x используют один и тот же базовый массив. Bits предназначен для реализации недостающей низкоуровневой функциональности Int вне этого пакета; в остальных случаях его следует избегать.

func (*Int) Bytes

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

Bytes возвращает абсолютное значение x в виде среза байтов в порядке от старшего байта к младшему.

Для среза фиксированной длины или предварительно выделенного среза используйте Int.FillBytes.

func (*Int) Cmp

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

Cmp сравнивает x и y и возвращает:

  • -1, если x < y;
  • 0, если x == y;
  • +1, если x > y.

func (*Int) CmpAbs 1.10

func (x *Int) CmpAbs(y *Int) int

CmpAbs сравнивает абсолютные значения x и y и возвращает:

  • -1, если |x| < |y|;
  • 0, если |x| == |y|;
  • +1, если |x| > |y|.

func (*Int) Div

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

Div устанавливает z равным частному x/y при y != 0 и возвращает z. Если y == 0, возникает паника во время выполнения из-за деления на ноль. Div реализует евклидово деление (в отличие от Go); подробности см. в Int.DivMod.

func (*Int) DivMod

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

DivMod устанавливает z равным частному x div y, а m — остатку x mod y и возвращает пару (z, m) при y != 0. Если y == 0, возникает паника во время выполнения из-за деления на ноль.

DivMod реализует евклидово деление и взятие остатка (в отличие от Go):

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

(См. Raymond T. Boute, «The Euclidean definition of the functions div and mod». ACM Transactions on Programming Languages and Systems (TOPLAS), 14(2):127-144, New York, NY, USA, 4/1992. ACM press.) Реализацию T-деления и взятия остатка (как в Go) см. в Int.QuoRem.

func (*Int) Divide 1.27

func (z *Int) Divide(x, y, r *Int, mode RoundingMode) (*Int, *Int)

Divide вычисляет целочисленное частное q и остаток r так, что

q = f(x/y)
r = x - y*q

где f определяется режимом округления, которым должно быть одно из значений Trunc, Floor, Round или Ceil. Divide устанавливает z равным q, если z != nil, обновляет r, если r != nil, и возвращает пару (z, r) при y != 0. Если y == 0, возникает паника во время выполнения из-за деления на ноль.

func (*Int) Exp

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

Exp устанавливает z = x**y mod |m| (то есть знак m игнорируется) и возвращает z. Если m == nil или m == 0, z = x**y, кроме случая y <= 0, когда z = 1. Если m != 0, y < 0, а x и m не взаимно просты, z не изменяется и возвращается nil.

Модульное возведение в степень для входных данных определённого размера не является криптографической операцией с постоянным временем выполнения.

func (*Int) FillBytes 1.15

func (x *Int) FillBytes(buf []byte) []byte

FillBytes устанавливает buf равным абсолютному значению x, записывая его в срез байтов с нулевым дополнением в порядке от старшего байта к младшему, и возвращает buf.

Если абсолютное значение x не помещается в buf, FillBytes вызывает панику.

func (*Int) Float64 1.21

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

Float64 возвращает ближайшее к x значение float64 и указание на наличие округления.

func (*Int) Format

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

Format реализует fmt.Formatter. Поддерживаются форматы 'b' (двоичный), 'o' (восьмеричный с префиксом 0), 'O' (восьмеричный с префиксом 0o), 'd' (десятичный), 'x' (шестнадцатеричный в нижнем регистре) и 'X' (шестнадцатеричный в верхнем регистре). Также поддерживается полный набор флагов форматирования пакета fmt для целочисленных типов, включая '+' и ' ' для управления знаком, '#' для начального нуля в восьмеричной записи и для шестнадцатеричной записи, префикс "0x" или "0X" для "%#x" и "%#X" соответственно, указание минимальной точности в цифрах, ширину поля вывода, заполнение пробелами или нулями, а также '-' для выравнивания по левому или правому краю.

func (*Int) GCD

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

GCD устанавливает z равным наибольшему общему делителю a и b и возвращает z. Если x или y не равны nil, GCD устанавливает их значения так, чтобы z = a*x + b*y.

a и b могут быть положительными, нулевыми или отрицательными. (До Go 1.14 оба значения должны были быть > 0.) Независимо от знаков a и b, z всегда >= 0.

Если a == b == 0, GCD устанавливает z = x = y = 0.

Если a == 0 и b != 0, GCD устанавливает z = |b|, x = 0, y = sign(b) * 1.

Если a != 0 и b == 0, GCD устанавливает z = |a|, x = sign(a) * 1, y = 0.

func (*Int) GobDecode

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

GobDecode реализует интерфейс encoding/gob.GobDecoder.

func (*Int) GobEncode

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

GobEncode реализует интерфейс encoding/gob.GobEncoder.

func (*Int) Int64

func (x *Int) Int64() int64

Int64 возвращает представление x типа int64. Если x невозможно представить типом int64, результат не определён.

func (*Int) IsInt64 1.9

func (x *Int) IsInt64() bool

IsInt64 сообщает, можно ли представить x типом int64.

func (*Int) IsUint64 1.9

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 1.1

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

MarshalJSON реализует интерфейс encoding/json.Marshaler.

func (*Int) MarshalText 1.3

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

MarshalText реализует интерфейс encoding.TextMarshaler.

func (*Int) Mod

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

Mod устанавливает z равным остатку x%y при y != 0 и возвращает z. Если y == 0, возникает паника во время выполнения из-за деления на ноль. Mod реализует евклидово взятие остатка (в отличие от Go); подробности см. в Int.DivMod.

func (*Int) ModInverse

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

ModInverse устанавливает z равным мультипликативному обратному элемента g в кольце ℤ/nℤ и возвращает z. Если g и n не взаимно просты, у g нет мультипликативного обратного в кольце ℤ/nℤ. В этом случае z не изменяется, а возвращаемое значение равно nil. Если n == 0, возникает паника во время выполнения из-за деления на ноль.

func (*Int) ModSqrt 1.5

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

ModSqrt устанавливает z равным квадратному корню из x по модулю p, если такой корень существует, и возвращает z. Модуль p должен быть нечётным простым числом. Если x не является квадратом по модулю p, ModSqrt оставляет z без изменений и возвращает nil. Функция вызывает панику, если p не является нечётным целым числом; её поведение не определено, если 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

Not устанавливает z = ^x и возвращает z.

func (*Int) Or

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

Or устанавливает z = x | y и возвращает z.

func (*Int) ProbablyPrime

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

ProbablyPrime проверяет, является ли x, вероятно, простым числом, применяя тест Миллера — Рабина с n псевдослучайно выбранными основаниями, а также тест Бейли — PSW.

Если x — простое число, ProbablyPrime возвращает true. Если x выбрано случайным образом и не является простым, ProbablyPrime, скорее всего, вернёт false. Вероятность возврата true для случайно выбранного составного числа не превышает ¼ⁿ.

ProbablyPrime абсолютно точен для входных значений меньше 2⁶⁴. Дополнительные сведения о вероятностях ошибок см. в Menezes et al., Handbook of Applied Cryptography, 1997, pp. 145-149, и FIPS 186-4 Appendix F.

ProbablyPrime не подходит для проверки простых чисел, которые злоумышленник мог специально подобрать, чтобы обмануть тест.

Начиная с Go 1.8 вызов ProbablyPrime(0) допустим и применяет только тест Бейли — PSW. До Go 1.8 ProbablyPrime применял только тесты Миллера — Рабина, а вызов ProbablyPrime(0) вызывал панику.

func (*Int) Quo

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

Quo устанавливает z равным частному x/y при y != 0 и возвращает z. Если y == 0, возникает паника во время выполнения из-за деления на ноль. Quo реализует усечённое деление (как в Go); подробности см. в Int.QuoRem.

func (*Int) QuoRem

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

QuoRem устанавливает z равным частному x/y, а r — остатку x%y и возвращает пару (z, r) при y != 0. Если y == 0, возникает паника во время выполнения из-за деления на ноль.

QuoRem реализует T-деление и взятие остатка (как в Go):

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

(См. Daan Leijen, «Division and Modulus for Computer Scientists».) Реализацию евклидова деления и взятия остатка (в отличие от Go) см. в Int.DivMod.

func (*Int) Rand

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

Rand устанавливает z равным псевдослучайному числу в диапазоне [0, n) и возвращает z.

Поскольку для этого используется пакет math/rand, метод нельзя применять в задачах, критичных к безопасности. Вместо него используйте crypto/rand.Int.

func (*Int) Rem

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

Rem устанавливает z равным остатку x%y при y != 0 и возвращает z. Если y == 0, возникает паника во время выполнения из-за деления на ноль. Rem реализует усечённое взятие остатка (как в Go); подробности см. в Int.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

Scan — вспомогательная функция для fmt.Scanner; она устанавливает z равным значению считанного числа. Принимаются форматы 'b' (двоичный), 'o' (восьмеричный), 'd' (десятичный), 'x' (шестнадцатеричный в нижнем регистре) и 'X' (шестнадцатеричный в верхнем регистре).

Пример

Код:

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

Вывод:

18446744073709551617

func (*Int) Set

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

Set устанавливает z равным x и возвращает z.

func (*Int) SetBit

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

SetBit устанавливает z равным 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 предоставляет прямой (непроверяемый, но быстрый) доступ к z, устанавливая его значение равным abs, интерпретируемому как срез Word в порядке от младшего слова к старшему, и возвращая 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 не определено, а возвращаемое значение равно nil.

Аргумент base должен быть равен 0 или иметь значение от 2 до MaxBase. При основании 0 префикс числа определяет фактическое основание: префикс «0b» или «0B» задаёт основание 2, «0», «0o» или «0O» — основание 8, а «0x» или «0X» — основание 16. В остальных случаях выбирается основание 10, и префикс не допускается.

Для оснований <= 36 буквы в нижнем и верхнем регистре считаются одинаковыми: буквы от 'a' до 'z' и от 'A' до 'Z' представляют значения цифр от 10 до 35. Для оснований > 36 буквы от 'A' до 'Z' представляют значения цифр от 36 до 61.

При основании 0 символ подчёркивания «_» может находиться между префиксом основания и следующей за ним цифрой, а также между соседними цифрами; такие символы подчёркивания не влияют на значение числа. Неправильное расположение символов подчёркивания сообщается как ошибка, если других ошибок нет. Если base != 0, символы подчёркивания не распознаются и обрабатываются как любой другой символ, не являющийся допустимой цифрой.

Пример

Код:

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

Вывод:

420

func (*Int) SetUint64 1.1

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

SetUint64 устанавливает z равным x и возвращает z.

func (*Int) Sign

func (x *Int) Sign() int

Sign возвращает:

  • -1, если x < 0;
  • 0, если x == 0;
  • +1, если x > 0.

func (*Int) Sqrt 1.8

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

Sqrt устанавливает z равным ⌊√x⌋ — наибольшему целому числу, для которого z² ≤ x, — и возвращает z. Если x отрицательно, метод вызывает панику.

func (*Int) String

func (x *Int) String() string

String возвращает десятичное представление x, сформированное методом x.Text(10).

func (*Int) Sub

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

Sub устанавливает z равным разности x-y и возвращает z.

func (*Int) Text 1.6

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

Text возвращает строковое представление x в указанной системе счисления. Основание должно быть в диапазоне от 2 до 62 включительно. В результате используются строчные буквы от 'a' до 'z' для значений цифр от 10 до 35 и заглавные буквы от 'A' до 'Z' для значений цифр от 36 до 61. К строке не добавляется префикс (например, "0x"). Если x — nil-указатель, метод возвращает "<nil>".

func (*Int) TrailingZeroBits 1.13

func (x *Int) TrailingZeroBits() uint

TrailingZeroBits возвращает количество последовательных нулевых битов в младших разрядах |x|.

func (*Int) Uint64 1.1

func (x *Int) Uint64() uint64

Uint64 возвращает представление x типа uint64. Если x невозможно представить типом uint64, результат не определён.

func (*Int) UnmarshalJSON 1.1

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

UnmarshalJSON реализует интерфейс encoding/json.Unmarshaler.

func (*Int) UnmarshalText 1.3

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.

Операции всегда принимают аргументы-указатели (*Rat), а не значения Rat; каждому уникальному значению Rat должен соответствовать собственный уникальный указатель *Rat. Чтобы «скопировать» значение Rat, необходимо присвоить существующему (или вновь выделенному) Rat новое значение с помощью метода Rat.Set; поверхностное копирование Rat не поддерживается и может привести к ошибкам.

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

func NewRat

func NewRat(a, b int64) *Rat

NewRat создает новый Rat с числителем a и знаменателем b.

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

Add устанавливает z равным сумме x+y и возвращает z.

func (*Rat) AppendText 1.24

func (x *Rat) AppendText(b []byte) ([]byte, error)

AppendText реализует интерфейс encoding.TextAppender.

func (*Rat) Cmp

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

Cmp сравнивает x и y и возвращает:

  • -1, если x < y;
  • 0, если x == y;
  • +1, если x > y.

func (*Rat) Denom

func (x *Rat) Denom() *Int

Denom возвращает знаменатель x; он всегда > 0. Результат является ссылкой на знаменатель x, если только x не является неинициализированным (нулевым значением) Rat; в этом случае результатом будет новый Int со значением 1. (Чтобы инициализировать x, подойдет любая операция, задающая значение x, включая x.Set(x).) Если результат является ссылкой на знаменатель x, он может измениться при присваивании x нового значения, и наоборот.

func (*Rat) Float32 1.4

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

Float32 возвращает ближайшее значение float32 для x и логическое значение, указывающее, представляет ли f значение x точно. Если модуль x слишком велик, чтобы быть представленным значением float32, f равен бесконечности, а exact — false. Знак f всегда совпадает со знаком x, даже если f == 0.

func (*Rat) Float64 1.1

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

Float64 возвращает ближайшее значение float64 для x и логическое значение, указывающее, представляет ли f значение x точно. Если модуль x слишком велик, чтобы быть представленным значением float64, f равен бесконечности, а exact — false. Знак f всегда совпадает со знаком x, даже если f == 0.

func (*Rat) FloatPrec 1.22

func (x *Rat) FloatPrec() (n int, exact bool)

FloatPrec возвращает число n неповторяющихся цифр, непосредственно следующих за десятичной точкой в десятичной записи x. Логический результат указывает, является ли десятичная запись x с таким количеством дробных цифр точной или округленной.

Примеры:

x      n    exact    decimal representation n fractional digits
0      0    true     0
1      0    true     1
1/2    1    true     0.5
1/3    0    false    0       (0.333... rounded)
1/4    2    true     0.25
1/6    1    false    0.2     (0.166... rounded)

func (*Rat) FloatString

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

FloatString возвращает строковое представление x в десятичном формате с точностью prec цифр после десятичной точки. Последняя цифра округляется до ближайшего значения, а при равном расстоянии — от нуля.

func (*Rat) GobDecode

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

GobDecode реализует интерфейс encoding/gob.GobDecoder.

func (*Rat) GobEncode

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

GobEncode реализует интерфейс encoding/gob.GobEncoder.

func (*Rat) Inv

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

Inv устанавливает z равным 1/x и возвращает z. Если x == 0, Inv вызывает панику.

func (*Rat) IsInt

func (x *Rat) IsInt() bool

IsInt сообщает, равен ли знаменатель x единице.

func (*Rat) MarshalText 1.3

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

Quo устанавливает z равным частному x/y и возвращает z. Если y == 0, Quo вызывает панику.

func (*Rat) RatString

func (x *Rat) RatString() string

RatString возвращает строковое представление x в форме "a/b", если b != 1, и в форме "a", если b == 1.

func (*Rat) Scan

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

Scan — вспомогательная функция для fmt.Scanner. Она поддерживает форматы 'e', 'E', 'f', 'F', 'g', 'G' и 'v'. Все форматы эквивалентны.

Пример

Код:

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

Вывод:

3/2

func (*Rat) Set

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

Set устанавливает z равным x (создавая копию x) и возвращает z.

func (*Rat) SetFloat64 1.1

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. Если b == 0, SetFrac вызывает панику.

func (*Rat) SetFrac64

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

SetFrac64 устанавливает z равным a/b и возвращает z. Если b == 0, SetFrac64 вызывает панику.

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" или числа с плавающей точкой, за которым необязательно следует экспонента. Если задана дробь, и делимое, и делитель могут быть десятичными целыми числами либо независимо иметь префикс “0b”, “0” или “0o”, либо “0x” (или соответствующие варианты в верхнем регистре), обозначающий двоичное, восьмеричное или шестнадцатеричное целое число соответственно. У делителя не может быть знака. Если задано число с плавающей точкой, оно может быть в десятичной форме или использовать любой из указанных выше префиксов, кроме “0”, для обозначения недесятичной мантиссы. Начальный “0” считается начальным десятичным нулем и в этом случае не обозначает восьмеричную запись. Также можно указать необязательную экспоненту по основанию 10 “e” или по основанию 2 “p” (или соответствующие варианты в верхнем регистре), за исключением шестнадцатеричных чисел с плавающей точкой, для которых допустима только необязательная экспонента “p” (так как “e” или “E” нельзя отличить от цифры мантиссы). Если абсолютное значение экспоненты слишком велико, операция может завершиться неудачей. Для успешного выполнения должна быть корректна вся строка, а не только ее префикс. Если операция завершилась неудачей, значение z не определено, а возвращаемое значение равно nil.

Пример

Код:

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

Вывод:

3.142

func (*Rat) SetUint64 1.13

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

SetUint64 устанавливает z равным x и возвращает z.

func (*Rat) Sign

func (x *Rat) Sign() int

Sign возвращает:

  • -1, если x < 0;
  • 0, если x == 0;
  • +1, если x > 0.

func (*Rat) String

func (x *Rat) String() string

String возвращает строковое представление x в форме "a/b" (даже если b == 1).

func (*Rat) Sub

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

Sub устанавливает z равным разности x-y и возвращает z.

func (*Rat) UnmarshalText 1.3

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

UnmarshalText реализует интерфейс encoding.TextUnmarshaler.

type RoundingMode 1.5

RoundingMode определяет, как значение Float округляется до требуемой точности. Округление может изменить значение Float; погрешность округления описывается значением Accuracy для этого Float.

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
)

Пример

Код:

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

Вывод:

   x  ToNearestEven  ToNearestAway  ToZero  AwayFromZero  ToNegativeInf  ToPositiveInf
 2.6              3              3       2             3              2              3
 2.5              2              3       2             3              2              3
 2.1              2              2       2             3              2              3
-2.1             -2             -2      -2            -3             -3             -2
-2.5             -2             -3      -2            -3             -3             -2
-2.6             -3             -3      -2            -3             -3             -2

func (RoundingMode) String 1.5

func (i RoundingMode) String() string

type Word

Word представляет одну цифру многоточного беззнакового целого числа.

type Word uint

Подкаталоги

Имя Краткое описание
..

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/math/big/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API