import "big"
大きな整数の演算を実装しています。下に示す数値型をサポートしています。
- Int 符号付整数 - Rat 有理数
Int型のすべてのメソッドはレシーバ自身を戻り値として返します。レシーバとオペランドが同一のときはレシーバが計算結果で上書きされます(メモリは再利用されます)。メソッドが必ず結果を返すので、連続した操作が可能です。
パッケージファイル
arith.go arith_decl.go int.go nat.go rat.go
GcdInt関数
func GcdInt(d, x, y, a, b *Int)
GcdInt は、aとbの最大公約数をdにセットします。aとbには正の値を指定してください。
xとyがにnilでないときはGcdIntはx,yに d = a*x + b*y となるような値をセットします。
もしaかbにマイナス値を指定した場合、d, x, yの3つすべてに0がセットされます。
ProbablyPrime関数
func ProbablyPrime(z *Int, n int) bool
ProbablyPrimeは、ミラー-ラビン素数判定法によりzが素数か判定します。trueが返ればzは1 – 1/4^nの確率で素数です。falseが返ればzは素数ではありません。
Int型
Int型は、値の大きな符号付整数を扱います。Int型のゼロ値は値0を表します。
type Int struct {
// contains unexported fields
}
NewInt関数
func NewInt(x int64) *Int
NewIntは、新しいIntを作成してxをセットした後、作成したIntを返します。
(*Int) Abs関数
func (z *Int) Abs(x *Int) *Int
Absは、zに|x|(xの絶対値)をセットし、zを返します。
(*Int) Add関数
func (z *Int) Add(x, y *Int) *Int
Addは 、zにx + yの合計をセットし、zを返します。
(*Int) And関数
func (z *Int) And(x, y *Int) *Int
Andは、zにx & yをセットし、zを返します。
(*Int) AndNot関数
func (z *Int) AndNot(x, y *Int) *Int
AndNotは、zにx &^ yをセットし、zを返します。
(*Int) Binomial関数
func (z *Int) Binomial(n, k int64) *Int
Binomialは、zに(n, k)の二項係数をセットし、zを返します。
(*Int) BitLen関数
func (z *Int) BitLen() int
BitLenは、zの絶対値のビット長を返します。0のビット長は0です。
(*Int) Bytes関数
func (z *Int) Bytes() []byte
Bytesは、zをビッグエンディアンのバイト配列とみなし、その絶対値を返します。
(*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
(*Int) Div関数
func (z *Int) Div(x, y *Int) (q, r *Int)
Divは、y != 0のとき、zにx / yの商をセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。詳細はDivModを参照ください。
(*Int) DivMod関数
func (z *Int) DivMod(x, y, m *Int) (*Int, *Int)
DivModは、y != 0のとき、xをyで割った商zと、xをyで割った余りmを算出し、対の値(z, m)を返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。
DivModは、ユークリッドの除算と余りの計算を実装しています。(Goにおける計算とは異なります)
q = x div y such that m = x - y*q with 0 <= m < |q|
(参考資料: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.)
(*Int) Exp関数
func (z *Int) Exp(x, y, m *Int) *Int
Expは、 z = x**y mod m を計算します。mがnilのときは z = x**y を計算します。参考資料:Knuth, volume 2, section 4.6.3
(*Int) Format関数
func (x *Int) Format(s fmt.State, ch int)
Formatは、fmt.Formatter用のサポートルーチンです。この関数は、フォーマットとして’b’ (2進数)、’o’ (8進数)、’d’ (10進数)、’x’ (16進数)を受け付けます。
(*Int) Int64関数
func (x *Int) Int64() int64
Int64は、xのint64表現を返します。xがint64で表せないときの戻り値は未定義です。
(*Int) Lsh関数
func (z *Int) Lsh(x *Int, n uint) *Int
Lsh sets z = x << n and returns z.
(*Int) Mod関数
func (z *Int) Mod(x, y *Int) *Int
Modは、y != 0のとき、zにx % yの余りをセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。詳細はDivModを参照ください。
(*Int) ModInverse関数
func (z *Int) ModInverse(g, p *Int) *Int
ModInverseは、zに、ℤ/pℤ(pが素数のとき)群内におけるgの逆数をセットし、zを返します。
(*Int) Mul関数
func (z *Int) Mul(x, y *Int) *Int
Mulは、zにx*yの積をセットし、zを返します。
(*Int) MulRange関数
func (z *Int) MulRange(a, b int64) *Int
MulRangeは、zに[a, b]の範囲内のすべての整数の積をセットし、zを返します。範囲が空のとき(a > b)は、1を返します。
(*Int) Neg関数
func (z *Int) Neg(x *Int) *Int
Negは、zに-xをセットし、zを返します。
(*Int) Not関数
func (z *Int) Not(x *Int) *Int
Notは、zに^xをセットし、xを返します。
(*Int) Or関数
func (z *Int) Or(x, y *Int) *Int
Orは、zにx | yをセットし、zを返します。
(*Int) Quo関数
func (z *Int) Quo(x, y *Int) *Int
Quoは、y != 0のとき、zにx / yの商をセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。詳細はQuoRemを参照ください。
(*Int) QuoRem関数
func (z *Int) QuoRem(x, y, r *Int) (*Int, *Int)
QuoRemは、y != 0のとき、xをyで割った商zと、xをyで割った余りrを算出し、対の値(z, r)を返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。
QuoRemは、T-divisionによる除算と余りの計算を実装しています。(Goにおける計算とは異なります)
q = x/y 結果はゼロ方向に切り捨て r = x - y*q
(参考資料:Daan Leijen, “Division and Modulus for Computer Scientists”)
(*Int) Rem関数
func (z *Int) Rem(x, y *Int) *Int
Remは、y != 0のとき、zにx % yの余りをセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。詳細はQuoRemを参照ください。
(*Int) Rsh関数
func (z *Int) Rsh(x *Int, n uint) *Int
Rshは 、z = x >> n を計算し、zを返します。
(*Int) Set関数
func (z *Int) Set(x *Int) *Int
Setは、xをzにセットし、zを返します。
(*Int) SetBytes関数
func (z *Int) SetBytes(b []byte) *Int
SetBytesは、bを符号なし整数のビッグエンディアンのバイト列として解析し、zに結果をセットします。
(*Int) SetInt64関数
func (z *Int) SetInt64(x int64) *Int
SetInt64 sets z to x and returns z.
(*Int) SetString関数
func (z *Int) SetString(s string, base int) (*Int, bool)
SetString は、baseを基数とするsの値をzにセットし、zおよび、成否を示す論理値を返します。SetStringに失敗したときのzの値は規定されていません。
base引数の値が0のとき、文字列のプレフィックスから基数が判定されます。0xまたは0Xは16進数、0は8進数、0bまたは0Bは2進数、それ以外は10進数となります。
(*Int) Sign関数
func (x *Int) Sign() int
Signは、 次の結果を返します。
-1 if x < 0 0 if x == 0 +1 if x > 0
(*Int) String関数
func (x *Int) String() string
(*Int) Sub関数
func (z *Int) Sub(x, y *Int) *Int
Subは、zにx-yの差をセットし、zを返します。
(*Int) Xor関数
func (z *Int) Xor(x, y *Int) *Int
Xorは、zにx ^ yをセットし、zを返します。
Rat型
Ratは、任意精度のa/bの商を表します。Ratのゼロ値は、0/0であり、これは有効なRatではありません。
type Rat struct {
// contains unexported fields
}
NewRat関数
func NewRat(a, b int64) *Rat
NewRatは、分子aと分母bを持つ新しいRatを作成します。
(*Rat) Abs関数
func (z *Rat) Abs(x *Rat) *Rat
Absは、zに|x|(xの絶対値)をセットし、zを返します。
(*Rat) Add関数
func (z *Rat) Add(x, y *Rat) *Rat
Addは、zにx+yの合計をセットし、zを返します。
(*Rat) Cmp関数
func (x *Rat) Cmp(y *Rat) (r int)
Cmpは、xとyを比較し、次の結果を返します。
-1 if x < y 0 if x == y +1 if x > y
(*Rat) Denom関数
func (z *Rat) Denom() *Int
Demomは、zの分母を返します。この値は常に0より大きい値です。この結果は、zの分母の参照であるため、zに新しく値が代入されると値が変わります。
(*Rat) FloatString関数
func (z *Rat) FloatString(prec int) string
FloatStringは、zの小数点形式の文字列表現を返します。小数点以下の精度はprec桁数で、最後の桁は丸められます。
(*Rat) IsInt関数
func (x *Rat) IsInt() bool
IsIntは、xの分母が1のとき、trueを返します。returns true if the denominator of x is 1.
(*Rat) Mul関数
func (z *Rat) Mul(x, y *Rat) *Rat
Mulは、zにx * yの積をセットし、zを返します。
(*Rat) Neg関数
func (z *Rat) Neg(x *Rat) *Rat
Negは、zに-xをセット(必要に応じでxのコピーを作成して)し、zを返します。
(*Rat) Num関数
func (z *Rat) Num() *Int
Numは、zの分子を返します。この値は、0以下になることがあります。この結果は、zの分子の参照であるため、zに新しく値が代入されると値が変わります。
(*Rat) Quo関数
func (z *Rat) Quo(x, y *Rat) *Rat
Quoは、zにx / yの商をセットし、zを返します。y == 0のときは、ゼロ除算となり、ランタイムパニックが発生します。
(*Rat) Set関数
func (z *Rat) Set(x *Rat) *Rat
Setは、zにxをセット(必要に応じでxのコピーを作成して)し、zを返します。
(*Rat) SetFrac関数
func (z *Rat) SetFrac(a, b *Int) *Rat
SetFracは、zにa/bをセットし、zを返します。
(*Rat) SetFrac64関数
func (z *Rat) SetFrac64(a, b int64) *Rat
SetFrac64は、zにa/bをセットし、zを返します。
(*Rat) SetInt関数
func (z *Rat) SetInt(x *Int) *Rat
SetIntは、zにxをセット(必要に応じでxのコピーを作成して)し、zを返します。
(*Rat) SetInt64関数
func (z *Rat) SetInt64(x int64) *Rat
SetInt64は、zにxをセットし、zを返します。
(*Rat) SetString関数
func (z *Rat) SetString(s string) (*Rat, bool)
SetStringは、zにsの値をセットし、zおよび、成否を示す論理値を返します。sには、分数「a/b」、または浮動小数値(オプションで指数を伴える)を指定できます。処理に失敗したときのzの値は規定されていません。
(*Rat) Sign関数
func (x *Rat) Sign() int
Signは、 次の結果を返します。
-1 if x < 0 0 if x == 0 +1 if x > 0
(*Rat) String関数
func (z *Rat) String() string
Stringは、zの「a/b」形式の文字列表現を返します。
(*Rat) Sub関数
func (z *Rat) Sub(x, y *Rat) *Rat
Subは、zにx – yの差をセットし、zを返します。
Word型
type Word uintptr
Trackback URL
Comments