| 1 | //! Compute the absolute value of a single-precision float. |
| 2 | //! |
| 3 | //! Method described at: <https://bits.stephan-brumme.com/absFloat.html> |
| 4 | |
| 5 | use super::{F32, SIGN_MASK}; |
| 6 | |
| 7 | impl F32 { |
| 8 | /// Computes the absolute value of `self`. |
| 9 | /// |
| 10 | /// Returns [`Self::NAN`] if the number is [`Self::NAN`]. |
| 11 | pub fn abs(self) -> Self { |
| 12 | Self::from_bits(self.to_bits() & !SIGN_MASK) |
| 13 | } |
| 14 | } |
| 15 | |
| 16 | #[cfg (test)] |
| 17 | mod tests { |
| 18 | use super::F32; |
| 19 | |
| 20 | #[test ] |
| 21 | fn sanity_check() { |
| 22 | assert_eq!(F32::ONE.abs(), 1.0); |
| 23 | assert_eq!(F32::ZERO.abs(), 0.0); |
| 24 | assert_eq!(F32(-1.0).abs(), 1.0); |
| 25 | } |
| 26 | |
| 27 | #[test ] |
| 28 | fn nan() { |
| 29 | assert!(F32::NAN.abs().is_nan()); |
| 30 | } |
| 31 | } |
| 32 | |