Commit 770fac45 authored by Robert Griesemer's avatar Robert Griesemer

math/big: avoid MinExp exponent wrap-around in 'x' Text format

Fixes #34343.

Change-Id: I74240c8f431f6596338633a86a7a5ee1fce70a65
Reviewed-on: https://go-review.googlesource.com/c/go/+/196057
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 99aa56a4
......@@ -536,6 +536,10 @@ func TestFloatText(t *testing.T) {
{"-8191.53125", ToNegativeInf, 53, 'x', 4, "-0x1.fff9p+12"},
{"8191.53125", ToPositiveInf, 53, 'x', 4, "0x1.fff9p+12"},
{"-8191.53125", ToPositiveInf, 53, 'x', 4, "-0x1.fff8p+12"},
// issue 34343
{"0x.8p-2147483648", ToNearestEven, 4, 'p', -1, "0x.8p-2147483648"},
{"0x.8p-2147483648", ToNearestEven, 4, 'x', -1, "0x1p-2147483649"},
} {
f, _, err := ParseFloat(test.x, 0, test.prec, ToNearestEven)
if err != nil {
......
......@@ -384,7 +384,7 @@ func (x *Float) fmtX(buf []byte, prec int) []byte {
case w > n:
m = nat(nil).shr(m, w-n)
}
exp := x.exp - 1
exp64 := int64(x.exp) - 1 // avoid wrap-around
hm := m.utoa(16)
if debugFloat && hm[0] != '1' {
......@@ -397,7 +397,6 @@ func (x *Float) fmtX(buf []byte, prec int) []byte {
}
buf = append(buf, 'p')
exp64 := int64(exp)
if exp64 >= 0 {
buf = append(buf, '+')
} else {
......
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