mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
math/big: fix aliasing bug in Float.Quo
TBR r, adonovan Change-Id: I1a38e2d724bf1147c7307a7e5ae855c42c60428c Reviewed-on: https://go-review.googlesource.com/4875 Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
a809dc7adb
commit
b7bfb54eaa
1 changed files with 5 additions and 1 deletions
|
|
@ -967,12 +967,16 @@ func (z *Float) uquo(x, y *Float) {
|
|||
// to shorten x for faster division. But we must be extra careful
|
||||
// with rounding in that case.
|
||||
|
||||
// Compute d before division since there may be aliasing of x.mant
|
||||
// (via xadj) or y.mant with z.mant.
|
||||
d := len(xadj) - len(y.mant)
|
||||
|
||||
// divide
|
||||
var r nat
|
||||
z.mant, r = z.mant.div(nil, xadj, y.mant)
|
||||
|
||||
// determine exponent
|
||||
e := int64(x.exp) - int64(y.exp) - int64(len(xadj)-len(y.mant)-len(z.mant))*_W
|
||||
e := int64(x.exp) - int64(y.exp) - int64(d-len(z.mant))*_W
|
||||
|
||||
// normalize mantissa
|
||||
z.setExp(e - int64(fnorm(z.mant)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue