Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(981)

Unified Diff: src/pkg/big/int.go

Issue 976041: code review 976041: big: Create type nat (Closed)
Patch Set: code review 976041: big: Create type nat Created 14 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pkg/big/arith_test.go ('k') | src/pkg/big/int_test.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pkg/big/int.go
===================================================================
--- a/src/pkg/big/int.go
+++ b/src/pkg/big/int.go
@@ -9,8 +9,8 @@
// An Int represents a signed multi-precision integer.
// The zero value for an Int represents the value 0.
type Int struct {
- neg bool // sign
- abs []Word // absolute value of the integer
+ neg bool // sign
+ abs nat // absolute value of the integer
}
@@ -21,7 +21,7 @@
z.neg = true
x = -x
}
- z.abs = newN(z.abs, uint64(x))
+ z.abs = z.abs.new(uint64(x))
return z
}
@@ -33,7 +33,7 @@
// Set sets z to x.
func (z *Int) Set(x *Int) *Int {
z.neg = x.neg
- z.abs = setN(z.abs, x.abs)
+ z.abs = z.abs.set(x.abs)
return z
}
@@ -44,16 +44,16 @@
// x + y == x + y
// (-x) + (-y) == -(x + y)
z.neg = x.neg
- z.abs = addNN(z.abs, x.abs, y.abs)
+ z.abs = z.abs.add(x.abs, y.abs)
} else {
// x + (-y) == x - y == -(y - x)
// (-x) + y == y - x == -(x - y)
- if cmpNN(x.abs, y.abs) >= 0 {
+ if x.abs.cmp(y.abs) >= 0 {
z.neg = x.neg
- z.abs = subNN(z.abs, x.abs, y.abs)
+ z.abs = z.abs.sub(x.abs, y.abs)
} else {
z.neg = !x.neg
- z.abs = subNN(z.abs, y.abs, x.abs)
+ z.abs = z.abs.sub(y.abs, x.abs)
}
}
if len(z.abs) == 0 {
@@ -69,16 +69,16 @@
// x - (-y) == x + y
// (-x) - y == -(x + y)
z.neg = x.neg
- z.abs = addNN(z.abs, x.abs, y.abs)
+ z.abs = z.abs.add(x.abs, y.abs)
} else {
// x - y == x - y == -(y - x)
// (-x) - (-y) == y - x == -(x - y)
- if cmpNN(x.abs, y.abs) >= 0 {
+ if x.abs.cmp(y.abs) >= 0 {
z.neg = x.neg
- z.abs = subNN(z.abs, x.abs, y.abs)
+ z.abs = z.abs.sub(x.abs, y.abs)
} else {
z.neg = !x.neg
- z.abs = subNN(z.abs, y.abs, x.abs)
+ z.abs = z.abs.sub(y.abs, x.abs)
}
}
if len(z.abs) == 0 {
@@ -94,7 +94,7 @@
// x * (-y) == -(x * y)
// (-x) * y == -(x * y)
// (-x) * (-y) == x * y
- z.abs = mulNN(z.abs, x.abs, y.abs)
+ z.abs = z.abs.mul(x.abs, y.abs)
z.neg = len(z.abs) > 0 && x.neg != y.neg // 0 has no sign
return z
}
@@ -126,14 +126,14 @@
func div(q, r, x, y *Int) {
q.neg = x.neg != y.neg
r.neg = x.neg
- q.abs, r.abs = divNN(q.abs, r.abs, x.abs, y.abs)
+ q.abs, r.abs = q.abs.div(r.abs, x.abs, y.abs)
return
}
// Neg computes z = -x.
func (z *Int) Neg(x *Int) *Int {
- z.abs = setN(z.abs, x.abs)
+ z.abs = z.abs.set(x.abs)
z.neg = len(z.abs) > 0 && !x.neg // 0 has no sign
return z
}
@@ -152,7 +152,7 @@
// (-x) cmp (-y) == -(x cmp y)
switch {
case x.neg == y.neg:
- r = cmpNN(x.abs, y.abs)
+ r = x.abs.cmp(y.abs)
if x.neg {
r = -r
}
@@ -170,7 +170,7 @@
if z.neg {
s = "-"
}
- return s + stringN(z.abs, 10)
+ return s + z.abs.string(10)
}
@@ -212,7 +212,7 @@
z.neg = false
}
- z.abs, _, scanned = scanN(z.abs, s, base)
+ z.abs, _, scanned = z.abs.scan(s, base)
if scanned != len(s) {
goto Error
}
@@ -230,7 +230,7 @@
// sets z to that value.
func (z *Int) SetBytes(b []byte) *Int {
s := int(_S)
- z.abs = makeN(z.abs, (len(b)+s-1)/s, false)
+ z.abs = z.abs.make((len(b)+s-1)/s, false)
z.neg = false
j := 0
@@ -258,7 +258,7 @@
z.abs[j] = w
}
- z.abs = normN(z.abs)
+ z.abs = z.abs.norm()
return z
}
@@ -306,12 +306,12 @@
return z
}
- var mWords []Word
+ var mWords nat
if m != nil {
mWords = m.abs
}
- z.abs = expNNN(z.abs, x.abs, y.abs, mWords)
+ z.abs = z.abs.expNN(x.abs, y.abs, mWords)
z.neg = x.neg && y.abs[0]&1 == 1
return z
}
@@ -379,20 +379,20 @@
// ProbablyPrime performs n Miller-Rabin tests to check whether z is prime.
// If it returns true, z is prime with probability 1 - 1/4^n.
// If it returns false, z is not prime.
-func ProbablyPrime(z *Int, n int) bool { return !z.neg && probablyPrime(z.abs, n) }
+func ProbablyPrime(z *Int, n int) bool { return !z.neg && z.abs.probablyPrime(n) }
// Lsh sets z = x << n and returns z.
func (z *Int) Lsh(x *Int, n uint) *Int {
addedWords := int(n) / _W
// Don't assign z.abs yet, in case z == x
- znew := makeN(z.abs, len(x.abs)+addedWords+1, false)
+ znew := z.abs.make(len(x.abs)+addedWords+1, false)
z.neg = x.neg
- shiftLeft(znew[addedWords:], x.abs, n%_W)
+ znew[addedWords:].shiftLeft(x.abs, n%_W)
for i := range znew[0:addedWords] {
znew[i] = 0
}
- z.abs = normN(znew)
+ z.abs = znew.norm()
return z
}
@@ -401,9 +401,9 @@
func (z *Int) Rsh(x *Int, n uint) *Int {
removedWords := int(n) / _W
// Don't assign z.abs yet, in case z == x
- znew := makeN(z.abs, len(x.abs)-removedWords, false)
+ znew := z.abs.make(len(x.abs)-removedWords, false)
z.neg = x.neg
- shiftRight(znew, x.abs[removedWords:], n%_W)
- z.abs = normN(znew)
+ znew.shiftRight(x.abs[removedWords:], n%_W)
+ z.abs = znew.norm()
return z
}
« no previous file with comments | « src/pkg/big/arith_test.go ('k') | src/pkg/big/int_test.go » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b