diff options
author | Brian Kessler <brian.m.kessler@gmail.com> | 2019-01-03 10:00:49 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2019-01-07 18:57:45 +0000 |
commit | 649294d0a5a647517eba7f91afef2e635b92a0da (patch) | |
tree | 32ff7b1f7e4d120a809a0e0b594b3061d313c7e5 | |
parent | 55dec44010bdabbbac8f58d1059b1fb83e869408 (diff) | |
download | go-649294d0a5a647517eba7f91afef2e635b92a0da.tar.gz go-649294d0a5a647517eba7f91afef2e635b92a0da.zip |
math: fix ternary correction statement in Log1p
The original port of Log1p incorrectly translated a ternary statement
so that a correction was only applied to one of the branches.
Fixes #29488
Change-Id: I035b2fc741f76fe7c0154c63da6e298b575e08a4
Reviewed-on: https://go-review.googlesource.com/c/156120
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Katie Hockman <katie@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
-rw-r--r-- | src/math/all_test.go | 2 | ||||
-rw-r--r-- | src/math/log1p.go | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/math/all_test.go b/src/math/all_test.go index c2d2efcd97..ed42941780 100644 --- a/src/math/all_test.go +++ b/src/math/all_test.go @@ -1528,6 +1528,7 @@ var vflog1pSC = []float64{ 0, Inf(1), NaN(), + 4503599627370496.5, // Issue #29488 } var log1pSC = []float64{ NaN(), @@ -1537,6 +1538,7 @@ var log1pSC = []float64{ 0, Inf(1), NaN(), + 36.04365338911715, // Issue #29488 } var vfmodfSC = []float64{ diff --git a/src/math/log1p.go b/src/math/log1p.go index b128a1620c..c4ec61b225 100644 --- a/src/math/log1p.go +++ b/src/math/log1p.go @@ -151,12 +151,13 @@ func log1p(x float64) float64 { u = 1.0 + x iu = Float64bits(u) k = int((iu >> 52) - 1023) + // correction term if k > 0 { c = 1.0 - (u - x) } else { - c = x - (u - 1.0) // correction term - c /= u + c = x - (u - 1.0) } + c /= u } else { u = x iu = Float64bits(u) |