1
0
mirror of https://github.com/golang/go synced 2024-11-11 16:51:50 -07:00

math/big: simplify divBasic ujn assignment

Rather than conditionally assigning ujn, initialise ujn above the
loop to invent the leading 0 for u, then unconditionally load ujn
at the bottom of the loop. This code operates on the basis that
n >= 2, hence j+n-1 is always greater than zero.

Change-Id: I1272ef30c787ed8707ae8421af2adcccc776d389
Reviewed-on: https://go-review.googlesource.com/c/go/+/467555
Auto-Submit: Robert Griesemer <gri@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Commit-Queue: Robert Griesemer <gri@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
This commit is contained in:
Joel Sing 2023-02-07 23:15:07 +11:00 committed by Gopher Robot
parent 4f95ad8ca2
commit 5367d696f7

View File

@ -642,15 +642,13 @@ func (q nat) divBasic(u, v nat) {
vn1 := v[n-1]
rec := reciprocalWord(vn1)
// Invent a leading 0 for u, for the first iteration.
ujn := Word(0)
// Compute each digit of quotient.
for j := m; j >= 0; j-- {
// Compute the 2-by-1 guess q̂.
// The first iteration must invent a leading 0 for u.
qhat := Word(_M)
var ujn Word
if j+n < len(u) {
ujn = u[j+n]
}
// ujn ≤ vn1, or else q̂ would be more than one digit.
// For ujn == vn1, we set q̂ to the max digit M above.
@ -699,6 +697,8 @@ func (q nat) divBasic(u, v nat) {
qhat--
}
ujn = u[j+n-1]
// Save quotient digit.
// Caller may know the top digit is zero and not leave room for it.
if j == m && m == len(q) && qhat == 0 {