Skip to content

Commit e33d870

Browse files
committed
Refined implementations of asinh and acosh
1 parent 535efa4 commit e33d870

File tree

2 files changed

+29
-24
lines changed

2 files changed

+29
-24
lines changed

src/libstd/f32.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -908,9 +908,10 @@ impl f32 {
908908
#[stable(feature = "rust1", since = "1.0.0")]
909909
#[inline]
910910
pub fn asinh(self) -> f32 {
911-
match self {
912-
x if x == NEG_INFINITY => NEG_INFINITY,
913-
x => (x + ((x * x) + 1.0).sqrt()).ln().copysign(self)
911+
if self == NEG_INFINITY {
912+
NEG_INFINITY
913+
} else {
914+
(self + ((self * self) + 1.0).sqrt()).ln().copysign(self)
914915
}
915916
}
916917

@@ -931,9 +932,10 @@ impl f32 {
931932
#[stable(feature = "rust1", since = "1.0.0")]
932933
#[inline]
933934
pub fn acosh(self) -> f32 {
934-
match self {
935-
x if x < 1.0 => crate::f32::NAN,
936-
x => (x + ((x * x) - 1.0).sqrt()).ln(),
935+
if self < 1.0 {
936+
crate::f32::NAN
937+
} else {
938+
(self + ((self * self) - 1.0).sqrt()).ln()
937939
}
938940
}
939941

src/libstd/f64.rs

+21-18
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ impl f64 {
244244
pub fn div_euclid(self, rhs: f64) -> f64 {
245245
let q = (self / rhs).trunc();
246246
if self % rhs < 0.0 {
247-
return if rhs > 0.0 { q - 1.0 } else { q + 1.0 }
247+
return if rhs > 0.0 { q - 1.0 } else { q + 1.0 };
248248
}
249249
q
250250
}
@@ -437,9 +437,9 @@ impl f64 {
437437
pub fn log2(self) -> f64 {
438438
self.log_wrapper(|n| {
439439
#[cfg(target_os = "android")]
440-
return crate::sys::android::log2f64(n);
440+
return crate::sys::android::log2f64(n);
441441
#[cfg(not(target_os = "android"))]
442-
return unsafe { intrinsics::log2f64(n) };
442+
return unsafe { intrinsics::log2f64(n) };
443443
})
444444
}
445445

@@ -481,16 +481,16 @@ impl f64 {
481481
#[stable(feature = "rust1", since = "1.0.0")]
482482
#[inline]
483483
#[rustc_deprecated(since = "1.10.0",
484-
reason = "you probably meant `(self - other).abs()`: \
484+
reason = "you probably meant `(self - other).abs()`: \
485485
this operation is `(self - other).max(0.0)` \
486486
except that `abs_sub` also propagates NaNs (also \
487487
known as `fdim` in C). If you truly need the positive \
488488
difference, consider using that expression or the C function \
489489
`fdim`, depending on how you wish to handle NaN (please consider \
490490
filing an issue describing your use-case too).")]
491-
pub fn abs_sub(self, other: f64) -> f64 {
492-
unsafe { cmath::fdim(self, other) }
493-
}
491+
pub fn abs_sub(self, other: f64) -> f64 {
492+
unsafe { cmath::fdim(self, other) }
493+
}
494494

495495
/// Takes the cubic root of a number.
496496
///
@@ -831,9 +831,10 @@ impl f64 {
831831
#[stable(feature = "rust1", since = "1.0.0")]
832832
#[inline]
833833
pub fn asinh(self) -> f64 {
834-
match self {
835-
x if x == NEG_INFINITY => NEG_INFINITY,
836-
x => (x + ((x * x) + 1.0).sqrt()).ln().copysign(self)
834+
if self == NEG_INFINITY {
835+
NEG_INFINITY
836+
} else {
837+
(self + ((self * self) + 1.0).sqrt()).ln().copysign(self)
837838
}
838839
}
839840

@@ -852,9 +853,10 @@ impl f64 {
852853
#[stable(feature = "rust1", since = "1.0.0")]
853854
#[inline]
854855
pub fn acosh(self) -> f64 {
855-
match self {
856-
x if x < 1.0 => NAN,
857-
x => (x + ((x * x) - 1.0).sqrt()).ln(),
856+
if self < 1.0 {
857+
NAN
858+
} else {
859+
(self + ((self * self) - 1.0).sqrt()).ln()
858860
}
859861
}
860862

@@ -1187,7 +1189,7 @@ mod tests {
11871189
assert_eq!((-0f64).abs(), 0f64);
11881190
assert_eq!((-1f64).abs(), 1f64);
11891191
assert_eq!(NEG_INFINITY.abs(), INFINITY);
1190-
assert_eq!((1f64/NEG_INFINITY).abs(), 0f64);
1192+
assert_eq!((1f64 / NEG_INFINITY).abs(), 0f64);
11911193
assert!(NAN.abs().is_nan());
11921194
}
11931195

@@ -1199,7 +1201,7 @@ mod tests {
11991201
assert_eq!((-0f64).signum(), -1f64);
12001202
assert_eq!((-1f64).signum(), -1f64);
12011203
assert_eq!(NEG_INFINITY.signum(), -1f64);
1202-
assert_eq!((1f64/NEG_INFINITY).signum(), -1f64);
1204+
assert_eq!((1f64 / NEG_INFINITY).signum(), -1f64);
12031205
assert!(NAN.signum().is_nan());
12041206
}
12051207

@@ -1211,7 +1213,7 @@ mod tests {
12111213
assert!(!(-0f64).is_sign_positive());
12121214
assert!(!(-1f64).is_sign_positive());
12131215
assert!(!NEG_INFINITY.is_sign_positive());
1214-
assert!(!(1f64/NEG_INFINITY).is_sign_positive());
1216+
assert!(!(1f64 / NEG_INFINITY).is_sign_positive());
12151217
assert!(NAN.is_sign_positive());
12161218
assert!(!(-NAN).is_sign_positive());
12171219
}
@@ -1224,7 +1226,7 @@ mod tests {
12241226
assert!((-0f64).is_sign_negative());
12251227
assert!((-1f64).is_sign_negative());
12261228
assert!(NEG_INFINITY.is_sign_negative());
1227-
assert!((1f64/NEG_INFINITY).is_sign_negative());
1229+
assert!((1f64 / NEG_INFINITY).is_sign_negative());
12281230
assert!(!NAN.is_sign_negative());
12291231
assert!((-NAN).is_sign_negative());
12301232
}
@@ -1433,7 +1435,8 @@ mod tests {
14331435
assert_eq!(inf.asinh(), inf);
14341436
assert_eq!(neg_inf.asinh(), neg_inf);
14351437
assert!(nan.asinh().is_nan());
1436-
assert!((-0.0f64).asinh().is_sign_negative()); // issue 63271
1438+
assert!((-0.0f64).asinh().is_sign_negative());
1439+
// issue 63271
14371440
assert_approx_eq!(2.0f64.asinh(), 1.443635475178810342493276740273105f64);
14381441
assert_approx_eq!((-2.0f64).asinh(), -1.443635475178810342493276740273105f64);
14391442
}

0 commit comments

Comments
 (0)