aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Kessler <brian.m.kessler@gmail.com>2019-01-03 10:00:49 -0700
committerRobert Griesemer <gri@golang.org>2019-01-07 18:57:45 +0000
commit649294d0a5a647517eba7f91afef2e635b92a0da (patch)
tree32ff7b1f7e4d120a809a0e0b594b3061d313c7e5
parent55dec44010bdabbbac8f58d1059b1fb83e869408 (diff)
downloadgo-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.go2
-rw-r--r--src/math/log1p.go5
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)