integer_or_float/num_traits_impl/
float.rs

1use crate::f_iof;
2use crate::IntegerOrFloat as IOF;
3use core::num::FpCategory;
4use num_traits::Float;
5
6#[rustfmt::skip]
7impl Float for IOF {
8    // Statics
9    fn nan() -> Self { IOF::Float(f_iof::NAN) }
10    fn infinity() -> Self { IOF::Float(f_iof::INFINITY) }
11    fn neg_infinity() -> Self { IOF::Float(-f_iof::INFINITY) }
12    fn neg_zero() -> Self { IOF::Float(-f_iof::from(0.0)) }
13    fn min_value() -> Self { IOF::Float(f_iof::MIN) }
14    fn min_positive_value() -> Self { IOF::Float(f_iof::MIN_POSITIVE) }
15    fn max_value() -> Self { IOF::Float(f_iof::MAX) }
16    // bool-returing
17    fn is_nan(self) -> bool { f_iof::from(self).is_nan() }
18    fn is_infinite(self) -> bool { f_iof::from(self).is_infinite() }
19    fn is_finite(self) -> bool { f_iof::from(self).is_finite() }
20    fn is_normal(self) -> bool { f_iof::from(self).is_normal() }
21    fn is_sign_positive(self) -> bool { f_iof::from(self).is_sign_positive() }
22    fn is_sign_negative(self) -> bool { f_iof::from(self).is_sign_negative() }
23    // FpCategory-returning
24    fn classify(self) -> FpCategory { f_iof::from(self).classify() }
25    // Self → Self functions
26    fn floor(self) -> Self { IOF::Float(f_iof::from(self).floor()) }
27    fn ceil(self) -> Self { IOF::Float(f_iof::from(self).ceil()) }
28    fn round(self) -> Self { IOF::Float(f_iof::from(self).round()) }
29    fn trunc(self) -> Self { IOF::Float(f_iof::from(self).trunc()) }
30    fn fract(self) -> Self { IOF::Float(f_iof::from(self).fract()) }
31    fn abs(self) -> Self { IOF::Float(f_iof::from(self).abs()) }
32    fn signum(self) -> Self { IOF::Float(f_iof::from(self).signum()) }
33    fn recip(self) -> Self { IOF::Float(f_iof::from(self).recip()) }
34    fn sqrt(self) -> Self { IOF::Float(f_iof::from(self).sqrt()) }
35    fn exp(self) -> Self { IOF::Float(f_iof::from(self).exp()) }
36    fn exp2(self) -> Self { IOF::Float(f_iof::from(self).exp2()) }
37    fn ln(self) -> Self { IOF::Float(f_iof::from(self).ln()) }
38    fn log2(self) -> Self { IOF::Float(f_iof::from(self).log2()) }
39    fn log10(self) -> Self { IOF::Float(f_iof::from(self).log10()) }
40    fn cbrt(self) -> Self { IOF::Float(f_iof::from(self).cbrt()) }
41    fn sin(self) -> Self { IOF::Float(f_iof::from(self).sin()) }
42    fn cos(self) -> Self { IOF::Float(f_iof::from(self).cos()) }
43    fn tan(self) -> Self { IOF::Float(f_iof::from(self).tan()) }
44    fn asin(self) -> Self { IOF::Float(f_iof::from(self).asin()) }
45    fn acos(self) -> Self { IOF::Float(f_iof::from(self).acos()) }
46    fn atan(self) -> Self { IOF::Float(f_iof::from(self).atan()) }
47    fn exp_m1(self) -> Self { IOF::Float(f_iof::from(self).exp_m1()) }
48    fn ln_1p(self) -> Self { IOF::Float(f_iof::from(self).ln_1p()) }
49    fn sinh(self) -> Self { IOF::Float(f_iof::from(self).sinh()) }
50    fn cosh(self) -> Self { IOF::Float(f_iof::from(self).cosh()) }
51    fn tanh(self) -> Self { IOF::Float(f_iof::from(self).tanh()) }
52    fn asinh(self) -> Self { IOF::Float(f_iof::from(self).asinh()) }
53    fn acosh(self) -> Self { IOF::Float(f_iof::from(self).acosh()) }
54    fn atanh(self) -> Self { IOF::Float(f_iof::from(self).atanh()) }
55    // has rhs & rhs2
56    fn mul_add(self, rhs: Self, rhs2: Self) -> Self { IOF::Float(f_iof::from(self).mul_add(f_iof::from(rhs), f_iof::from(rhs2))) }
57    // has rhs
58    /// note: powi always i32 regardless of i_iof
59    fn powi(self, rhs: i32) -> Self { IOF::Float(f_iof::from(self).powi(rhs)) }
60    fn powf(self, rhs: Self) -> Self { IOF::Float(f_iof::from(self).powf(f_iof::from(rhs))) }
61    fn log(self, rhs: Self) -> Self { IOF::Float(f_iof::from(self).log(f_iof::from(rhs))) }
62    fn max(self, rhs: Self) -> Self { IOF::Float(f_iof::from(self).max(f_iof::from(rhs))) }
63    fn min(self, rhs: Self) -> Self { IOF::Float(f_iof::from(self).min(f_iof::from(rhs))) }
64    fn hypot(self, rhs: Self) -> Self { IOF::Float(f_iof::from(self).hypot(f_iof::from(rhs))) }
65    fn atan2(self, rhs: Self) -> Self { IOF::Float(f_iof::from(self).atan2(f_iof::from(rhs))) }
66    // specials
67    fn integer_decode(self) -> (u64, i16, i8) { f_iof::from(self).integer_decode() }
68    fn sin_cos(self) -> (Self, Self) {
69        let (r1, r2) = f_iof::from(self).sin_cos();
70        (IOF::Float(r1), IOF::Float(r2))
71    }
72    #[allow(deprecated)]
73    fn abs_sub(self, rhs: Self) -> Self { IOF::Float(f_iof::from(self).abs_sub(f_iof::from(rhs))) }
74}