about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorPhosphorus15 <steepout@qq.com>2019-08-20 12:39:12 +0800
committerPhosphorus15 <steepout@qq.com>2019-08-20 12:39:12 +0800
commit535efa4afd3bb5a141eae8579f54aa641ccedaa2 (patch)
tree8bc50a374bbb64b2dea15141a9cf282692f2e798 /src/libstd
parent64e3a10a82e6abad20f4a56750dac4cdd5df19ab (diff)
downloadrust-535efa4afd3bb5a141eae8579f54aa641ccedaa2.tar.gz
rust-535efa4afd3bb5a141eae8579f54aa641ccedaa2.zip
Used `copysign` to avoid unnecessary branches.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/f32.rs10
-rw-r--r--src/libstd/f64.rs10
2 files changed, 2 insertions, 18 deletions
diff --git a/src/libstd/f32.rs b/src/libstd/f32.rs
index ba75650fc4c..dcb035993ae 100644
--- a/src/libstd/f32.rs
+++ b/src/libstd/f32.rs
@@ -910,15 +910,7 @@ impl f32 {
     pub fn asinh(self) -> f32 {
         match self {
             x if x == NEG_INFINITY => NEG_INFINITY,
-            x if x.is_sign_negative() => {
-                let v = (x + ((x * x) + 1.0).sqrt()).ln();
-                if v.is_sign_negative() {
-                    v
-                } else {
-                    -v
-                }
-            }
-            x => (x + ((x * x) + 1.0).sqrt()).ln()
+            x => (x + ((x * x) + 1.0).sqrt()).ln().copysign(self)
         }
     }
 
diff --git a/src/libstd/f64.rs b/src/libstd/f64.rs
index 62c659739de..076b6340d89 100644
--- a/src/libstd/f64.rs
+++ b/src/libstd/f64.rs
@@ -833,15 +833,7 @@ impl f64 {
     pub fn asinh(self) -> f64 {
         match self {
             x if x == NEG_INFINITY => NEG_INFINITY,
-            x if x.is_sign_negative() => {
-                let v = (x + ((x * x) + 1.0).sqrt()).ln();
-                if v.is_sign_negative() {
-                    v
-                } else {
-                    -v
-                }
-            }
-            x => (x + ((x * x) + 1.0).sqrt()).ln()
+            x => (x + ((x * x) + 1.0).sqrt()).ln().copysign(self)
         }
     }