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{
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{
......
......@@ -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)
......
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