From 649294d0a5a647517eba7f91afef2e635b92a0da Mon Sep 17 00:00:00 2001 From: Brian Kessler Date: Thu, 3 Jan 2019 10:00:49 -0700 Subject: [PATCH] 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 --- src/math/all_test.go | 2 ++ 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) -- 2.50.0