refined_float/
float64.rs

1use crate::macros::{
2    impl_approx_traits, impl_arithmetic_trait, impl_complex_fns, impl_debug_display_trait,
3    impl_float_const, impl_neg_trait, impl_sum_product,
4};
5
6#[derive(Clone, Copy, PartialEq, PartialOrd)]
7pub struct Float64(pub core::primitive::f64);
8
9impl_arithmetic_trait!(Float64, Add, AddAssign, add, add_assign);
10impl_arithmetic_trait!(Float64, Sub, SubAssign, sub, sub_assign);
11impl_arithmetic_trait!(Float64, Mul, MulAssign, mul, mul_assign);
12impl_arithmetic_trait!(Float64, Div, DivAssign, div, div_assign);
13impl_arithmetic_trait!(Float64, Rem, RemAssign, rem, rem_assign);
14impl_sum_product!(Float64);
15impl_neg_trait!(Float64);
16impl_debug_display_trait!(Float64);
17
18impl Float64 {
19    #[inline]
20    pub fn abs(self) -> Self {
21        #[cfg(feature = "std")]
22        return Self(self.0.abs());
23        #[cfg(all(not(feature = "std"), feature = "libm"))]
24        return Self(libm::Libm::<f64>::fabs(self.0));
25    }
26}
27
28impl_complex_fns!(Float64, core::primitive::f64, sqrt, sqrt);
29impl_complex_fns!(Float64, core::primitive::f64, cos, cos);
30impl_complex_fns!(Float64, core::primitive::f64, acos, acos);
31impl_complex_fns!(Float64, core::primitive::f64, sin, sin);
32impl_complex_fns!(Float64, core::primitive::f64, asin, asin);
33impl_complex_fns!(Float64, core::primitive::f64, tan, tan);
34impl_complex_fns!(Float64, core::primitive::f64, atan, atan);
35
36impl_float_const!(Float64, ZERO, 0.0);
37impl_float_const!(Float64, ONE, 1.0);
38
39impl_approx_traits!(crate::Float64, f64);