1use std::{fmt, ops::{Add, Div, Mul, Neg, Rem, Shl, Shr, Sub}};
10
11pub mod multivariate;
12pub mod polynomial;
13pub mod imaginary;
14pub mod linear_algebra;
15pub mod rotation;
16pub mod utils; pub use rotation::axes;
19
20pub trait Construct<T>: fmt::Debug + Copy + Clone + PartialEq + Add<Self, Output = Self> + Add<T, Output = Self>
23    + Sub<Self, Output = Self> + Sub<T, Output = Self> 
24    + Mul<Self, Output = Self> + Mul<T, Output = Self> 
25    + Div<Self, Output = Self> + Div<T, Output = Self>
26    + Rem<Self, Output = Self> + Rem<T, Output = Self>
27    + Neg<Output = Self> + SignOps
28    + Zero + One + Two
29    + F32Fmt {}
30
31pub trait Typed<T> {} impl<T: Construct<A>, A> Typed<T> for A {} impl<T: fmt::Debug + Copy + Clone + PartialEq
63        + Add<T, Output = T>
64        + Sub<T, Output = T>
65        + Mul<T, Output = T>
66        + Div<T, Output = T>
67        + Rem<T, Output = T>
68        + Neg<Output = T> + SignOps
69        + Zero + One + Two
70        + F32Fmt
71        + Primitive> Construct<T> for T {}
72
73pub trait IntUtils{
74    fn isqrt(self) -> Self;
75    fn icbrt(self) -> Self;
76    fn isin_mul(self, mul_by: Self) -> Self;
77    fn icos_mul(self, mul_by: Self) -> Self;
78    fn itan_mul(self, mul_by: Self) -> Self;
79    fn iasin_mul(self, mul_by: Self) -> Self;
80    fn iacos_mul(self, mul_by: Self) -> Self;
81    fn iatan_mul(self, mul_by: Self) -> Self;
82    fn iatan2_mul(self, other: Self, mul_by: Self) -> Self;
83    
84    fn itanh_mul(self, mul_by: Self) -> Self;
85    fn isinh_mul(self, mul_by: Self) -> Self;
86    fn icosh_mul(self, mul_by: Self) -> Self;
87}
88
89pub trait UintUtils{
90    fn usqrt(self) -> Self;
91    fn ucbrt(self) -> Self;
92    fn usin_mul(self, mul_by: Self) -> Self;
93    fn ucos_mul(self, mul_by: Self) -> Self;
94    fn utan_mul(self, mul_by: Self) -> Self;
95    fn uasin_mul(self, mul_by: Self) -> Self;
96    fn uacos_mul(self, mul_by: Self) -> Self;
97    fn uatan_mul(self, mul_by: Self) -> Self;
98    fn uatan2_mul(self, other: Self, mul_by: Self) -> Self;
99    
100    fn utanh_mul(self, mul_by: Self) -> Self;
101    fn usinh_mul(self, mul_by: Self) -> Self;
102    fn ucosh_mul(self, mul_by: Self) -> Self;
103}
104
105impl<T: Uint +
106        Copy +
107        One + Two + Three +
108        F32Fmt<F32Fmt = f32> +  
109        PartialOrd + 
110        Shr<T, Output = T> + 
111        Shl<T, Output = T> + 
112        Add<T, Output = T> + 
113        Mul<T, Output = T>> UintUtils for T {
114    #[inline] fn usqrt(self) -> Self {
115        if self < Self::TWO { return self; }
116        let s_option = Self::usqrt(self >> Self::TWO) << Self::ONE;
117        let l_option = s_option + Self::ONE;
118        if l_option * l_option > self { s_option } else { l_option }
119    }
120    #[inline] fn ucbrt(self) -> Self {
121        if self < Self::THREE { return self; }
122        let s_option = Self::ucbrt(self >> Self::THREE) << Self::ONE;
123        let l_option = s_option + Self::ONE;
124        if l_option * l_option > self { s_option } else { l_option }
125    }
126    #[inline] fn usin_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().sin() * mul_by.intoF32Fmt()) }
128    #[inline] fn ucos_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().cos() * mul_by.intoF32Fmt()) }
129    #[inline] fn utan_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().tan() * mul_by.intoF32Fmt()) }
130    #[inline] fn uasin_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().asin() * mul_by.intoF32Fmt()) }
131    #[inline] fn uacos_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().acos() * mul_by.intoF32Fmt()) }
132    #[inline] fn uatan_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().atan() * mul_by.intoF32Fmt()) }
133    #[inline] fn uatan2_mul(self, other: Self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().atan2(other.intoF32Fmt()) * mul_by.intoF32Fmt()) }
134    
135    #[inline] fn usinh_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().sinh() * mul_by.intoF32Fmt()) }
136    #[inline] fn ucosh_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().cosh() * mul_by.intoF32Fmt()) }
137    #[inline] fn utanh_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().tanh() * mul_by.intoF32Fmt()) }
138}
139
140impl<T: Int +
141        Copy +
142        Zero + One + Two + Three +
143        F32Fmt<F32Fmt = f32> + 
144        PartialOrd + 
145        Shr<T, Output = T> + 
146        Shl<T, Output = T> + 
147        Add<T, Output = T> + 
148        Mul<T, Output = T>> IntUtils for T {
149    #[inline] fn isqrt(self) -> Self {
150        assert!(self >= Self::ZERO, "sqrt works for only non-negative inputs");
151        if self < Self::TWO { return self; }
152        let s_option = Self::isqrt(self >> Self::TWO) << Self::ONE;
153        let l_option = s_option + Self::ONE;
154        if l_option * l_option > self { s_option } else { l_option }
155    }
156    #[inline] fn icbrt(self) -> Self {
157        assert!(self >= Self::ZERO, "sqrt works for only non-negative inputs");
158        if self < Self::THREE { return self; }
159        let s_option = Self::icbrt(self >> Self::THREE) << Self::ONE;
160        let l_option = s_option + Self::ONE;
161        if l_option * l_option > self { s_option } else { l_option }
162    }
163    #[inline] fn isin_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().sin() * mul_by.intoF32Fmt()) }
165    #[inline] fn icos_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().cos() * mul_by.intoF32Fmt()) }
166    #[inline] fn itan_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().tan() * mul_by.intoF32Fmt()) }
167    #[inline] fn iasin_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().asin() * mul_by.intoF32Fmt()) }
168    #[inline] fn iacos_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().acos() * mul_by.intoF32Fmt()) }
169    #[inline] fn iatan_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().atan() * mul_by.intoF32Fmt()) }
170    #[inline] fn iatan2_mul(self, other: Self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().atan2(other.intoF32Fmt()) * mul_by.intoF32Fmt()) }
171    
172    #[inline] fn isinh_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().sinh() * mul_by.intoF32Fmt()) }
173    #[inline] fn icosh_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().cosh() * mul_by.intoF32Fmt()) }
174    #[inline] fn itanh_mul(self, mul_by: Self) -> Self { Self::fromF32Fmt(self.intoF32Fmt().tanh() * mul_by.intoF32Fmt()) }
175}
176
177pub trait Zero { const ZERO: Self; }
178impl Zero for bool { const ZERO: Self = false; }
179impl Zero for f32 { const ZERO: Self = 0_f32; }
180impl Zero for f64 { const ZERO: Self = 0_f64; }
181impl Zero for i8    { const ZERO: Self = 0_i8;    } impl Zero for u8    { const ZERO: Self = 0_u8;    }
182impl Zero for i16   { const ZERO: Self = 0_i16;   } impl Zero for u16   { const ZERO: Self = 0_u16;   }
183impl Zero for i32   { const ZERO: Self = 0_i32;   } impl Zero for u32   { const ZERO: Self = 0_u32;   }
184impl Zero for i64   { const ZERO: Self = 0_i64;   } impl Zero for u64   { const ZERO: Self = 0_u64;   }
185impl Zero for i128  { const ZERO: Self = 0_i128;  } impl Zero for u128  { const ZERO: Self = 0_u128;  }
186impl Zero for isize { const ZERO: Self = 0_isize; } impl Zero for usize { const ZERO: Self = 0_usize; }
187
188pub trait One { const ONE: Self; }
189impl One for bool { const ONE: Self = true; }
190impl One for f32 { const ONE: Self = 1_f32; }
191impl One for f64 { const ONE: Self = 1_f64; }
192impl One for i8    { const ONE: Self = 1_i8;    } impl One for u8    { const ONE: Self = 1_u8;    }
193impl One for i16   { const ONE: Self = 1_i16;   } impl One for u16   { const ONE: Self = 1_u16;   }
194impl One for i32   { const ONE: Self = 1_i32;   } impl One for u32   { const ONE: Self = 1_u32;   }
195impl One for i64   { const ONE: Self = 1_i64;   } impl One for u64   { const ONE: Self = 1_u64;   }
196impl One for i128  { const ONE: Self = 1_i128;  } impl One for u128  { const ONE: Self = 1_u128;  }
197impl One for isize { const ONE: Self = 1_isize; } impl One for usize { const ONE: Self = 1_usize; }
198
199pub trait Two { const TWO: Self; }
200impl Two for f32 { const TWO: Self = 2_f32; }
201impl Two for f64 { const TWO: Self = 2_f64; }
202impl Two for i8    { const TWO: Self = 2_i8;    } impl Two for u8    { const TWO: Self = 2_u8;    }
203impl Two for i16   { const TWO: Self = 2_i16;   } impl Two for u16   { const TWO: Self = 2_u16;   }
204impl Two for i32   { const TWO: Self = 2_i32;   } impl Two for u32   { const TWO: Self = 2_u32;   }
205impl Two for i64   { const TWO: Self = 2_i64;   } impl Two for u64   { const TWO: Self = 2_u64;   }
206impl Two for i128  { const TWO: Self = 2_i128;  } impl Two for u128  { const TWO: Self = 2_u128;  }
207impl Two for isize { const TWO: Self = 2_isize; } impl Two for usize { const TWO: Self = 2_usize; }
208
209pub trait Three { const THREE: Self; }
210impl Three for f32 { const THREE: Self = 3_f32; }
211impl Three for f64 { const THREE: Self = 3_f64; }
212impl Three for i8    { const THREE: Self = 3_i8;    } impl Three for u8    { const THREE: Self = 3_u8;    }
213impl Three for i16   { const THREE: Self = 3_i16;   } impl Three for u16   { const THREE: Self = 3_u16;   }
214impl Three for i32   { const THREE: Self = 3_i32;   } impl Three for u32   { const THREE: Self = 3_u32;   }
215impl Three for i64   { const THREE: Self = 3_i64;   } impl Three for u64   { const THREE: Self = 3_u64;   }
216impl Three for i128  { const THREE: Self = 3_i128;  } impl Three for u128  { const THREE: Self = 3_u128;  }
217impl Three for isize { const THREE: Self = 3_isize; } impl Three for usize { const THREE: Self = 3_usize; }
218
219pub trait SignOps { fn ptcopysign(self, sign: Self) -> Self; fn ptsignum(self) -> i8; fn abs(self) -> Self; }
220impl SignOps for f32 { #[inline] fn ptcopysign(self, sign: Self) -> Self { self.copysign(sign) } #[inline] fn ptsignum(self) -> i8 { if self == 0.0 { 0_i8 } else if self.signum() > 0.0 { 1_i8 } else { -1_i8 } } #[inline] fn abs(self) -> Self { self.abs() } }
221impl SignOps for f64 { #[inline] fn ptcopysign(self, sign: Self) -> Self { self.copysign(sign) } #[inline] fn ptsignum(self) -> i8 { if self == 0.0 { 0_i8 } else if self.signum() > 0.0 { 1_i8 } else { -1_i8 } } #[inline] fn abs(self) -> Self { self.abs() } }
222impl SignOps for i8 { #[inline] fn ptcopysign(self, sign: Self) -> Self { if sign >> 7 ^ self >> 7 != 0 { -self } else { self } } #[inline] fn ptsignum(self) -> i8 { self.signum() } #[inline] fn abs(self) -> Self { self.abs() } }
223impl SignOps for i16 { #[inline] fn ptcopysign(self, sign: Self) -> Self { if sign >> 15 ^ self >> 15 != 0  { -self } else { self } } #[inline] fn ptsignum(self) -> i8 { self.signum() as i8 } #[inline] fn abs(self) -> Self { self.abs() } }
224impl SignOps for i32 { #[inline] fn ptcopysign(self, sign: Self) -> Self { if sign >> 31 ^ self >> 31 != 0  { -self } else { self } } #[inline] fn ptsignum(self) -> i8 { self.signum() as i8 } #[inline] fn abs(self) -> Self { self.abs() } }
225impl SignOps for i64 { #[inline] fn ptcopysign(self, sign: Self) -> Self { if sign >> 63 ^ self >> 63 != 0  { -self } else { self } } #[inline] fn ptsignum(self) -> i8 { self.signum() as i8 } #[inline] fn abs(self) -> Self { self.abs() } }
226impl SignOps for i128 { #[inline] fn ptcopysign(self, sign: Self) -> Self { if sign >> 127 ^ self >> 127 != 0  { -self } else { self } } #[inline] fn ptsignum(self) -> i8 { self.signum() as i8 } #[inline] fn abs(self) -> Self { self.abs() } }
227impl SignOps for isize { #[inline] fn ptcopysign(self, sign: Self) -> Self { if sign.reverse_bits() >> 1 ^ self.reverse_bits() >> 1 != 0  { -self } else { self } } #[inline] fn ptsignum(self) -> i8 { self.signum() as i8 } #[inline] fn abs(self) -> Self { self.abs() } }
228impl SignOps for u8 { #[inline] fn ptcopysign(self, _: Self) -> Self { self } #[inline] fn ptsignum(self) -> i8 { if self != 0_u8 { 1_i8 } else { 0_i8 } } #[inline] fn abs(self) -> Self { self } }
229impl SignOps for u16 { #[inline] fn ptcopysign(self, _: Self) -> Self { self } #[inline] fn ptsignum(self) -> i8 { if self != 0_u16 { 1_i8 } else { 0_i8 } } #[inline] fn abs(self) -> Self { self } }
230impl SignOps for u32 { #[inline] fn ptcopysign(self, _: Self) -> Self { self } #[inline] fn ptsignum(self) -> i8 { if self != 0_u32 { 1_i8 } else { 0_i8 } } #[inline] fn abs(self) -> Self { self } }
231impl SignOps for u64 { #[inline] fn ptcopysign(self, _: Self) -> Self { self } #[inline] fn ptsignum(self) -> i8 { if self != 0_u64 { 1_i8 } else { 0_i8 } } #[inline] fn abs(self) -> Self { self } }
232impl SignOps for u128 { #[inline] fn ptcopysign(self, _: Self) -> Self { self } #[inline] fn ptsignum(self) -> i8 { if self != 0_u128 { 1_i8 } else { 0_i8 } } #[inline] fn abs(self) -> Self { self } }
233impl SignOps for usize { #[inline] fn ptcopysign(self, _: Self) -> Self { self } #[inline] fn ptsignum(self) -> i8 { if self != 0_usize { 1_i8 } else { 0_i8 } } #[inline] fn abs(self) -> Self { self } }
234impl SignOps for bool { #[inline] fn ptcopysign(self, sign: Self) -> Self { sign } #[inline] fn ptsignum(self) -> i8 { if self { 1_i8 } else { 0_i8 } } #[inline] fn abs(self) -> Self { false } }
235
236pub trait Primitive {}
238impl Primitive for f32 {}
239impl Primitive for f64 {}
240impl Primitive for i8 {}
241impl Primitive for i16 {}
242impl Primitive for i32 {}
243impl Primitive for i64 {}
244impl Primitive for i128 {}
245impl Primitive for isize {}
246impl Primitive for u8 {}
247impl Primitive for u16 {}
248impl Primitive for u32 {}
249impl Primitive for u64 {}
250impl Primitive for u128 {}
251impl Primitive for usize {}
252impl Primitive for bool {}
253
254pub trait Float {}
255impl Float for f32 {}
256impl Float for f64 {}
257
258pub trait Int {}
259impl Int for i8 {}
260impl Int for i16 {}
261impl Int for i32 {}
262impl Int for i64 {}
263impl Int for i128 {}
264impl Int for isize {}
265
266pub trait Uint {}
267impl Uint for u8 {}
268impl Uint for u16 {}
269impl Uint for u32 {}
270impl Uint for u64 {}
271impl Uint for u128 {}
272impl Uint for usize {}
273impl Uint for bool {}
274
275pub trait F32Fmt {
276    type F32Fmt: F32Fmt + Copy + Clone + PartialEq
277        + Add<Self::F32Fmt, Output = Self::F32Fmt>
278        + Sub<Self::F32Fmt, Output = Self::F32Fmt>
279        + Mul<Self::F32Fmt, Output = Self::F32Fmt>
280        + Div<Self::F32Fmt, Output = Self::F32Fmt>
281        + Rem<Self::F32Fmt, Output = Self::F32Fmt>
282        + Neg<Output = Self::F32Fmt> + SignOps
283        + Zero + One + Two;
284    #[allow(non_snake_case)]
285    fn intoF32Fmt(self) -> Self::F32Fmt;
286    #[allow(non_snake_case)]
287    fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self;
288    fn sqrt(self) -> Self;
289    fn cbrt(self) -> Self;
290    fn f32_const_mul(self, constant: f32) -> Self;
291    fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
292    fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
293    fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
294    fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
295    fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
296    fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
297    fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
298    
299    fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
300    fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
301    fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized;
302}
303impl F32Fmt for f32 { type F32Fmt = Self;
304    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self } 
305    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt }
306    #[inline] fn sqrt(self) -> Self { Self::sqrt(self) }
307    #[inline] fn cbrt(self) -> Self { Self::cbrt(self) }
308    #[inline] fn f32_const_mul(self, constant: f32) -> Self { self * constant }
309    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::sin(self) * mul_by }
310    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::cos(self) * mul_by }
311    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::tan(self) * mul_by }
312    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::asin(self) * mul_by }
313    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::acos(self) * mul_by }
314    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::atan(self) * mul_by }
315    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::atan2(self, other) * mul_by }
316    
317    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::sinh(self) * mul_by }
318    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::cosh(self) * mul_by }
319    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::tanh(self) * mul_by }
320}
321impl F32Fmt for f64 {
322    type F32Fmt = f32;
323    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
324    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
325    #[inline] fn sqrt(self) -> Self { Self::sqrt(self) }
326    #[inline] fn cbrt(self) -> Self { Self::cbrt(self) }
327    #[inline] fn f32_const_mul(self, constant: f32) -> Self where Self: Mul<f64, Output = Self> { (self as f32 * constant) as Self }
328    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::sin(self) * mul_by }
329    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::cos(self) * mul_by }
330    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::tan(self) * mul_by }
331    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::asin(self) * mul_by }
332    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::acos(self) * mul_by }
333    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::atan(self) * mul_by }
334    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::atan2(self, other) * mul_by }
335    
336    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::sinh(self) * mul_by }
337    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::cosh(self) * mul_by }
338    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::tanh(self) * mul_by }
339}
340impl F32Fmt for i8 {
341    type F32Fmt = f32;
342    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
343    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
344    #[inline] fn sqrt(self) -> Self { Self::isqrt(self) }
345    #[inline] fn cbrt(self) -> Self { Self::icbrt(self) }
346    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
347    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isin_mul(self, mul_by) }
348    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icos_mul(self, mul_by) }
349    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itan_mul(self, mul_by) }
350    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iasin_mul(self, mul_by) }
351    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iacos_mul(self, mul_by) }
352    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan_mul(self, mul_by) }
353    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan2_mul(self, other, mul_by) }
354    
355    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isinh_mul(self, mul_by) }
356    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icosh_mul(self, mul_by) }
357    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itanh_mul(self, mul_by) }
358}
359impl F32Fmt for i16 {
360    type F32Fmt = f32;
361    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 } 
362    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
363    #[inline] fn sqrt(self) -> Self { Self::isqrt(self) }
364    #[inline] fn cbrt(self) -> Self { Self::icbrt(self) }
365    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
366    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isin_mul(self, mul_by) }
367    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icos_mul(self, mul_by) }
368    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itan_mul(self, mul_by) }
369    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iasin_mul(self, mul_by) }
370    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iacos_mul(self, mul_by) }
371    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan_mul(self, mul_by) }
372    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan2_mul(self, other, mul_by) }
373    
374    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isinh_mul(self, mul_by) }
375    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icosh_mul(self, mul_by) }
376    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itanh_mul(self, mul_by) }
377}
378impl F32Fmt for i32 {
379    type F32Fmt = f32;
380    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
381    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
382    #[inline] fn sqrt(self) -> Self { Self::isqrt(self) }
383    #[inline] fn cbrt(self) -> Self { Self::icbrt(self) }
384    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
385    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isin_mul(self, mul_by) }
386    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icos_mul(self, mul_by) }
387    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itan_mul(self, mul_by) }
388    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iasin_mul(self, mul_by) }
389    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iacos_mul(self, mul_by) }
390    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan_mul(self, mul_by) }
391    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan2_mul(self, other, mul_by) }
392    
393    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isinh_mul(self, mul_by) }
394    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icosh_mul(self, mul_by) }
395    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itanh_mul(self, mul_by) }
396}
397impl F32Fmt for i64 {
398    type F32Fmt = f32;
399    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
400    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
401    #[inline] fn sqrt(self) -> Self { Self::isqrt(self) }
402    #[inline] fn cbrt(self) -> Self { Self::icbrt(self) }
403    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
404    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isin_mul(self, mul_by) }
405    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icos_mul(self, mul_by) }
406    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itan_mul(self, mul_by) }
407    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iasin_mul(self, mul_by) }
408    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iacos_mul(self, mul_by) }
409    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan_mul(self, mul_by) }
410    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan2_mul(self, other, mul_by) }
411    
412    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isinh_mul(self, mul_by) }
413    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icosh_mul(self, mul_by) }
414    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itanh_mul(self, mul_by) }
415}
416impl F32Fmt for i128 {
417    type F32Fmt = f32;
418    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
419    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
420    #[inline] fn sqrt(self) -> Self { Self::isqrt(self) }
421    #[inline] fn cbrt(self) -> Self { Self::icbrt(self) }
422    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
423    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isin_mul(self, mul_by) }
424    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icos_mul(self, mul_by) }
425    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itan_mul(self, mul_by) }
426    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iasin_mul(self, mul_by) }
427    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iacos_mul(self, mul_by) }
428    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan_mul(self, mul_by) }
429    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan2_mul(self, other, mul_by) }
430    
431    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isinh_mul(self, mul_by) }
432    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icosh_mul(self, mul_by) }
433    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itanh_mul(self, mul_by) }
434}
435impl F32Fmt for isize {
436    type F32Fmt = f32;
437    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
438    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
439    #[inline] fn sqrt(self) -> Self { Self::isqrt(self) }
440    #[inline] fn cbrt(self) -> Self { Self::icbrt(self) }
441    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
442    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isin_mul(self, mul_by) }
443    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icos_mul(self, mul_by) }
444    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itan_mul(self, mul_by) }
445    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iasin_mul(self, mul_by) }
446    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iacos_mul(self, mul_by) }
447    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan_mul(self, mul_by) }
448    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::iatan2_mul(self, other, mul_by) }
449    
450    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::isinh_mul(self, mul_by) }
451    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::icosh_mul(self, mul_by) }
452    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::itanh_mul(self, mul_by) }
453}
454impl F32Fmt for u8 { 
455    type F32Fmt = f32; 
456    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 } 
457    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
458    #[inline] fn sqrt(self) -> Self { Self::usqrt(self) }
459    #[inline] fn cbrt(self) -> Self { Self::ucbrt(self) }
460    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
461    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usin_mul(self, mul_by) }
462    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucos_mul(self, mul_by) }
463    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utan_mul(self, mul_by) }
464    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uasin_mul(self, mul_by) }
465    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uacos_mul(self, mul_by) }
466    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan_mul(self, mul_by) }
467    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan2_mul(self, other, mul_by) }
468    
469    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usinh_mul(self, mul_by) }
470    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucosh_mul(self, mul_by) }
471    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utanh_mul(self, mul_by) }
472}
473impl F32Fmt for u16 {
474    type F32Fmt = f32;
475    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
476    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
477    #[inline] fn sqrt(self) -> Self { Self::usqrt(self) }
478    #[inline] fn cbrt(self) -> Self { Self::ucbrt(self) }
479    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
480    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usin_mul(self, mul_by) }
481    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucos_mul(self, mul_by) }
482    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utan_mul(self, mul_by) }
483    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uasin_mul(self, mul_by) }
484    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uacos_mul(self, mul_by) }
485    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan_mul(self, mul_by) }
486    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan2_mul(self, other, mul_by) }
487    
488    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usinh_mul(self, mul_by) }
489    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucosh_mul(self, mul_by) }
490    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utanh_mul(self, mul_by) }
491}
492impl F32Fmt for u32 {
493    type F32Fmt = f32;
494    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
495    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
496    #[inline] fn sqrt(self) -> Self { Self::usqrt(self) }
497    #[inline] fn cbrt(self) -> Self { Self::ucbrt(self) }
498    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
499    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usin_mul(self, mul_by) }
500    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucos_mul(self, mul_by) }
501    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utan_mul(self, mul_by) }
502    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uasin_mul(self, mul_by) }
503    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uacos_mul(self, mul_by) }
504    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan_mul(self, mul_by) }
505    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan2_mul(self, other, mul_by) }
506    
507    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usinh_mul(self, mul_by) }
508    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucosh_mul(self, mul_by) }
509    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utanh_mul(self, mul_by) }
510}
511impl F32Fmt for u64 {
512    type F32Fmt = f32;
513    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
514    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
515    #[inline] fn sqrt(self) -> Self { Self::usqrt(self) }
516    #[inline] fn cbrt(self) -> Self { Self::ucbrt(self) }
517    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
518    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usin_mul(self, mul_by) }
519    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucos_mul(self, mul_by) }
520    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utan_mul(self, mul_by) }
521    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uasin_mul(self, mul_by) }
522    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uacos_mul(self, mul_by) }
523    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan_mul(self, mul_by) }
524    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan2_mul(self, other, mul_by) }
525    
526    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usinh_mul(self, mul_by) }
527    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucosh_mul(self, mul_by) }
528    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utanh_mul(self, mul_by) }
529}
530impl F32Fmt for u128 {
531    type F32Fmt = f32;
532    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
533    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
534    #[inline] fn sqrt(self) -> Self { Self::usqrt(self) }
535    #[inline] fn cbrt(self) -> Self { Self::ucbrt(self) }
536    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
537    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usin_mul(self, mul_by) }
538    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucos_mul(self, mul_by) }
539    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utan_mul(self, mul_by) }
540    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uasin_mul(self, mul_by) }
541    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uacos_mul(self, mul_by) }
542    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan_mul(self, mul_by) }
543    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan2_mul(self, other, mul_by) }
544    
545    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usinh_mul(self, mul_by) }
546    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucosh_mul(self, mul_by) }
547    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utanh_mul(self, mul_by) }
548}
549impl F32Fmt for usize {
550    type F32Fmt = f32;
551    #[inline] fn intoF32Fmt(self) -> Self::F32Fmt { self as f32 }
552    #[inline] fn fromF32Fmt(f32_fmt: Self::F32Fmt) -> Self { f32_fmt as Self }
553    #[inline] fn sqrt(self) -> Self { Self::usqrt(self) }
554    #[inline] fn cbrt(self) -> Self { Self::ucbrt(self) }
555    #[inline] fn f32_const_mul(self, constant: f32) -> Self { (self as f32 * constant) as Self }
556    #[inline] fn sin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usin_mul(self, mul_by) }
557    #[inline] fn cos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucos_mul(self, mul_by) }
558    #[inline] fn tan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utan_mul(self, mul_by) }
559    #[inline] fn asin_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uasin_mul(self, mul_by) }
560    #[inline] fn acos_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uacos_mul(self, mul_by) }
561    #[inline] fn atan_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan_mul(self, mul_by) }
562    #[inline] fn atan2_mul(self, other: Self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::uatan2_mul(self, other, mul_by) }
563    
564    #[inline] fn sinh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::usinh_mul(self, mul_by) }
565    #[inline] fn cosh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::ucosh_mul(self, mul_by) }
566    #[inline] fn tanh_mul(self, mul_by: Self) -> Self where Self: Mul<Self, Output = Self> + Sized { Self::utanh_mul(self, mul_by) }
567}