Skip to main content

thermite_compensated/consts/
mod.rs

1// @generated by gen_consts.py at the workspace root. DO NOT EDIT BY HAND.
2//
3// Double-double `(value, error)` splits of every `FloatConsts` constant, plus the
4// reciprocal-log table `log_base` reduces through. The carrier/macro machinery is
5// hand-written in `macros.rs` beside this file.
6#![allow(clippy::approx_constant)]
7
8#[macro_use]
9mod macros;
10#[cfg(feature = "special")]
11mod bernoulli;
12
13use core::marker::PhantomData;
14
15use thermite::{
16    Vector,
17    math::FloatConsts,
18    vector::{SplatConst, const_splat},
19};
20
21use super::{Compensated, ScalarValue};
22
23use self::macros::{Ln2Extended, LogTableError, LogTableValue};
24
25pub const LOG_TABLE_SIZE: usize = 30;
26
27/// Helper trait to store precomputed compensated logarithm table for small integer bases.
28pub trait CompensatedLogTable<T = Self>: FloatConsts {
29    /// The log table entries for bases 3..=32 as (high, low) pairs.
30    const LOG_TABLE: [Compensated<T>; LOG_TABLE_SIZE];
31
32    /// Third part of extended precision ln(2), where the first two parts are provided by `LN_2`.
33    const LN_2_EXTENDED: [T; 3];
34}
35
36impl<R: thermite::register::FloatRegister> CompensatedLogTable<Self> for Vector<R>
37where
38    R::Element: CompensatedLogTable<R::Element>,
39{
40    #[rustfmt::skip]
41    const LOG_TABLE: [Compensated<Self>; LOG_TABLE_SIZE] = log_table!(
42         0,  1,  2,  3,  4,  5,  6,  7,  8,  9,
43        10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
44        20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
45    );
46
47    const LN_2_EXTENDED: [Self; 3] = [
48        const_splat::<Self, Ln2Extended<R::Element, 0>>(),
49        const_splat::<Self, Ln2Extended<R::Element, 1>>(),
50        const_splat::<Self, Ln2Extended<R::Element, 2>>(),
51    ];
52}
53
54thermite::for_each_float_const!(impl_consts);
55
56impl_consts!(f32 {
57    NEG_ZERO = ("-0x0.0p+0", "0x0.0p+0"),
58    E = ("0x1.5bf0a80000000p+1", "0x1.628aee0000000p-24"),
59    EULER_GAMMA = ("0x1.2788d00000000p-1", "-0x1.c824f40000000p-28"),
60    PI_SQUARED = ("0x1.3bd3cc0000000p+3", "0x1.37c8bc0000000p-22"),
61    PI_CUBED = ("0x1.f019b60000000p+4", "-0x1.b1d8a00000000p-22"),
62    PI_FOURTH = ("0x1.85a2e80000000p+6", "0x1.8521040000000p-19"),
63    FRAC_1_PI = ("0x1.45f3060000000p-2", "0x1.b939100000000p-27"),
64    FRAC_1_SQRT_2 = ("0x1.6a09e60000000p-1", "0x1.9fcef40000000p-27"),
65    FRAC_1_SQRT_3 = ("0x1.279a740000000p-1", "0x1.640cc80000000p-27"),
66    FRAC_1_SQRT_5 = ("0x1.c9f25c0000000p-2", "0x1.6ffb760000000p-28"),
67    FRAC_2_PI = ("0x1.45f3060000000p-1", "0x1.b939100000000p-26"),
68    FRAC_1_SQRT_PI = ("0x1.20dd760000000p-1", "-0x1.f7ac920000000p-26"),
69    FRAC_1_SQRT_SQRT_PI = ("0x1.8093880000000p-1", "-0x1.fd54de0000000p-26"),
70    FRAC_2_SQRT_PI = ("0x1.20dd760000000p+0", "-0x1.f7ac920000000p-25"),
71    FRAC_SQRT_PI_2 = ("0x1.c5bf8a0000000p-1", "-0x1.c962120000000p-26"),
72    FRAC_1_SQRT_TAU = ("0x1.9884540000000p-2", "-0x1.8579360000000p-27"),
73    FRAC_PI_2 = ("0x1.921fb60000000p+0", "-0x1.777a5c0000000p-25"),
74    FRAC_PI_3 = ("0x1.0c15240000000p+0", "-0x1.f4a3260000000p-26"),
75    FRAC_PI_4 = ("0x1.921fb60000000p-1", "-0x1.777a5c0000000p-26"),
76    FRAC_PI_6 = ("0x1.0c15240000000p-1", "-0x1.f4a3260000000p-27"),
77    FRAC_PI_8 = ("0x1.921fb60000000p-2", "-0x1.777a5c0000000p-27"),
78    FRAC_PI_180 = ("0x1.1df46a0000000p-6", "0x1.294e9c0000000p-33"),
79    FRAC_180_PI = ("0x1.ca5dc20000000p+5", "-0x1.670f820000000p-21"),
80    LN_2 = ("0x1.62e4300000000p-1", "-0x1.05c6100000000p-29"),
81    LN_10 = ("0x1.26bb1c0000000p+1", "-0x1.12aaba0000000p-25"),
82    LN_PI = ("0x1.250d040000000p+0", "0x1.1cf4380000000p-25"),
83    LN_TAU = ("0x1.d67f1c0000000p+0", "0x1.0c97d60000000p-25"),
84    LN_9 = ("0x1.193ea80000000p+1", "-0x1.54bf3e0000000p-25"),
85    NINE_LN_9_HI = ("0x1.3c667c0000000p+4", "0x1.40546e0000000p-21"),
86    NINE_LN_9_LO = ("-0x1.5a87640000000p-52", "0x1.7dff4c0000000p-77"),
87    FRAC_LN_PI_2 = ("0x1.250d040000000p-1", "0x1.1cf4380000000p-26"),
88    FRAC_LN_TAU_2 = ("0x1.d67f1c0000000p-1", "0x1.0c97d60000000p-26"),
89    LOG2_10 = ("0x1.a934f00000000p+1", "0x1.2f346e0000000p-24"),
90    LOG2_E = ("0x1.7154760000000p+0", "0x1.4ae0c00000000p-26"),
91    LOG2_PI = ("0x1.a6c8740000000p+0", "-0x1.6ce4420000000p-25"),
92    LOG10_2 = ("0x1.3441360000000p-2", "-0x1.ec10c00000000p-27"),
93    LOG10_E = ("0x1.bcb7b20000000p-2", "-0x1.5b235e0000000p-27"),
94    PI = ("0x1.921fb60000000p+1", "-0x1.777a5c0000000p-24"),
95    SQRT_2 = ("0x1.6a09e60000000p+0", "0x1.9fcef40000000p-26"),
96    SQRT_3 = ("0x1.bb67ae0000000p+0", "0x1.0b09960000000p-25"),
97    SQRT_5 = ("0x1.1e377a0000000p+1", "-0x1.1a02d60000000p-25"),
98    SQRT_E = ("0x1.a612980000000p+0", "0x1.c3c0d40000000p-25"),
99    EPSILON = ("0x1.0000000000000p-47", "0x0.0p+0"),
100    SQRT_EPSILON = ("0x1.6a09e60000000p-24", "0x1.9fcef40000000p-50"),
101    FOURTH_ROOT_EPSILON = ("0x1.306fe00000000p-12", "0x1.4636e20000000p-37"),
102    TAU = ("0x1.921fb60000000p+2", "-0x1.777a5c0000000p-23"),
103    SQRT_FRAC_PI_2 = ("0x1.40d9320000000p+0", "-0x1.3b1f4e0000000p-33"),
104    SQRT_TAU = ("0x1.40d9320000000p+1", "-0x1.3b1f4e0000000p-32"),
105    PHI = ("0x1.9e377a0000000p+0", "-0x1.1a02d60000000p-26"),
106    FRAC_1_PHI = ("0x1.3c6ef40000000p-1", "-0x1.1a02d60000000p-26"),
107    FRAC_1_PHI_SQUARED = ("0x1.87221a0000000p-2", "-0x1.cbfa540000000p-27"),
108    GOLDEN_ANGLE = ("0x1.3331fe0000000p+1", "0x1.7f49800000000p-24"),
109    FRAC_1_3 = ("0x1.5555560000000p-2", "-0x1.5555560000000p-27"),
110    FRAC_2_3 = ("0x1.5555560000000p-1", "-0x1.5555560000000p-26"),
111    FRAC_1_4 = ("0x1.0000000000000p-2", "0x0.0p+0"),
112    FRAC_1_6 = ("0x1.5555560000000p-3", "-0x1.5555560000000p-28"),
113    FRAC_1_E = ("0x1.78b5640000000p-2", "-0x1.3a621a0000000p-27"),
114    FRAC_NEG_1_E = ("-0x1.78b5640000000p-2", "0x1.3a621a0000000p-27"),
115    FRAC_1_2 = ("0x1.0000000000000p-1", "0x0.0p+0"),
116    FRAC_3_4 = ("0x1.8000000000000p-1", "0x0.0p+0"),
117    LN_LN_2 = ("-0x1.774f2a0000000p-2", "0x1.08a5180000000p-28"),
118    SQRT_LN_4 = ("0x1.2d6abe0000000p+0", "0x1.12bf100000000p-26"),
119    FRAC_2PI_3 = ("0x1.0c15240000000p+1", "-0x1.f4a3260000000p-25"),
120    FRAC_3PI_4 = ("0x1.2d97c80000000p+1", "-0x1.99bc5c0000000p-28"),
121    FRAC_4PI_3 = ("0x1.0c15240000000p+2", "-0x1.f4a3260000000p-24"),
122    FOUR_PI = ("0x1.921fb60000000p+3", "-0x1.777a5c0000000p-22"),
123    FRAC_1_4PI = ("0x1.45f3060000000p-4", "0x1.b939100000000p-29"),
124    FRAC_1_TAU = ("0x1.45f3060000000p-3", "0x1.b939100000000p-28"),
125    SQRT_PI = ("0x1.c5bf8a0000000p+0", "-0x1.c962120000000p-25"),
126    PI_MINUS_3 = ("0x1.21fb540000000p-3", "0x1.10b4620000000p-29"),
127    FOUR_MINUS_PI = ("0x1.b7812a0000000p-1", "0x1.dde9740000000p-26"),
128    PI_POW_E = ("0x1.6758b60000000p+4", "-0x1.e3f7780000000p-23"),
129    CBRT_2 = ("0x1.428a300000000p+0", "-0x1.9ca35e0000000p-26"),
130    CBRT_3 = ("0x1.7137440000000p+0", "0x1.2247de0000000p-25"),
131    CBRT_PI = ("0x1.76ef7e0000000p+0", "0x1.cc412e0000000p-26"),
132    FRAC_1_CBRT_PI = ("0x1.5d95e00000000p-1", "-0x1.285aa20000000p-26"),
133    FRAC_1_SQRT_E = ("0x1.368b300000000p-1", "-0x1.c834fc0000000p-28"),
134    E_POW_PI = ("0x1.7240460000000p+4", "0x1.d612680000000p-21"),
135    GELFOND_SCHNEIDER = ("0x1.5523720000000p+1", "-0x1.0c05000000000p-24"),
136    SIN_1 = ("0x1.aed5480000000p-1", "0x1.e1219e0000000p-26"),
137    COS_1 = ("0x1.14a2800000000p-1", "0x1.f6a0d20000000p-26"),
138    TAN_1 = ("0x1.8eb2460000000p+0", "-0x1.a08e2e0000000p-27"),
139    SINH_1 = ("0x1.2cd9fc0000000p+0", "0x1.13ae600000000p-26"),
140    COSH_1 = ("0x1.8b07560000000p+0", "-0x1.c4c1560000000p-25"),
141    TANH_1 = ("0x1.85efac0000000p-1", "-0x1.5d618e0000000p-26"),
142    LN_PHI = ("0x1.ecc2ca0000000p-2", "0x1.d8a2c20000000p-27"),
143    FRAC_1_LN_PHI = ("0x1.09fec00000000p+1", "0x1.24f3240000000p-24"),
144    FRAC_1_EULER_GAMMA = ("0x1.bb82260000000p+0", "0x1.ea057e0000000p-25"),
145    EULER_GAMMA_SQUARED = ("0x1.552c980000000p-2", "-0x1.7f25aa0000000p-32"),
146    ZETA_2 = ("0x1.a51a660000000p+0", "0x1.2983ea0000000p-27"),
147    ZETA_3 = ("0x1.33ba000000000p+0", "0x1.3c01880000000p-26"),
148    ZETA_4 = ("0x1.1513220000000p+0", "0x1.58fb0a0000000p-25"),
149    CATALAN = ("0x1.d4f9720000000p-1", "-0x1.82fd940000000p-26"),
150    GLAISHER = ("0x1.484d240000000p+0", "0x1.e5fb0e0000000p-25"),
151    KHINCHIN = ("0x1.57bce40000000p+1", "0x1.1e36860000000p-26"),
152    LEVY = ("0x1.a34e2a0000000p+1", "0x1.5ecb7e0000000p-25"),
153    EXTREME_VALUE_SKEWNESS = ("0x1.23b95c0000000p+0", "-0x1.5e71680000000p-27"),
154    RAYLEIGH_SKEWNESS = ("0x1.4320f00000000p-1", "-0x1.6415c00000000p-27"),
155    RAYLEIGH_KURTOSIS_EXCESS = ("0x1.f5f1620000000p-3", "-0x1.cf27420000000p-28"),
156    RAYLEIGH_KURTOSIS = ("0x1.9f5f160000000p+1", "0x1.186c600000000p-27"),
157    FEIGENBAUM_DELTA = ("0x1.2ad4320000000p+2", "0x1.f8c3920000000p-23"),
158    PLASTIC_RATIO = ("0x1.5320b80000000p+0", "-0x1.626b760000000p-25"),
159    FRAC_1_PLASTIC_RATIO = ("0x1.827f540000000p-1", "-0x1.5bf5680000000p-26"),
160    FRAC_1_PLASTIC_RATIO_SQUARED = ("0x1.23c21c0000000p-1", "-0x1.68e1860000000p-26"),
161    GAUSS = ("0x1.ab54360000000p-1", "-0x1.952b300000000p-27"),
162    LEMNISCATE = ("0x1.4f9f940000000p+1", "0x1.f3ea160000000p-24"),
163    DOTTIE = ("0x1.7a695e0000000p-1", "-0x1.3e18ea0000000p-28"),
164    OMEGA = ("0x1.22609a0000000p-1", "0x1.f1d2ca0000000p-26"),
165    PSI = ("0x1.ae10bc0000000p+1", "-0x1.c4beda0000000p-26"),
166    LAPLACE_LIMIT = ("0x1.53531a0000000p-1", "0x1.fef9ce0000000p-26"),
167    ERDOS_BORWEIN = ("0x1.9b50600000000p+0", "-0x1.86f0380000000p-26"),
168    NIVEN = ("0x1.b488b80000000p+0", "-0x1.81e3ea0000000p-26"),
169    SOLDNER = ("0x1.738cf00000000p+0", "-0x1.b382bc0000000p-25"),
170    FRANSEN_ROBINSON = ("0x1.6765040000000p+1", "-0x1.5e71ac0000000p-27"),
171    GOLOMB_DICKMAN = ("0x1.3fa82e0000000p-1", "0x1.2b4e420000000p-28"),
172    TWIN_PRIME = ("0x1.5200ba0000000p-1", "0x1.8485680000000p-26"),
173    MERTENS = ("0x1.0bc5ec0000000p-2", "0x1.c967fe0000000p-27"),
174    ARTIN = ("0x1.7eee460000000p-2", "-0x1.4b68140000000p-29"),
175});
176
177impl_consts!(f64 {
178    NEG_ZERO = ("-0x0.0p+0", "0x0.0p+0"),
179    E = ("0x1.5bf0a8b145769p+1", "0x1.4d57ee2b1013ap-53"),
180    EULER_GAMMA = ("0x1.2788cfc6fb619p-1", "-0x1.6cb90701fbfabp-58"),
181    PI_SQUARED = ("0x1.3bd3cc9be45dep+3", "0x1.692b71366cc04p-51"),
182    PI_CUBED = ("0x1.f019b59389d7cp+4", "0x1.e019558e5380dp-52"),
183    PI_FOURTH = ("0x1.85a2e8c290826p+6", "-0x1.cc0cdf4bfa1e7p-48"),
184    FRAC_1_PI = ("0x1.45f306dc9c883p-2", "-0x1.6b01ec5417056p-56"),
185    FRAC_1_SQRT_2 = ("0x1.6a09e667f3bcdp-1", "-0x1.bdd3413b26456p-55"),
186    FRAC_1_SQRT_3 = ("0x1.279a74590331cp-1", "0x1.34863e0792bedp-55"),
187    FRAC_1_SQRT_5 = ("0x1.c9f25c5bfedd9p-2", "0x1.ab294a33804a5p-57"),
188    FRAC_2_PI = ("0x1.45f306dc9c883p-1", "-0x1.6b01ec5417056p-55"),
189    FRAC_1_SQRT_PI = ("0x1.20dd750429b6dp-1", "0x1.1ae3a914fed80p-57"),
190    FRAC_1_SQRT_SQRT_PI = ("0x1.8093870155910p-1", "-0x1.c225764e553cap-56"),
191    FRAC_2_SQRT_PI = ("0x1.20dd750429b6dp+0", "0x1.1ae3a914fed80p-56"),
192    FRAC_SQRT_PI_2 = ("0x1.c5bf891b4ef6bp-1", "-0x1.618f13eb7ca89p-55"),
193    FRAC_1_SQRT_TAU = ("0x1.9884533d43651p-2", "-0x1.cbc0d30ebfd15p-56"),
194    FRAC_PI_2 = ("0x1.921fb54442d18p+0", "0x1.1a62633145c07p-54"),
195    FRAC_PI_3 = ("0x1.0c152382d7366p+0", "-0x1.ee6913347c2a6p-54"),
196    FRAC_PI_4 = ("0x1.921fb54442d18p-1", "0x1.1a62633145c07p-55"),
197    FRAC_PI_6 = ("0x1.0c152382d7366p-1", "-0x1.ee6913347c2a6p-55"),
198    FRAC_PI_8 = ("0x1.921fb54442d18p-2", "0x1.1a62633145c07p-56"),
199    FRAC_PI_180 = ("0x1.1df46a2529d39p-6", "0x1.5c1d8becdd291p-62"),
200    FRAC_180_PI = ("0x1.ca5dc1a63c1f8p+5", "-0x1.1e7ab456405f9p-49"),
201    LN_2 = ("0x1.62e42fefa39efp-1", "0x1.abc9e3b39803fp-56"),
202    LN_10 = ("0x1.26bb1bbb55516p+1", "-0x1.f48ad494ea3e9p-53"),
203    LN_PI = ("0x1.250d048e7a1bdp+0", "0x1.7abf2ad8d5088p-57"),
204    LN_TAU = ("0x1.d67f1c864beb5p+0", "-0x1.65b5a1b7ff5dfp-54"),
205    LN_9 = ("0x1.193ea7aad030bp+1", "-0x1.a256f99caabebp-53"),
206    NINE_LN_9_HI = ("0x1.3c667ca02a36cp+4", "-0x1.5a876341005a2p-52"),
207    NINE_LN_9_LO = ("-0x1.5a876341005a2p-52", "0x1.76263aeb659a7p-107"),
208    FRAC_LN_PI_2 = ("0x1.250d048e7a1bdp-1", "0x1.7abf2ad8d5088p-58"),
209    FRAC_LN_TAU_2 = ("0x1.d67f1c864beb5p-1", "-0x1.65b5a1b7ff5dfp-55"),
210    LOG2_10 = ("0x1.a934f0979a371p+1", "0x1.7f2495fb7fa6dp-53"),
211    LOG2_E = ("0x1.71547652b82fep+0", "0x1.777d0ffda0d24p-56"),
212    LOG2_PI = ("0x1.a6c873498ddf7p+0", "0x1.6c36cb93c202ap-54"),
213    LOG10_2 = ("0x1.34413509f79ffp-2", "-0x1.9dc1da994fd21p-59"),
214    LOG10_E = ("0x1.bcb7b1526e50ep-2", "0x1.95355baaafad3p-57"),
215    PI = ("0x1.921fb54442d18p+1", "0x1.1a62633145c07p-53"),
216    SQRT_2 = ("0x1.6a09e667f3bcdp+0", "-0x1.bdd3413b26456p-54"),
217    SQRT_3 = ("0x1.bb67ae8584caap+0", "0x1.cec95d0b5c1e3p-54"),
218    SQRT_5 = ("0x1.1e3779b97f4a8p+1", "-0x1.f506319fcfd19p-54"),
219    SQRT_E = ("0x1.a61298e1e069cp+0", "-0x1.b4690082a4906p-55"),
220    EPSILON = ("0x1.0000000000000p-105", "0x0.0p+0"),
221    SQRT_EPSILON = ("0x1.6a09e667f3bcdp-53", "-0x1.bdd3413b26456p-107"),
222    FOURTH_ROOT_EPSILON = ("0x1.ae89f995ad3adp-27", "0x1.7a1cd345dcc81p-81"),
223    TAU = ("0x1.921fb54442d18p+2", "0x1.1a62633145c07p-52"),
224    SQRT_FRAC_PI_2 = ("0x1.40d931ff62706p+0", "-0x1.a6a0d6f814637p-54"),
225    SQRT_TAU = ("0x1.40d931ff62706p+1", "-0x1.a6a0d6f814637p-53"),
226    PHI = ("0x1.9e3779b97f4a8p+0", "-0x1.f506319fcfd19p-55"),
227    FRAC_1_PHI = ("0x1.3c6ef372fe950p-1", "-0x1.f506319fcfd19p-55"),
228    FRAC_1_PHI_SQUARED = ("0x1.8722191a02d61p-2", "-0x1.5f39cc0605ceep-60"),
229    GOLDEN_ANGLE = ("0x1.3331febfa4bfcp+1", "-0x1.9ebb7adf6e3c9p-53"),
230    FRAC_1_3 = ("0x1.5555555555555p-2", "0x1.5555555555555p-56"),
231    FRAC_2_3 = ("0x1.5555555555555p-1", "0x1.5555555555555p-55"),
232    FRAC_1_4 = ("0x1.0000000000000p-2", "0x0.0p+0"),
233    FRAC_1_6 = ("0x1.5555555555555p-3", "0x1.5555555555555p-57"),
234    FRAC_1_E = ("0x1.78b56362cef38p-2", "-0x1.ca8a4270fadf5p-57"),
235    FRAC_NEG_1_E = ("-0x1.78b56362cef38p-2", "0x1.ca8a4270fadf5p-57"),
236    FRAC_1_2 = ("0x1.0000000000000p-1", "0x0.0p+0"),
237    FRAC_3_4 = ("0x1.8000000000000p-1", "0x0.0p+0"),
238    LN_LN_2 = ("-0x1.774f29bdd6b9fp-2", "0x1.7c1fc8982991dp-56"),
239    SQRT_LN_4 = ("0x1.2d6abe44afc43p+0", "0x1.fb5e9fb2b55bbp-56"),
240    FRAC_2PI_3 = ("0x1.0c152382d7366p+1", "-0x1.ee6913347c2a6p-53"),
241    FRAC_3PI_4 = ("0x1.2d97c7f3321d2p+1", "0x1.a79394c9e8a0ap-54"),
242    FRAC_4PI_3 = ("0x1.0c152382d7366p+2", "-0x1.ee6913347c2a6p-52"),
243    FOUR_PI = ("0x1.921fb54442d18p+3", "0x1.1a62633145c07p-51"),
244    FRAC_1_4PI = ("0x1.45f306dc9c883p-4", "-0x1.6b01ec5417056p-58"),
245    FRAC_1_TAU = ("0x1.45f306dc9c883p-3", "-0x1.6b01ec5417056p-57"),
246    SQRT_PI = ("0x1.c5bf891b4ef6bp+0", "-0x1.618f13eb7ca89p-54"),
247    PI_MINUS_3 = ("0x1.21fb54442d184p-3", "0x1.a62633145c06ep-57"),
248    FOUR_MINUS_PI = ("0x1.b7812aeef4b9fp-1", "-0x1.a62633145c06ep-57"),
249    PI_POW_E = ("0x1.6758b5c381111p+4", "0x1.c590b3b71e332p-51"),
250    CBRT_2 = ("0x1.428a2f98d728bp+0", "-0x1.ddc22548ea41ep-56"),
251    CBRT_3 = ("0x1.7137449123ef6p+0", "0x1.73779fc5b15b9p-54"),
252    CBRT_PI = ("0x1.76ef7e73104b8p+0", "-0x1.d41ba28e4f999p-54"),
253    FRAC_1_CBRT_PI = ("0x1.5d95df6bd2aeep-1", "-0x1.9749756e80c72p-55"),
254    FRAC_1_SQRT_E = ("0x1.368b2fc6f960ap-1", "-0x1.85314b9559e64p-61"),
255    E_POW_PI = ("0x1.724046eb0933ap+4", "-0x1.84c962dd81952p-50"),
256    GELFOND_SCHNEIDER = ("0x1.55237179fd803p+1", "0x1.718b63176f20ep-55"),
257    SIN_1 = ("0x1.aed548f090ceep-1", "0x1.06374f484e288p-59"),
258    COS_1 = ("0x1.14a280fb5068cp-1", "-0x1.b71edcc9344bcp-55"),
259    TAN_1 = ("0x1.8eb245cbee3a6p+0", "-0x1.1d4ce0afb373bp-54"),
260    SINH_1 = ("0x1.2cd9fc44eb982p+0", "0x1.6a0092521fc19p-54"),
261    COSH_1 = ("0x1.8b07551d9f550p+0", "0x1.30af4a040065bp-54"),
262    TANH_1 = ("0x1.85efab514f394p-1", "0x1.5618caf8a4f11p-55"),
263    LN_PHI = ("0x1.ecc2caec5160ap-2", "-0x1.ad07ef7ed5a5dp-56"),
264    FRAC_1_LN_PHI = ("0x1.09fec09279922p+1", "-0x1.6bb3871417f12p-53"),
265    FRAC_1_EULER_GAMMA = ("0x1.bb8226f502bf8p+0", "-0x1.7abec73926687p-56"),
266    EULER_GAMMA_SQUARED = ("0x1.552c97fa03695p-2", "0x1.456320745c86bp-56"),
267    ZETA_2 = ("0x1.a51a6625307d3p+0", "0x1.1873d8912200cp-55"),
268    ZETA_3 = ("0x1.33ba004f00621p+0", "0x1.c1b8b8ae2cf35p-55"),
269    ZETA_4 = ("0x1.151322ac7d848p+0", "0x1.b5f91211196e5p-55"),
270    CATALAN = ("0x1.d4f9713e8135dp-1", "0x1.1485608b8df4dp-58"),
271    GLAISHER = ("0x1.484d24f2fd873p+0", "0x1.313ed56e343dap-56"),
272    KHINCHIN = ("0x1.57bce423c6d0dp+1", "0x1.de5fbe7c728cdp-53"),
273    LEVY = ("0x1.a34e2a57b2df8p+1", "-0x1.4fd4e0ab83370p-53"),
274    EXTREME_VALUE_SKEWNESS = ("0x1.23b95bd431d31p+0", "0x1.08492b4c8dae6p-54"),
275    RAYLEIGH_SKEWNESS = ("0x1.4320efa6fa904p-1", "-0x1.8bc4ccb8fa389p-56"),
276    RAYLEIGH_KURTOSIS_EXCESS = ("0x1.f5f161186c5f2p-3", "-0x1.59a3e3c6197d7p-58"),
277    RAYLEIGH_KURTOSIS = ("0x1.9f5f161186c5fp+1", "0x1.d4cb83873cd05p-55"),
278    FEIGENBAUM_DELTA = ("0x1.2ad432fc61c97p+2", "0x1.1d1c04ed45ae2p-52"),
279    PLASTIC_RATIO = ("0x1.5320b74eca44bp+0", "-0x1.29f43bb41df5dp-55"),
280    FRAC_1_PLASTIC_RATIO = ("0x1.827f5352054c6p-1", "0x1.47a1a7fb8d96dp-55"),
281    FRAC_1_PLASTIC_RATIO_SQUARED = ("0x1.23c21b4b8f3cfp-1", "0x1.8e6a1c5054736p-55"),
282    GAUSS = ("0x1.ab54359ab5344p-1", "-0x1.29db2257d3fd6p-57"),
283    LEMNISCATE = ("0x1.4f9f94f9f50b0p+1", "0x1.b9e61ddaeb023p-53"),
284    DOTTIE = ("0x1.7a695dd83ce2ep-1", "-0x1.1a9573fe3c5bdp-55"),
285    OMEGA = ("0x1.22609af8e9657p-1", "0x1.2f57eed531437p-55"),
286    PSI = ("0x1.ae10bbc76824bp+1", "-0x1.c2c8f175467e3p-53"),
287    LAPLACE_LIMIT = ("0x1.53531aff7ce6dp-1", "0x1.2ce0dafecc8fbp-57"),
288    ERDOS_BORWEIN = ("0x1.9b505f9e43f22p+0", "0x1.0dfcdcb14a049p-54"),
289    NIVEN = ("0x1.b488b79f87059p+0", "-0x1.6e8abc567bd64p-56"),
290    SOLDNER = ("0x1.738cef263ea25p+0", "-0x1.bd39894e88b11p-55"),
291    FRANSEN_ROBINSON = ("0x1.676503ea18e54p+1", "-0x1.a3c17cf5296e0p-53"),
292    GOLOMB_DICKMAN = ("0x1.3fa82e2569c83p-1", "0x1.ea135cf9792a6p-55"),
293    TWIN_PRIME = ("0x1.5200bac242b40p-1", "-0x1.7c24cb5afd011p-55"),
294    MERTENS = ("0x1.0bc5ece4b3fedp-2", "0x1.1f379936e0b34p-56"),
295    ARTIN = ("0x1.7eee45d692fd8p-2", "0x1.3e0716e745b46p-56"),
296});
297
298impl_consts!(LOG f32 [
299    ("0x1.d20ae00000000p-1", "0x1.de60aa0000000p-28"),  // 1/ln(3)
300    ("0x1.7154760000000p-1", "0x1.4ae0c00000000p-27"),  // 1/ln(4)
301    ("0x1.3e1f9c0000000p-1", "0x1.9f2eee0000000p-26"),  // 1/ln(5)
302    ("0x1.1dc0ae0000000p-1", "-0x1.dda6380000000p-26"),  // 1/ln(6)
303    ("0x1.071dae0000000p-1", "0x1.f7c96a0000000p-26"),  // 1/ln(7)
304    ("0x1.ec709e0000000p-2", "-0x1.e2fe020000000p-29"),  // 1/ln(8)
305    ("0x1.d20ae00000000p-2", "0x1.de60aa0000000p-29"),  // 1/ln(9)
306    ("0x1.bcb7b20000000p-2", "-0x1.5b235e0000000p-27"),  // 1/ln(10)
307    ("0x1.ab0a8a0000000p-2", "0x1.4518740000000p-31"),  // 1/ln(11)
308    ("0x1.9c16820000000p-2", "-0x1.a3cddc0000000p-28"),  // 1/ln(12)
309    ("0x1.8f3a680000000p-2", "0x1.8014a80000000p-28"),  // 1/ln(13)
310    ("0x1.8404700000000p-2", "0x1.10dfaa0000000p-28"),  // 1/ln(14)
311    ("0x1.7a21c00000000p-2", "0x1.17d8500000000p-29"),  // 1/ln(15)
312    ("0x1.7154760000000p-2", "0x1.4ae0c00000000p-28"),  // 1/ln(16)
313    ("0x1.696d540000000p-2", "0x1.0760680000000p-27"),  // 1/ln(17)
314    ("0x1.62479a0000000p-2", "-0x1.e2a68a0000000p-28"),  // 1/ln(18)
315    ("0x1.5bc6340000000p-2", "-0x1.1fffc20000000p-31"),  // 1/ln(19)
316    ("0x1.55d1d20000000p-2", "-0x1.b703f60000000p-27"),  // 1/ln(20)
317    ("0x1.50577c0000000p-2", "0x1.a83cf40000000p-27"),  // 1/ln(21)
318    ("0x1.4b47a20000000p-2", "0x1.1831800000000p-27"),  // 1/ln(22)
319    ("0x1.4695520000000p-2", "0x1.22d24e0000000p-29"),  // 1/ln(23)
320    ("0x1.4235b40000000p-2", "-0x1.8912be0000000p-28"),  // 1/ln(24)
321    ("0x1.3e1f9c0000000p-2", "0x1.9f2eee0000000p-27"),  // 1/ln(25)
322    ("0x1.3a4b400000000p-2", "-0x1.37ecc00000000p-28"),  // 1/ln(26)
323    ("0x1.36b1ea0000000p-2", "0x1.a5101c0000000p-27"),  // 1/ln(27)
324    ("0x1.334dd80000000p-2", "-0x1.40ea420000000p-27"),  // 1/ln(28)
325    ("0x1.301a020000000p-2", "-0x1.03afa00000000p-27"),  // 1/ln(29)
326    ("0x1.2d12080000000p-2", "0x1.02e7c00000000p-27"),  // 1/ln(30)
327    ("0x1.2a32160000000p-2", "-0x1.8a11340000000p-27"),  // 1/ln(31)
328    ("0x1.2776c60000000p-2", "-0x1.e20c800000000p-27"),  // 1/ln(32)
329],
330// LN_2_EXTENDED: Cody-Waite pieces, NOT simply ln(2) to ever more digits.
331//
332// `exp_internal` reduces with `r -= k * LN_2_EXTENDED[i]`, where both `k` and the piece
333// are plain (uncompensated) vectors, so each product is a single rounded multiply. The
334// pieces therefore have to be narrow enough that those products are exact, which is
335// what buys the reduction its accuracy. The compensated subtraction around them is
336// already exact on its own.
337//
338// f32 carries 24 mantissa bits and `exp` overflows near 88.7, so |k| <= 128 needs 8 of
339// them: the leading pieces get 24 - 8 = 16 bits each and the tail takes the remainder.
340// Verified exact for |k| <= 160. Worst-case reduction error 5.2e-17, against the ~3.6e-15
341// that double-single needs.
342//
343// Widening these to "more accurate" full-precision values silently makes `exp` WORSE.
344// At ~21 bits per piece the product is inexact past about k = 16.
345["0x1.62e4000000000p-1", "0x1.7f7e000000000p-20", "-0x1.c610ca0000000p-37"]);
346
347impl_consts!(LOG f64 [
348    ("0x1.d20ae03bcc153p-1", "-0x1.3a34bf2f1ab83p-55"),  // 1/ln(3)
349    ("0x1.71547652b82fep-1", "0x1.777d0ffda0d24p-57"),  // 1/ln(4)
350    ("0x1.3e1f9ccf97777p-1", "-0x1.db618df721f98p-55"),  // 1/ln(5)
351    ("0x1.1dc0ad112ce3ep-1", "0x1.769f645267d4ap-55"),  // 1/ln(6)
352    ("0x1.071daefbe4b4ap-1", "-0x1.9ea6c1f1794eep-55"),  // 1/ln(7)
353    ("0x1.ec709dc3a03fdp-2", "0x1.d27f05548af0cp-56"),  // 1/ln(8)
354    ("0x1.d20ae03bcc153p-2", "-0x1.3a34bf2f1ab83p-56"),  // 1/ln(9)
355    ("0x1.bcb7b1526e50ep-2", "0x1.95355baaafad3p-57"),  // 1/ln(10)
356    ("0x1.ab0a8a0a28c3ap-2", "0x1.b6455c79fed99p-56"),  // 1/ln(11)
357    ("0x1.9c1681970c88fp-2", "0x1.e3221f6298af5p-59"),  // 1/ln(12)
358    ("0x1.8f3a6860052a1p-2", "-0x1.afe7dc91a78f0p-56"),  // 1/ln(13)
359    ("0x1.8404704437eabp-2", "0x1.ac5dd927e6112p-56"),  // 1/ln(14)
360    ("0x1.7a21c022fb0a1p-2", "0x1.a9f5bd6a60428p-56"),  // 1/ln(15)
361    ("0x1.71547652b82fep-2", "0x1.777d0ffda0d24p-58"),  // 1/ln(16)
362    ("0x1.696d5483b0344p-2", "0x1.78ec9931dd399p-58"),  // 1/ln(17)
363    ("0x1.62479987565dap-2", "0x1.2708bb7e5784cp-56"),  // 1/ln(18)
364    ("0x1.5bc633f70001fp-2", "-0x1.1e2e054e1a1f4p-57"),  // 1/ln(19)
365    ("0x1.55d1d1247e049p-2", "-0x1.09a5cb7ff50e7p-56"),  // 1/ln(20)
366    ("0x1.50577cd41e7a0p-2", "-0x1.795d4f1c45fa7p-56"),  // 1/ln(21)
367    ("0x1.4b47a28c18bfbp-2", "-0x1.a4ad57d5c1ac2p-58"),  // 1/ln(22)
368    ("0x1.469552245a49dp-2", "-0x1.5b806338b1165p-59"),  // 1/ln(23)
369    ("0x1.4235b39dbb506p-2", "0x1.15529d613d714p-56"),  // 1/ln(24)
370    ("0x1.3e1f9ccf97777p-2", "-0x1.db618df721f98p-56"),  // 1/ln(25)
371    ("0x1.3a4b3fb204cfep-2", "-0x1.431b7d1b937b5p-60"),  // 1/ln(26)
372    ("0x1.36b1ead2880e2p-2", "-0x1.a2f0fee978f59p-57"),  // 1/ln(27)
373    ("0x1.334dd75f8adeep-2", "-0x1.c3950ba6ceb12p-56"),  // 1/ln(28)
374    ("0x1.301a017e282fcp-2", "0x1.dbdacfa0d9b0fp-57"),  // 1/ln(29)
375    ("0x1.2d12088173e01p-2", "0x1.bffac2f932436p-57"),  // 1/ln(30)
376    ("0x1.2a32153af765ep-2", "0x1.c22c8956209efp-56"),  // 1/ln(31)
377    ("0x1.2776c50ef9bfep-2", "0x1.e4b29ccc535d4p-56"),  // 1/ln(32)
378],
379// LN_2_EXTENDED: Cody-Waite pieces. See the f32 table above for why these are narrow.
380//
381// f64 carries 53 mantissa bits and `exp` overflows near 709.8, so |k| <= 1024 needs 11
382// of them: 53 - 11 = 42 bits per leading piece, tail takes the remainder. Verified exact
383// for |k| <= 1100. Worst-case reduction error 2.9e-42, against the ~1.2e-32 that
384// double-double needs.
385//
386// Full-precision f64 values here make every `k * piece` a rounded multiply and cap `exp`
387// at about 50 bits (1.1e-15 relative at x = 29, growing with |k|). `ln` inherits that
388// ceiling through its Halley step, and everything built on the pair (`powf`, the gamma
389// family) inherits it in turn.
390["0x1.62e42fefa3800p-1", "0x1.ef35793c76800p-45", "-0x1.9ff0342542fc3p-90"]);
Last built: 2026-09-08 21:35:55 UTC