aboutsummaryrefslogtreecommitdiff
path: root/src/math/big/float.go
diff options
context:
space:
mode:
authorBrian Kessler <brian.m.kessler@gmail.com>2017-08-17 23:26:31 -0700
committerRobert Griesemer <gri@golang.org>2017-08-18 12:48:10 +0000
commit497f891fce8c6657ab28dfcd2e7195014f3a967f (patch)
treef2492bf666bf3f583ca8bf8aa4ddf4d46bb7d51c /src/math/big/float.go
parentfe08ebaebb09cb0c45e3728a96d494f7f9f5c1b3 (diff)
downloadgo-497f891fce8c6657ab28dfcd2e7195014f3a967f.tar.xz
math/big: recognize squaring for Floats
Updates #13745 Recognize z.Mul(x, x) as squaring for Floats and use the internal z.sqr(x) method for nat on the mantissa. Change-Id: I0f792157bad93a13cae1aecc4c10bd20c6397693 Reviewed-on: https://go-review.googlesource.com/56774 Reviewed-by: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/math/big/float.go')
-rw-r--r--src/math/big/float.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/math/big/float.go b/src/math/big/float.go
index afbed306f3..c042854eba 100644
--- a/src/math/big/float.go
+++ b/src/math/big/float.go
@@ -1311,8 +1311,11 @@ func (z *Float) umul(x, y *Float) {
// TODO(gri) Optimize this for the common case.
e := int64(x.exp) + int64(y.exp)
- z.mant = z.mant.mul(x.mant, y.mant)
-
+ if x == y {
+ z.mant = z.mant.sqr(x.mant)
+ } else {
+ z.mant = z.mant.mul(x.mant, y.mant)
+ }
z.setExpAndRound(e-fnorm(z.mant), 0)
}