mirror of
https://github.com/golang/go
synced 2024-11-11 20:50:23 -07:00
math/big: bug in AndNot(x,y) for x>0,y<0.
The comment says to use (y-1), but then we did add(y.abs, natOne). We meant sub. Fixes #9609 Change-Id: I4fe4783326ca082c05588310a0af7895a48fc779 Reviewed-on: https://go-review.googlesource.com/2961 Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
e10e913d08
commit
c6ddca2aec
@ -890,7 +890,7 @@ func (z *Int) AndNot(x, y *Int) *Int {
|
||||
}
|
||||
|
||||
// x &^ (-y) == x &^ ^(y-1) == x & (y-1)
|
||||
y1 := nat(nil).add(y.abs, natOne)
|
||||
y1 := nat(nil).sub(y.abs, natOne)
|
||||
z.abs = z.abs.and(x.abs, y1)
|
||||
z.neg = false
|
||||
return z
|
||||
|
@ -1216,6 +1216,7 @@ var bitwiseTests = []struct {
|
||||
{"-0x01", "-0x01", "-0x01", "-0x01", "0x00", "0x00"},
|
||||
{"0x07", "0x08", "0x00", "0x0f", "0x0f", "0x07"},
|
||||
{"0x05", "0x0f", "0x05", "0x0f", "0x0a", "0x00"},
|
||||
{"0xff", "-0x0a", "0xf6", "-0x01", "-0xf7", "0x09"},
|
||||
{"0x013ff6", "0x9a4e", "0x1a46", "0x01bffe", "0x01a5b8", "0x0125b0"},
|
||||
{"-0x013ff6", "0x9a4e", "0x800a", "-0x0125b2", "-0x01a5bc", "-0x01c000"},
|
||||
{"-0x013ff6", "-0x9a4e", "-0x01bffe", "-0x1a46", "0x01a5b8", "0x8008"},
|
||||
|
Loading…
Reference in New Issue
Block a user