1use crate::scalar::RealField;
2use crate::simd::{SimdComplexField, SimdPartialOrd, SimdSigned};
3
4#[allow(missing_docs)]
9pub trait SimdRealField:
10 SimdPartialOrd + SimdSigned + SimdComplexField<SimdRealField = Self>
11{
12 fn simd_copysign(self, sign: Self) -> Self;
17 fn simd_atan2(self, other: Self) -> Self;
18
19 fn simd_default_epsilon() -> Self;
20 fn simd_pi() -> Self;
21 fn simd_two_pi() -> Self;
22 fn simd_frac_pi_2() -> Self;
23 fn simd_frac_pi_3() -> Self;
24 fn simd_frac_pi_4() -> Self;
25 fn simd_frac_pi_6() -> Self;
26 fn simd_frac_pi_8() -> Self;
27 fn simd_frac_1_pi() -> Self;
28 fn simd_frac_2_pi() -> Self;
29 fn simd_frac_2_sqrt_pi() -> Self;
30
31 fn simd_e() -> Self;
32 fn simd_log2_e() -> Self;
33 fn simd_log10_e() -> Self;
34 fn simd_ln_2() -> Self;
35 fn simd_ln_10() -> Self;
36}
37
38impl<T: RealField> SimdRealField for T {
40 #[inline(always)]
41 fn simd_atan2(self, other: Self) -> Self {
42 self.atan2(other)
43 }
44
45 #[inline(always)]
46 fn simd_default_epsilon() -> Self {
47 Self::default_epsilon()
48 }
49 #[inline(always)]
50 fn simd_copysign(self, sign: Self) -> Self {
51 self.copysign(sign)
52 }
53 #[inline(always)]
54 fn simd_pi() -> Self {
55 Self::pi()
56 }
57 #[inline(always)]
58 fn simd_two_pi() -> Self {
59 Self::two_pi()
60 }
61 #[inline(always)]
62 fn simd_frac_pi_2() -> Self {
63 Self::frac_pi_2()
64 }
65 #[inline(always)]
66 fn simd_frac_pi_3() -> Self {
67 Self::frac_pi_3()
68 }
69 #[inline(always)]
70 fn simd_frac_pi_4() -> Self {
71 Self::frac_pi_4()
72 }
73 #[inline(always)]
74 fn simd_frac_pi_6() -> Self {
75 Self::frac_pi_6()
76 }
77 #[inline(always)]
78 fn simd_frac_pi_8() -> Self {
79 Self::frac_pi_8()
80 }
81 #[inline(always)]
82 fn simd_frac_1_pi() -> Self {
83 Self::frac_1_pi()
84 }
85 #[inline(always)]
86 fn simd_frac_2_pi() -> Self {
87 Self::frac_2_pi()
88 }
89 #[inline(always)]
90 fn simd_frac_2_sqrt_pi() -> Self {
91 Self::frac_2_sqrt_pi()
92 }
93
94 #[inline(always)]
95 fn simd_e() -> Self {
96 Self::e()
97 }
98 #[inline(always)]
99 fn simd_log2_e() -> Self {
100 Self::log2_e()
101 }
102 #[inline(always)]
103 fn simd_log10_e() -> Self {
104 Self::log10_e()
105 }
106 #[inline(always)]
107 fn simd_ln_2() -> Self {
108 Self::ln_2()
109 }
110 #[inline(always)]
111 fn simd_ln_10() -> Self {
112 Self::ln_10()
113 }
114}