
Make the `Float` and `Double` implementations of `signum` handle -0.0 correctly per IEEE-754. --- libraries/base/GHC/Float.lhs | 16 ++++++++++------ libraries/base/changelog.md | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libraries/base/GHC/Float.lhs b/libraries/base/GHC/Float.lhs index 442e13c..294ebd5 100644 --- a/libraries/base/GHC/Float.lhs +++ b/libraries/base/GHC/Float.lhs @@ -209,9 +209,11 @@ instance Num Float where | isNegativeZero x = 0 | x >= 0.0 = x | otherwise = negateFloat x - signum x | x == 0.0 = 0 - | x > 0.0 = 1 - | otherwise = negate 1 + signum x + | x == 0.0 = x + | isNaN x = x + | x > 0.0 = 1 + | otherwise = negate 1 {-# INLINE fromInteger #-} fromInteger i = F# (floatFromInteger i) @@ -376,9 +378,11 @@ instance Num Double where | isNegativeZero x = 0 | x >= 0.0 = x | otherwise = negateDouble x - signum x | x == 0.0 = 0 - | x > 0.0 = 1 - | otherwise = negate 1 + signum x + | x == 0.0 = x + | isNaN x = x + | x > 0.0 = 1 + | otherwise = negate 1 {-# INLINE fromInteger #-} fromInteger i = D# (doubleFromInteger i) diff --git a/libraries/base/changelog.md b/libraries/base/changelog.md index 9eb279e..bc52660 100644 --- a/libraries/base/changelog.md +++ b/libraries/base/changelog.md @@ -10,7 +10,7 @@ * Weaken RealFloat constraints on some `Data.Complex` functions - * Make `abs` handle -0.0 correctly for `Float` and `Double`. + * Make `abs` and `signum` handle -0.0 correctly for `Float` and `Double`. ## 4.7.0.0 *Apr 2014* -- 1.8.3.2