devela/num/float/wrapper/
consts.rs
1#![allow(clippy::excessive_precision, reason = "constants are defined with 81 decimals")]
10#![allow(dead_code, reason = "WIP f16,f128")]
11
12use super::super::constants::{ExtFloatConst, *};
13use crate::Float;
14#[cfg(feature = "nightly_float")]
15use ::core::{f128, f16};
16
17macro_rules! float_technical_const_impls {
19 () => {
20 float_technical_const_impls![
21 f32:u32[8, 0x5f37_59df, 1e-6],
23
24 f64:u64[11, 0x5fe6_eb50_c7b5_37a9, 1e-12]
29 ];
30 #[cfg(feature = "nightly_float")]
31 float_technical_const_impls![
32 f16:u16[5, 0x59b9, 1e-3],
34 f128:u128[15, 0x5ffe_6eb5_0c7b_537a_9cd9_f02e_504f_cfbf, 1e-30]
36 ];
37 };
38 (
39 $( $f:ty:$u:ty
47 [$ebit:literal, $fisr:literal, $nrt:literal] ),+) => {
48 $( float_technical_const_impls![@$f:$u[$ebit, $fisr, $nrt]]; )+
49 };
50 (@$f:ty:$u:ty
51 [$ebit:literal, $fisr:literal, $nrt:literal] ) => {
52 impl Float<$f> {
53 #[doc = SIGNIFICAND_BITS!()]
56 pub const SIGNIFICAND_BITS: u32 = <$f>::MANTISSA_DIGITS -1;
57 #[doc = EXPONENT_BIAS!()]
58 pub const EXPONENT_BIAS: u32 = <$f>::MAX_EXP as u32 - 1;
59 #[doc = EXPONENT_BITS!()]
60 pub const EXPONENT_BITS: u32 = $ebit;
61
62 pub(super) const FISR_MAGIC: $u = $fisr;
64
65 pub(super) const NR_TOLERANCE: $f = $nrt;
68 }
69 };
70}
71float_technical_const_impls![];
72
73macro_rules! float_const_impls {
77 () => {
78 float_const_impls![f32, f64];
79 #[cfg(feature = "nightly_float")]
80 float_const_impls![f16, f128];
81 };
82 ($( $f:ty),+) => { $( float_const_impls![@$f]; )+ };
83 (@$f:ty) => {
84 impl Float<$f> {
88 #[doc = ONE!()]
89 pub const ONE: Float<$f> = Float(<$f>::ONE);
90 #[doc = ZERO!()]
91 pub const ZERO: Float<$f> = Float(<$f>::ZERO);
92 #[doc = NEG_ONE!()]
93 pub const NEG_ONE: Float<$f> = Float(<$f>::NEG_ONE);
94 #[doc = NEG_ZERO!()]
95 pub const NEG_ZERO: Float<$f> = Float(<$f>::NEG_ZERO);
96
97 #[doc = NAN!()]
100 pub const NAN: Float<$f> = Float(<$f>::NAN);
101 #[doc = INFINITY!()]
102 pub const INFINITY: Float<$f> = Float(<$f>::INFINITY);
103 #[doc = NEG_INFINITY!()]
104 pub const NEG_INFINITY: Float<$f> = Float(<$f>::NEG_INFINITY);
105
106 #[doc = EPSILON!()]
107 pub const EPSILON: Float<$f> = Float(<$f>::EPSILON);
108
109 #[doc = LOW_MARGIN!()]
110 pub const LOW_MARGIN: Float<$f> = Float(<$f>::LOW_MARGIN);
111 #[doc = MEDIUM_MARGIN!()]
112 pub const MEDIUM_MARGIN: Float<$f> = Float(<$f>::MEDIUM_MARGIN);
113 #[doc = HIGH_MARGIN!()]
114 pub const HIGH_MARGIN: Float<$f> = Float(<$f>::HIGH_MARGIN);
115
116 #[doc = RADIX!()]
117 pub const RADIX: u32 = <$f>::RADIX;
118 #[doc = DIGITS!()]
119 pub const DIGITS: u32 = <$f>::DIGITS;
120 #[doc = MANTISSA_DIGITS!()]
121 pub const MANTISSA_DIGITS: u32 = <$f>::MANTISSA_DIGITS;
122
123 #[doc = MIN!()]
124 pub const MIN: Float<$f> = Float(<$f>::MIN);
125 #[doc = MIN_POSITIVE!()]
126 pub const MIN_POSITIVE: Float<$f> = Float(<$f>::MIN_POSITIVE);
127 #[doc = MAX!()]
128 pub const MAX: Float<$f> = Float(<$f>::MAX);
129
130 #[doc = MIN_EXP!()]
131 pub const MIN_EXP: i32 = <$f>::MIN_EXP;
132 #[doc = MAX_EXP!()]
133 pub const MAX_EXP: i32 = <$f>::MAX_EXP;
134
135 #[doc = MIN_10_EXP!()]
136 pub const MIN_10_EXP: i32 = <$f>::MIN_10_EXP;
137 #[doc = MAX_10_EXP!()]
138 pub const MAX_10_EXP: i32 = <$f>::MAX_10_EXP;
139
140 #[doc = PI!()]
143 pub const PI: Float<$f> = Float(<$f>::PI);
144 #[doc = FRAC_PI_2!()]
145 pub const FRAC_PI_2: Float<$f> = Float(<$f>::FRAC_PI_2);
146 #[doc = FRAC_PI_3!()]
147 pub const FRAC_PI_3: Float<$f> = Float(<$f>::FRAC_PI_3);
148 #[doc = FRAC_PI_4!()]
149 pub const FRAC_PI_4: Float<$f> = Float(<$f>::FRAC_PI_4);
150 #[doc = FRAC_PI_6!()]
151 pub const FRAC_PI_6: Float<$f> = Float(<$f>::FRAC_PI_6);
152 #[doc = FRAC_PI_8!()]
153 pub const FRAC_PI_8: Float<$f> = Float(<$f>::FRAC_PI_8);
154 #[doc = SQRT_PI!()]
155 pub const SQRT_PI: Float<$f> = Float(<$f>::SQRT_PI);
156 #[doc = FRAC_1_PI!()]
157 pub const FRAC_1_PI: Float<$f> = Float(<$f>::FRAC_1_PI);
158 #[doc = FRAC_1_SQRT_PI!()]
159 pub const FRAC_1_SQRT_PI: Float<$f> = Float(<$f>::FRAC_1_SQRT_PI);
160 #[doc = FRAC_1_SQRT_2PI!()]
161 pub const FRAC_1_SQRT_2PI: Float<$f> = Float(<$f>::FRAC_1_SQRT_2PI);
162 #[doc = FRAC_2_PI!()]
163 pub const FRAC_2_PI: Float<$f> = Float(<$f>::FRAC_2_PI);
164 #[doc = FRAC_2_SQRT_PI!()]
165 pub const FRAC_2_SQRT_PI: Float<$f> = Float(<$f>::FRAC_2_SQRT_PI);
166
167 #[doc = TAU!()]
170 pub const TAU: Float<$f> = Float(<$f>::TAU);
171 #[doc = FRAC_TAU_2!()]
172 pub const FRAC_TAU_2: Float<$f> = Self::PI;
173 #[doc = FRAC_TAU_3!()]
174 pub const FRAC_TAU_3: Float<$f> = Float(<$f>::FRAC_TAU_3);
175 #[doc = FRAC_TAU_4!()]
176 pub const FRAC_TAU_4: Float<$f> = Self::FRAC_PI_2;
177 #[doc = FRAC_TAU_5!()]
178 pub const FRAC_TAU_5: Float<$f> = Float(<$f>::FRAC_TAU_5);
179 #[doc = FRAC_TAU_6!()]
180 pub const FRAC_TAU_6: Float<$f> = Self::FRAC_PI_3;
181 #[doc = FRAC_TAU_8!()]
182 pub const FRAC_TAU_8: Float<$f> = Self::FRAC_PI_4;
183 #[doc = FRAC_TAU_9!()]
184 pub const FRAC_TAU_9: Float<$f> = Float(<$f>::FRAC_TAU_9);
185 #[doc = FRAC_TAU_12!()]
186 pub const FRAC_TAU_12: Float<$f> = Self::FRAC_PI_6;
187 #[doc = FRAC_TAU_16!()]
188 pub const FRAC_TAU_16: Float<$f> = Self::FRAC_PI_8;
189 #[doc = FRAC_TAU_24!()]
190 pub const FRAC_TAU_24: Float<$f> = Float(<$f>::FRAC_TAU_24);
191 #[doc = FRAC_TAU_72!()]
192 pub const FRAC_TAU_72: Float<$f> = Float(<$f>::FRAC_TAU_72);
193 #[doc = FRAC_360_TAU!()]
194 pub const FRAC_360_TAU: Float<$f> = Float(<$f>::FRAC_360_TAU);
195 #[doc = SQRT_TAU!()]
196 pub const SQRT_TAU: Float<$f> = Float(<$f>::SQRT_TAU);
197 #[doc = FRAC_1_TAU!()]
198 pub const FRAC_1_TAU: Float<$f> = Float(<$f>::FRAC_1_TAU);
199 #[doc = FRAC_1_SQRT_TAU!()]
200 pub const FRAC_1_SQRT_TAU: Float<$f> = Float(<$f>::FRAC_1_SQRT_TAU);
201 #[doc = FRAC_2_TAU!()]
202 pub const FRAC_2_TAU: Float<$f> = Self::FRAC_1_PI;
203 #[doc = FRAC_2_SQRT_TAU!()]
204 pub const FRAC_2_SQRT_TAU: Float<$f> = Float(<$f>::FRAC_2_SQRT_TAU);
205
206 #[doc = ARC_DEGREE!()]
209 pub const ARC_DEGREE: Float<$f> = Float(<$f>::ARC_DEGREE);
210 #[doc = ARC_MINUTE!()]
211 pub const ARC_MINUTE: Float<$f> = Float(<$f>::ARC_MINUTE);
212 #[doc = ARC_SECOND!()]
213 pub const ARC_SECOND: Float<$f> = Float(<$f>::ARC_SECOND);
214
215 #[doc = PHI!()]
218 pub const PHI: Float<$f> = Float(<$f>::PHI);
219 #[doc = SQ_PHI!()]
220 pub const SQ_PHI: Float<$f> = Float(<$f>::SQ_PHI);
221 #[doc = FRAC_1_PHI!()]
222 pub const FRAC_1_PHI: Float<$f> = Float(<$f>::FRAC_1_PHI);
223 #[doc = NEG_FRAC_1_PHI!()]
224 pub const NEG_FRAC_1_PHI: Float<$f> = Float(<$f>::NEG_FRAC_1_PHI);
225 #[doc = SQRT_PHI!()]
226 pub const SQRT_PHI: Float<$f> = Float(<$f>::SQRT_PHI);
227 #[doc = FRAC_1_SQRT_PHI!()]
228 pub const FRAC_1_SQRT_PHI: Float<$f> = Float(<$f>::FRAC_1_SQRT_PHI);
229 #[doc = TRIBONACCI!()]
230 pub const TRIBONACCI: Float<$f> = Float(<$f>::TRIBONACCI);
231
232 #[doc = SQRT_2!()]
235 pub const SQRT_2: Float<$f> = Float(<$f>::SQRT_2);
236 #[doc = FRAC_1_SQRT_2!()]
237 pub const FRAC_1_SQRT_2: Float<$f> = Float(<$f>::FRAC_1_SQRT_2);
238 #[doc = SQRT_3!()]
239 pub const SQRT_3: Float<$f> = Float(<$f>::SQRT_3);
240 #[doc = FRAC_1_SQRT_3!()]
241 pub const FRAC_1_SQRT_3: Float<$f> = Float(<$f>::FRAC_1_SQRT_3);
242 #[doc = SQRT_5!()]
243 pub const SQRT_5: Float<$f> = Float(<$f>::SQRT_5);
244 #[doc = SQRT_6!()]
245 pub const SQRT_6: Float<$f> = Float(<$f>::SQRT_6);
246 #[doc = SQRT_7!()]
247 pub const SQRT_7: Float<$f> = Float(<$f>::SQRT_7);
248 #[doc = SQRT_8!()]
249 pub const SQRT_8: Float<$f> = Float(<$f>::SQRT_8);
250 #[doc = SQRT_10!()]
251 pub const SQRT_10: Float<$f> = Float(<$f>::SQRT_10);
252 #[doc = SQRT_11!()]
253 pub const SQRT_11: Float<$f> = Float(<$f>::SQRT_11);
254 #[doc = SQRT_12!()]
255 pub const SQRT_12: Float<$f> = Float(<$f>::SQRT_12);
256 #[doc = SQRT_2!()]
257 pub const CBRT_2: Float<$f> = Float(<$f>::CBRT_2);
258 #[doc = CBRT_3!()]
259 pub const CBRT_3: Float<$f> = Float(<$f>::CBRT_3);
260 #[doc = FRAC_1_CBRT_3!()]
261 pub const FRAC_1_CBRT_3: Float<$f> = Float(<$f>::FRAC_1_CBRT_3);
262
263 #[doc = E!()]
266 pub const E: Float<$f> = Float(<$f>::E);
267 #[doc = EGAMMA!()]
268 pub const EGAMMA: Float<$f> = Float(<$f>::EGAMMA);
269 #[doc = LOG2_E!()]
270 pub const LOG2_E: Float<$f> = Float(<$f>::LOG2_E);
271 #[doc = LOG2_10!()]
272 pub const LOG2_10: Float<$f> = Float(<$f>::LOG2_10);
273 #[doc = LOG10_E!()]
274 pub const LOG10_E: Float<$f> = Float(<$f>::LOG10_E);
275 #[doc = LOG10_2!()]
276 pub const LOG10_2: Float<$f> = Float(<$f>::LOG10_2);
277 #[doc = LN_2!()]
278 pub const LN_2: Float<$f> = Float(<$f>::LN_2);
279 #[doc = LN_10!()]
280 pub const LN_10: Float<$f> = Float(<$f>::LN_10);
281 }
282 };
283}
284float_const_impls!();