mirror of https://github.com/golang/go.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 <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Katie Hockman <katie@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
55dec44010
commit
649294d0a5
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue