From: Brian Kessler Date: Thu, 3 Jan 2019 17:00:49 +0000 (-0700) Subject: math: fix ternary correction statement in Log1p X-Git-Tag: go1.12beta2~25 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=649294d0a5a647517eba7f91afef2e635b92a0da;p=gostls13.git 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 TryBot-Result: Gobot Gobot Reviewed-by: Katie Hockman Reviewed-by: Robert Griesemer --- 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)