]> Cypherpunks repositories - gostls13.git/commitdiff
math: Expm1 returns -1 with large negative argument.
authorCharlie Dorian <cldorian@gmail.com>
Wed, 1 Jul 2015 00:14:30 +0000 (20:14 -0400)
committerIan Lance Taylor <iant@golang.org>
Fri, 10 Jul 2015 22:22:24 +0000 (22:22 +0000)
Fixes #11442

Change-Id: I2053fe752c6a122924d28565f1338f73e00ed417
Reviewed-on: https://go-review.googlesource.com/11791
Reviewed-by: David Chase <drchase@google.com>
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/math/all_test.go
src/math/expm1.go

index 84061be2645c60030d7aa3f3bd04299f18ed43c2..6286584e0cfe7813b937df5707fe66e0ec1dabdc 100644 (file)
@@ -946,16 +946,20 @@ var expSC = []float64{
 
 var vfexpm1SC = []float64{
        Inf(-1),
+       -710,
        Copysign(0, -1),
        0,
+       710,
        Inf(1),
        NaN(),
 }
 var expm1SC = []float64{
+       -1,
        -1,
        Copysign(0, -1),
        0,
        Inf(1),
+       Inf(1),
        NaN(),
 }
 
index 8f56e15cc4fdc6986cdfedfa48ef9291f783871b..064e131161df9c6492fdfd500036d337e1ca2d04 100644 (file)
@@ -158,11 +158,11 @@ func expm1(x float64) float64 {
 
        // filter out huge argument
        if absx >= Ln2X56 { // if |x| >= 56 * ln2
-               if absx >= Othreshold { // if |x| >= 709.78...
-                       return Inf(1) // overflow
-               }
                if sign {
-                       return -1 // x < -56*ln2, return -1.0
+                       return -1 // x < -56*ln2, return -1
+               }
+               if absx >= Othreshold { // if |x| >= 709.78...
+                       return Inf(1)
                }
        }