Commit 649294d0 authored by Brian Kessler's avatar Brian Kessler Committed by Robert Griesemer

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: 's avatarKatie Hockman <katie@golang.org>
Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
parent 55dec440
...@@ -1528,6 +1528,7 @@ var vflog1pSC = []float64{ ...@@ -1528,6 +1528,7 @@ var vflog1pSC = []float64{
0, 0,
Inf(1), Inf(1),
NaN(), NaN(),
4503599627370496.5, // Issue #29488
} }
var log1pSC = []float64{ var log1pSC = []float64{
NaN(), NaN(),
...@@ -1537,6 +1538,7 @@ var log1pSC = []float64{ ...@@ -1537,6 +1538,7 @@ var log1pSC = []float64{
0, 0,
Inf(1), Inf(1),
NaN(), NaN(),
36.04365338911715, // Issue #29488
} }
var vfmodfSC = []float64{ var vfmodfSC = []float64{
......
...@@ -151,12 +151,13 @@ func log1p(x float64) float64 { ...@@ -151,12 +151,13 @@ func log1p(x float64) float64 {
u = 1.0 + x u = 1.0 + x
iu = Float64bits(u) iu = Float64bits(u)
k = int((iu >> 52) - 1023) k = int((iu >> 52) - 1023)
// correction term
if k > 0 { if k > 0 {
c = 1.0 - (u - x) c = 1.0 - (u - x)
} else { } else {
c = x - (u - 1.0) // correction term c = x - (u - 1.0)
c /= u
} }
c /= u
} else { } else {
u = x u = x
iu = Float64bits(u) iu = Float64bits(u)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment