diff options
| author | Phosphorus15 <steepout@qq.com> | 2019-08-19 17:22:08 +0800 |
|---|---|---|
| committer | Phosphorus15 <steepout@qq.com> | 2019-08-19 17:22:08 +0800 |
| commit | c4569347b260fa1ae00ede021e39f2a3227da4ad (patch) | |
| tree | 63316844a54277376910f4962f7d3ef764e21703 /src/libstd | |
| parent | 92f08b78a12ff119af853cb2bf58468208ea6a90 (diff) | |
| download | rust-c4569347b260fa1ae00ede021e39f2a3227da4ad.tar.gz rust-c4569347b260fa1ae00ede021e39f2a3227da4ad.zip | |
Added negative cases for `asinh` according to IEEE-754.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/f32.rs | 15 | ||||
| -rw-r--r-- | src/libstd/f64.rs | 15 |
2 files changed, 22 insertions, 8 deletions
diff --git a/src/libstd/f32.rs b/src/libstd/f32.rs index f649170c403..653108cbece 100644 --- a/src/libstd/f32.rs +++ b/src/libstd/f32.rs @@ -908,10 +908,17 @@ impl f32 { #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn asinh(self) -> f32 { - if self == NEG_INFINITY { - NEG_INFINITY - } else { - (self + ((self * self) + 1.0).sqrt()).ln() + 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() } } diff --git a/src/libstd/f64.rs b/src/libstd/f64.rs index f61630997dc..e5f963d8736 100644 --- a/src/libstd/f64.rs +++ b/src/libstd/f64.rs @@ -831,10 +831,17 @@ impl f64 { #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn asinh(self) -> f64 { - if self == NEG_INFINITY { - NEG_INFINITY - } else { - (self + ((self * self) + 1.0).sqrt()).ln() + 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() } } |
