Commit bf1f63a2 authored by Adam Langley's avatar Adam Langley

big: fix large division.

I missed a case.

R=rsc, agl
CC=golang-dev
https://golang.org/cl/156092
parent 8c1a627e
......@@ -310,20 +310,26 @@ func divLargeNN(z, z2, uIn, v []Word) (q, r []Word) {
// D2.
for j := m; j >= 0; j-- {
// D3.
qhat, rhat := divWW_g(u[j+n], u[j+n-1], v[n-1]);
// x1 | x2 = q̂v_{n-2}
x1, x2 := mulWW_g(qhat, v[n-2]);
// test if q̂v_{n-2} > br̂ + u_{j+n-2}
for greaterThan(x1, x2, rhat, u[j+n-2]) {
qhat--;
prevRhat := rhat;
rhat += v[n-1];
// v[n-1] >= 0, so this tests for overflow.
if rhat < prevRhat {
break
var qhat Word;
if u[j+n] == v[n-1] {
qhat = _B - 1
} else {
var rhat Word;
qhat, rhat = divWW_g(u[j+n], u[j+n-1], v[n-1]);
// x1 | x2 = q̂v_{n-2}
x1, x2 := mulWW_g(qhat, v[n-2]);
// test if q̂v_{n-2} > br̂ + u_{j+n-2}
for greaterThan(x1, x2, rhat, u[j+n-2]) {
qhat--;
prevRhat := rhat;
rhat += v[n-1];
// v[n-1] >= 0, so this tests for overflow.
if rhat < prevRhat {
break
}
x1, x2 = mulWW_g(qhat, v[n-2]);
}
x1, x2 = mulWW_g(qhat, v[n-2]);
}
// D4.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment