about summary refs log tree commit diff
path: root/src/libstd/f64.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/f64.rs')
-rw-r--r--src/libstd/f64.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/libstd/f64.rs b/src/libstd/f64.rs
index fe64d27b1ef..c033198f021 100644
--- a/src/libstd/f64.rs
+++ b/src/libstd/f64.rs
@@ -837,7 +837,7 @@ impl f64 {
         if self == Self::NEG_INFINITY {
             Self::NEG_INFINITY
         } else {
-            (self + ((self * self) + 1.0).sqrt()).ln().copysign(self)
+            (self.abs() + ((self * self) + 1.0).sqrt()).ln().copysign(self)
         }
     }
 
@@ -1443,6 +1443,8 @@ mod tests {
         // issue 63271
         assert_approx_eq!(2.0f64.asinh(), 1.443635475178810342493276740273105f64);
         assert_approx_eq!((-2.0f64).asinh(), -1.443635475178810342493276740273105f64);
+        // regression test for the catastrophic cancellation fixed in 72486
+        assert_approx_eq!((-67452098.07139316f64).asinh(), -18.72007542627454439398548429400083);
     }
 
     #[test]