conspire/math/special/
mod.rs

1#[cfg(test)]
2mod test;
3
4use super::{Scalar, Tensor};
5use crate::{ABS_TOL, REL_TOL};
6use std::f64::consts::E;
7
8const NINE_FIFTHS: Scalar = 9.0 / 5.0;
9
10/// Returns the inverse Langevin function.
11///
12/// ```math
13/// x = \mathcal{L}^{-1}(y)
14/// ```
15/// The first few terms of the Maclaurin series are used when $`|y|<3e^{-3}`$.
16/// ```math
17/// x \sim 3y + \frac{9}{5}y^3 + \mathrm{ord}(y^5)
18/// ```
19/// Two iterations of Newton's method are used to improve upon an initial guess given by [inverse_langevin_approximate()] otherwise.
20/// The resulting maximum relative error is below $`1e^{-12}`$.
21pub fn inverse_langevin(y: Scalar) -> Scalar {
22    let y_abs = y.abs();
23    if y_abs >= 1.0 {
24        panic!()
25    } else if y_abs <= 3e-3 {
26        3.0 * y + NINE_FIFTHS * y.powi(3)
27    } else {
28        let mut x = inverse_langevin_approximate(y_abs);
29        for _ in 0..2 {
30            x += (y_abs - langevin(x)) / langevin_derivative(x);
31        }
32        if y < 0.0 { -x } else { x }
33    }
34}
35
36/// Returns an approximation of the inverse Langevin function.[^cite]
37///
38/// [^cite]: R. Jedynak, [Math. Mech. Solids **24**, 1992 (2019)](https://doi.org/10.1177/1081286518811395).
39///
40/// ```math
41/// \mathcal{L}^{-1}(y) \approx \frac{2.14234 y^3 - 4.22785 y^2 + 3y}{(1 - y)(0.71716 y^3 - 0.41103 y^2 - 0.39165 y + 1)}
42/// ```
43/// This approximation has a maximum relative error of $`8.2e^{-4}`$.
44pub fn inverse_langevin_approximate(y: Scalar) -> Scalar {
45    (2.14234 * y.powi(3) - 4.22785 * y.powi(2) + 3.0 * y)
46        / (1.0 - y)
47        / (0.71716 * y.powi(3) - 0.41103 * y.powi(2) - 0.39165 * y + 1.0)
48}
49
50/// Returns the Lambert W function.
51///
52/// ```math
53/// y = W_0(x)
54/// ```
55pub fn lambert_w(x: Scalar) -> Scalar {
56    if x == -1.0 / E {
57        -1.0
58    } else if x == 0.0 {
59        0.0
60    } else if x == E {
61        1.0
62    } else if x < -1.0 / E {
63        panic!()
64    } else {
65        let mut w = if x < 0.0 {
66            (E * x * (1.0 + (1.0 + E * x).sqrt()).ln()) / (1.0 + E * x + (1.0 + E * x).sqrt())
67        } else if x < E {
68            x / E
69        } else {
70            x.ln() - x.ln().ln()
71        };
72        let mut error = w * w.exp() - x;
73        while error.abs() >= ABS_TOL && (error / x).abs() >= REL_TOL {
74            w *= (1.0 + (x / w).ln()) / (1.0 + w);
75            error = w * w.exp() - x;
76        }
77        w
78    }
79}
80
81/// Returns the Langevin function.
82///
83/// ```math
84/// \mathcal{L}(x) = \coth(x) - x^{-1}
85/// ```
86pub fn langevin(x: Scalar) -> Scalar {
87    if x == 0.0 {
88        0.0
89    } else {
90        1.0 / x.tanh() - 1.0 / x
91    }
92}
93
94/// Returns the derivative of the Langevin function.
95///
96/// ```math
97/// \mathcal{L}'(x) = x^{-2} - \sinh^{-2}(x)
98/// ```
99pub fn langevin_derivative(x: Scalar) -> Scalar {
100    if x == 0.0 {
101        1.0 / 3.0
102    } else {
103        1.0 / x.powi(2) - 1.0 / x.sinh().powi(2)
104    }
105}
106
107/// Returns the Rosenbrock function.
108///
109/// ```math
110/// f(\mathbf{x}) = \sum_{i=1}^{N-1} \left[\left(a - x_i\right)^2 + b\left(x_{i+1} - x_i^2\right)^2\right]
111/// ```
112pub fn rosenbrock<T>(x: &T, a: Scalar, b: Scalar) -> Scalar
113where
114    T: Tensor<Item = Scalar>,
115{
116    x.iter()
117        .zip(x.iter().skip(1))
118        .map(|(x_i, x_ip1)| (a - x_i).powi(2) + b * (x_ip1 - x_i.powi(2)).powi(2))
119        .sum()
120}
121
122/// Returns the derivative of the Rosenbrock function.
123///
124/// ```math
125/// \frac{\partial f}{\partial x_i} = \begin{cases}
126/// &\!\!\!\!\!\!-2(a - x_i) - 4bx_i(x_{i+1} - x_i^2), & i=1\\
127/// 2b(x_i - x_{i-1}^2) &\!\!\!\!\!\!- 2(a - x_i) - 4bx_i(x_{i+1} - x_i^2), & 1<i<N\\
128/// 2b(x_i - x_{i-1}^2),&\!\!\!\!\!\! & i=N \end{cases}
129/// ```
130pub fn rosenbrock_derivative<T>(x: &T, a: Scalar, b: Scalar) -> T
131where
132    T: FromIterator<Scalar> + Tensor<Item = Scalar>,
133{
134    let n = x.iter().count();
135    x.iter()
136        .take(1)
137        .zip(x.iter().skip(1).take(1))
138        .map(|(x_i, x_ip1)| -2.0 * (a - x_i) - 4.0 * b * x_i * (x_ip1 - x_i.powi(2)))
139        .chain(
140            x.iter()
141                .zip(x.iter().skip(1).zip(x.iter().skip(2)))
142                .map(|(x_im1, (x_i, x_ip1))| {
143                    2.0 * b * (x_i - x_im1.powi(2))
144                        - 2.0 * (a - x_i)
145                        - 4.0 * b * x_i * (x_ip1 - x_i.powi(2))
146                })
147                .chain(
148                    x.iter()
149                        .skip(n - 2)
150                        .zip(x.iter().skip(n - 1))
151                        .map(|(x_im1, x_i)| 2.0 * b * (x_i - x_im1.powi(2))),
152                ),
153        )
154        .collect()
155}
156
157// /// Returns the second derivative of the Rosenbrock function.
158// ///
159// /// ```math
160// /// \frac{\partial^2f}{\partial x_i\partial x_j} = ?
161// /// ```
162// pub fn rosenbrock_second_derivative<T, U>(x: &T, a: Scalar, b: Scalar) -> U
163// where
164//     T: FromIterator<Scalar> + Tensor<Item = Scalar>,
165//     U: Tensor<Item = T>,
166// {
167//     todo!()
168// }
169
170/// Returns the hyperbolic sinc function.
171///
172/// ```math
173/// \mathrm{sinhc}(x) = \frac{\sinh(x)}{x}
174/// ```
175pub fn sinhc(x: Scalar) -> Scalar {
176    if x == 0.0 { 0.0 } else { x.sinh() / x }
177}
178
179/// Returns the error function.
180///
181/// ```math
182/// \mathrm{erf}(x) = \frac{2}{\sqrt{\pi}}\int_0^x e^{-t^2}\,dt
183/// ```
184pub fn erf(x: &f64) -> f64 {
185    1.0 - erfc(x)
186}
187
188/// Returns the complementary error function.
189///
190/// ```math
191/// \mathrm{erfc}(x) = 1 - \mathrm{erf}(x)
192/// ```
193pub fn erfc(x: &f64) -> f64 {
194    erfcx(x) / (x.powi(2)).exp()
195}
196
197fn erfcx(x: &f64) -> f64 {
198    if x >= &0.0 {
199        if x >= &50.0 {
200            if x > &5e7 {
201                0.564_189_583_547_756_3 / x
202            } else {
203                0.564_189_583_547_756_3 * (x.powi(2) * (x.powi(2) + 4.5) + 2.0)
204                    / (x * (x.powi(2) * (x.powi(2) + 5.0) + 3.75))
205            }
206        } else {
207            erfcx_helper(&(400.0 / (4.0 + x)))
208        }
209    } else if x < &-26.7 {
210        f64::MAX
211    } else if x < &-6.1 {
212        2.0 * (x.powi(2)).exp()
213    } else {
214        2.0 * (x.powi(2)).exp() - erfcx_helper(&(400.0 / (4.0 - x)))
215    }
216}
217
218pub fn erfcx_helper(x: &f64) -> f64 {
219    let xi = *x as u8;
220    match xi {
221        0_u8 => {
222            let t = 2.0 * x - 1.0;
223            7.087_803_245_410_644e-4
224                + (7.123_409_104_702_63e-4
225                    + (3.577_907_729_759_774_2e-6
226                        + (1.740_314_396_258_793_8e-8
227                            + (8.171_066_004_730_779e-11
228                                + (3.688_502_236_043_496e-13 + 1.591_703_855_111_111_2e-15 * t)
229                                    * t)
230                                * t)
231                            * t)
232                        * t)
233                    * t
234        }
235        1_u8 => {
236            let t = 2.0 * x - 3.0;
237            2.147_914_320_828_514_3e-3
238                + (7.268_640_236_737_999e-4
239                    + (3.684_317_543_093_899_4e-6
240                        + (1.807_184_127_214_92e-8
241                            + (8.549_644_929_604_033e-11
242                                + (3.885_203_751_853_429e-13 + 1.686_847_357_688_888_9e-15 * t)
243                                    * t)
244                                * t)
245                            * t)
246                        * t)
247                    * t
248        }
249        2_u8 => {
250            let t = 2.0 * x - 5.0;
251            3.616_525_593_563_017_5e-3
252                + (7.418_209_232_355_551e-4
253                    + (3.794_831_995_752_824e-6
254                        + (1.877_162_702_179_308_7e-8
255                            + (8.948_471_512_241_509e-11
256                                + (4.093_585_851_777_244e-13 + 1.787_206_146_488_889e-15 * t)
257                                    * t)
258                                * t)
259                            * t)
260                        * t)
261                    * t
262        }
263        3_u8 => {
264            let t = 2.0 * x - 7.0;
265            5.115_498_386_003_198e-3
266                + (7.572_284_073_479_166e-4
267                    + (3.909_642_572_673_57e-6
268                        + (1.950_416_870_430_047e-8
269                            + (9.368_750_306_317_9e-11
270                                + (4.314_392_595_907_966_5e-13
271                                    + 1.893_992_643_555_555_6e-15 * t)
272                                    * t)
273                                * t)
274                            * t)
275                        * t)
276                    * t
277        }
278        4_u8 => {
279            let t = 2.0 * x - 9.0;
280            6.645_751_317_267_305e-3
281                + (7.731_040_605_444_745e-4
282                    + (4.028_951_058_939_944e-6
283                        + (2.027_123_323_828_838_2e-8
284                            + (9.811_763_132_170_91e-11
285                                + (4.548_420_740_601_775e-13 + 2.007_635_221_333_333e-15 * t)
286                                    * t)
287                                * t)
288                            * t)
289                        * t)
290                    * t
291        }
292        5_u8 => {
293            let t = 2.0 * x - 11.0;
294            8.208_238_997_024_121e-3
295                + (7.894_662_961_188_171e-4
296                    + (4.152_970_155_262_265e-6
297                        + (2.107_469_334_454_465_7e-8
298                            + (1.027_887_410_858_731_8e-10
299                                + (4.796_520_139_061_334e-13 + 2.128_590_741_333_333_5e-15 * t)
300                                    * t)
301                                * t)
302                            * t)
303                        * t)
304                    * t
305        }
306        6_u8 => {
307            let t = 2.0 * x - 13.0;
308            9.803_953_727_535_219e-3
309                + (8.063_344_010_834_284e-4
310                    + (4.281_924_132_973_699e-6
311                        + (2.191_653_434_690_716_8e-8
312                            + (1.077_153_513_656_547_1e-10
313                                + (5.059_597_262_369_282e-13 + 2.257_346_268_444_444_6e-15 * t)
314                                    * t)
315                                * t)
316                            * t)
317                        * t)
318                    * t
319        }
320        7_u8 => {
321            let t = 2.0 * x - 15.0;
322            1.143_392_729_829_030_2e-2
323                + (8.237_285_838_319_657e-4
324                    + (4.416_049_531_176_544e-6
325                        + (2.279_886_142_621_198_7e-8
326                            + (1.129_129_174_587_924e-10
327                                + (5.338_618_936_581_688e-13 + 2.394_420_954_666_666_6e-15 * t)
328                                    * t)
329                                * t)
330                            * t)
331                        * t)
332                    * t
333        }
334        8_u8 => {
335            let t = 2.0 * x - 17.0;
336            1.309_923_287_881_465_4e-2
337                + (8.416_700_246_790_696e-4
338                    + (4.555_595_898_845_751e-6
339                        + (2.372_390_735_721_417_4e-8
340                            + (1.183_978_932_660_269_6e-10
341                                + (5.634_616_306_755_024e-13 + 2.540_367_964_444_444_6e-15 * t)
342                                    * t)
343                                * t)
344                            * t)
345                        * t)
346                    * t
347        }
348        9_u8 => {
349            let t = 2.0 * x - 19.0;
350            1.480_098_701_558_753_6e-2
351                + (8.601_809_294_634_594e-4
352                    + (4.700_826_584_881_687e-6
353                        + (2.469_404_076_019_731_5e-8
354                            + (1.241_877_976_875_229_8e-10
355                                + (5.948_689_037_032_026e-13 + 2.695_776_456_888_889e-15 * t)
356                                    * t)
357                                * t)
358                            * t)
359                        * t)
360                    * t
361        }
362        10_u8 => {
363            let t = 2.0 * x - 21.0;
364            1.654_035_173_939_407e-2
365                + (8.792_845_864_124_146e-4
366                    + (4.852_019_579_300_175e-6
367                        + (2.571_177_490_088_171e-8
368                            + (1.303_012_853_423_082_1e-10
369                                + (6.282_009_758_687_478e-13 + 2.861_273_735_111_111_2e-15 * t)
370                                    * t)
371                                * t)
372                            * t)
373                        * t)
374                    * t
375        }
376        11_u8 => {
377            let t = 2.0 * x - 23.0;
378            1.831_853_678_984_239_3e-2
379                + (8.990_054_264_789_172e-4
380                    + (5.009_468_408_955_337e-6
381                        + (2.677_977_707_421_807e-8
382                            + (1.367_582_218_630_461_6e-10
383                                + (6.635_828_774_535_271e-13 + 3.037_527_388_444_444_3e-15 * t)
384                                    * t)
385                                * t)
386                            * t)
387                        * t)
388                    * t
389        }
390        12_u8 => {
391            let t = 2.0 * x - 25.0;
392            2.013_680_196_421_427_7e-2
393                + (9.193_690_873_767_368e-4
394                    + (5.173_483_091_410_427_6e-6
395                        + (2.790_087_860_971_043_3e-8
396                            + (1.435_797_640_280_904e-10
397                                + (7.011_479_031_104_373e-13 + 3.225_247_6e-15 * t) * t)
398                                * t)
399                            * t)
400                        * t)
401                    * t
402        }
403        13_u8 => {
404            let t = 2.0 * x - 27.0;
405            2.199_645_959_828_274_2e-2
406                + (9.404_024_815_536_678e-4
407                    + (5.344_391_150_804_117e-6
408                        + (2.907_808_553_804_937_5e-8
409                            + (1.507_884_450_032_973e-10
410                                + (7.410_381_364_749_92e-13 + 3.425_189_232e-15 * t) * t)
411                                * t)
412                            * t)
413                        * t)
414                    * t
415        }
416        14_u8 => {
417            let t = 2.0 * x - 29.0;
418            2.389_887_718_722_632e-2
419                + (9.621_338_683_590_018e-4
420                    + (5.522_538_699_804_901_5e-6
421                        + (3.031_458_996_104_768_7e-8
422                            + (1.584_082_649_729_633_4e-10
423                                + (7.834_050_047_241_445e-13 + 3.638_155_356_444_444_5e-15 * t)
424                                    * t)
425                                * t)
426                            * t)
427                        * t)
428                    * t
429        }
430        15_u8 => {
431            let t = 2.0 * x - 31.0;
432            2.584_548_015_529_851_8e-2
433                + (9.845_929_306_782_012e-4
434                    + (5.708_291_592_005_185e-6
435                        + (3.161_378_216_916_483e-8
436                            + (1.664_647_874_552_963e-10
437                                + (8.284_098_592_878_54e-13 + 3.864_997_576_888_889e-15 * t) * t)
438                                * t)
439                            * t)
440                        * t)
441                    * t
442        }
443        16_u8 => {
444            let t = 2.0 * x - 33.0;
445            2.783_775_478_347_469_8e-2
446                + (1.007_810_856_325_689_2e-3
447                    + (5.902_036_649_379_221_6e-6
448                        + (3.297_926_355_324_652e-8
449                            + (1.749_852_415_926_845_7e-10
450                                + (8.762_245_912_484_253e-13 + 4.106_620_648_888_889e-15 * t)
451                                    * t)
452                                * t)
453                            * t)
454                        * t)
455                    * t
456        }
457        17_u8 => {
458            let t = 2.0 * x - 35.0;
459            2.987_725_130_489_930_8e-2
460                + (1.031_820_424_505_735e-3
461                    + (6.104_182_969_716_206e-6
462                        + (3.441_486_035_954_272e-8
463                            + (1.839_986_307_293_409e-10
464                                + (9.270_322_736_636_504e-13 + 4.363_984_405_333_333_5e-15 * t)
465                                    * t)
466                                * t)
467                            * t)
468                        * t)
469                    * t
470        }
471        18_u8 => {
472            let t = 2.0 * x - 37.0;
473            3.196_558_717_859_645e-2
474                + (1.056_656_097_671_657_4e-3
475                    + (6.315_163_319_241_458e-6
476                        + (3.592_463_833_952_192e-8
477                            + (1.935_358_475_878_117_3e-10
478                                + (9.810_278_385_988_926e-13 + 4.638_106_081_777_777_6e-15 * t)
479                                    * t)
480                                * t)
481                            * t)
482                        * t)
483                    * t
484        }
485        19_u8 => {
486            let t = 2.0 * x - 39.0;
487            3.410_445_055_258_834e-2
488                + (1.082_354_119_135_053_2e-3
489                    + (6.535_435_615_955_393e-6
490                        + (3.751_291_834_853_352_4e-8
491                            + (2.036_297_963_581_788_3e-10
492                                + (1.038_418_783_303_728_1e-12 + 4.930_062_526_222_222e-15 * t)
493                                    * t)
494                                * t)
495                            * t)
496                        * t)
497                    * t
498        }
499        20_u8 => {
500            let t = 2.0 * x - 41.0;
501            3.629_560_392_829_242_5e-2
502                + (1.108_952_616_799_526_9e-3
503                    + (6.765_484_509_551_836e-6
504                        + (3.918_429_294_991_359e-8
505                            + (2.143_155_220_213_377_5e-10
506                                + (1.099_425_910_664_673_2e-12 + 5.240_994_910_222_222e-15 * t)
507                                    * t)
508                                * t)
509                            * t)
510                        * t)
511                    * t
512        }
513        21_u8 => {
514            let t = 2.0 * x - 43.0;
515            3.854_088_803_884_051e-2
516                + (1.136_491_713_417_542e-3
517                    + (7.005_823_064_124_631e-6
518                        + (4.094_364_408_371_858_4e-8
519                            + (2.256_303_472_369_288_3e-10
520                                + (1.164_284_101_136_199_3e-12 + 5.572_109_287_111_111e-15 * t)
521                                    * t)
522                                * t)
523                            * t)
524                        * t)
525                    * t
526        }
527        22_u8 => {
528            let t = 2.0 * x - 45.0;
529            4.084_222_595_478_596e-2
530                + (1.165_013_643_794_567_5e-3
531                    + (7.256_994_550_234_3e-6
532                        + (4.279_616_186_185_504e-8
533                            + (2.376_140_171_100_502_3e-10
534                                + (1.233_243_117_238_155_7e-12 + 5.924_680_236_444_444e-15 * t)
535                                    * t)
536                                * t)
537                            * t)
538                        * t)
539                    * t
540        }
541        23_u8 => {
542            let t = 2.0 * x - 47.0;
543            4.320_162_743_154_022e-2
544                + (1.194_562_879_391_727_1e-3
545                    + (7.519_574_353_284_92e-6
546                        + (4.474_736_455_396_099e-8
547                            + (2.503_088_521_647_295e-10
548                                + (1.306_568_440_030_047_7e-12 + 6.300_053_285_333_334e-15 * t)
549                                    * t)
550                                * t)
551                            * t)
552                        * t)
553                    * t
554        }
555        24_u8 => {
556            let t = 2.0 * x - 49.0;
557            4.562_119_351_381_047e-2
558                + (1.225_186_260_806_753e-3
559                    + (7.794_172_005_555_192e-6
560                        + (4.680_311_983_095_446e-8
561                            + (2.637_599_098_397_842_6e-10
562                                + (1.384_542_137_097_712e-12 + 6.699_647_740_444_444_6e-15 * t)
563                                    * t)
564                                * t)
565                            * t)
566                        * t)
567                    * t
568        }
569        25_u8 => {
570            let t = 2.0 * x - 51.0;
571            4.810_312_141_329_986_5e-2
572                + (1.256_933_138_643_219_5e-3
573                    + (8.081_433_349_636_768e-6
574                        + (4.896_966_733_568_202e-8
575                            + (2.780_151_548_190_574_6e-10
576                                + (1.467_463_761_160_988_5e-12 + 7.124_958_935_111_111e-15 * t)
577                                    * t)
578                                * t)
579                            * t)
580                        * t)
581                    * t
582        }
583        26_u8 => {
584            let t = 2.0 * x - 53.0;
585            5.064_970_967_698_334e-2
586                + (1.289_855_523_309_905_5e-3
587                    + (8.382_042_841_456_88e-6
588                        + (5.125_364_265_255_184e-8
589                            + (2.931_256_384_967_550_7e-10
590                                + (1.555_651_278_281_482_7e-12 + 7.577_560_782_222_223e-15 * t)
591                                    * t)
592                                * t)
593                            * t)
594                        * t)
595                    * t
596        }
597        27_u8 => {
598            let t = 2.0 * x - 55.0;
599            5.326_336_366_438_886_4e-2
600                + (1.324_008_244_325_697_5e-3
601                    + (8.696_726_001_500_767e-6
602                        + (5.366_210_275_039_68e-8
603                            + (3.091_456_878_663_48e-10
604                                + (1.649_442_024_082_849_4e-12 + 8.059_107_964_444_444e-15 * t)
605                                    * t)
606                                * t)
607                            * t)
608                        * t)
609                    * t
610        }
611        28_u8 => {
612            let t = 2.0 * x - 57.0;
613            5.594_660_135_350_001e-2
614                + (1.359_449_119_740_819e-3
615                    + (9.026_252_023_301_638e-6
616                        + (5.620_255_297_505_669_6e-8
617                            + (3.261_331_041_050_314e-10
618                                + (1.749_193_686_224_636_8e-12 + 8.571_338_168_888_888e-15 * t)
619                                    * t)
620                                * t)
621                            * t)
622                        * t)
623                    * t
624        }
625        29_u8 => {
626            let t = 2.0 * x - 59.0;
627            5.870_205_949_615_408_4e-2
628                + (1.396_239_136_322_364_7e-3
629                    + (9.371_436_548_731_279e-6
630                        + (5.888_297_567_026_528_5e-8
631                            + (3.441_493_711_059_175_6e-10
632                                + (1.855_285_310_975_186e-12 + 9.116_073_671_111_11e-15 * t) * t)
633                                * t)
634                            * t)
635                        * t)
636                    * t
637        }
638        30_u8 => {
639            let t = 2.0 * x - 61.0;
640            6.153_250_014_514_477_5e-2
641                + (1.434_442_641_191_201_4e-3
642                    + (9.733_144_620_101_681e-6
643                        + (6.171_186_050_734_718e-8
644                            + (3.632_598_741_829_53e-10
645                                + (1.968_118_331_013_451_7e-12 + 9.695_223_84e-15 * t) * t)
646                                * t)
647                            * t)
648                        * t)
649                    * t
650        }
651        31_u8 => {
652            let t = 2.0 * x - 63.0;
653            6.444_081_757_665_329e-2
654                + (1.474_127_545_638_313_2e-3
655                    + (1.011_229_381_957_643_8e-5
656                        + (6.469_823_660_593_325e-8
657                            + (3.835_341_291_530_366_5e-10
658                                + (2.088_117_611_438_512e-12 + 1.031_078_448e-14 * t) * t)
659                                * t)
660                            * t)
661                        * t)
662                    * t
663        }
664        32_u8 => {
665            let t = 2.0 * x - 65.0;
666            6.743_004_563_313_039e-2
667                + (1.515_365_541_891_654e-3
668                    + (1.050_985_760_688_832_9e-5
669                        + (6.785_170_652_936_334e-8
670                            + (4.050_460_219_481_114e-10
671                                + (2.215_732_511_054_253_6e-12
672                                    + 1.096_484_211_555_555_5e-14 * t)
673                                    * t)
674                                * t)
675                            * t)
676                        * t)
677                    * t
678        }
679        33_u8 => {
680            let t = 2.0 * x - 67.0;
681            7.050_336_551_333_886e-2
682                + (1.558_232_333_649_571e-3
683                    + (1.092_686_886_686_523e-5
684                        + (7.118_248_223_961_351e-8
685                            + (4.278_740_589_015_338_6e-10
686                                + (2.351_437_952_227_442e-12 + 1.165_957_175_111_111_1e-14 * t)
687                                    * t)
688                                * t)
689                            * t)
690                        * t)
691                    * t
692        }
693        34_u8 => {
694            let t = 2.0 * x - 69.0;
695            7.366_411_403_794_46e-2
696                + (1.602_807_881_243_882e-3
697                    + (1.136_442_367_877_820_8e-5
698                        + (7.470_142_309_742_318e-8
699                            + (4.521_016_277_747_649e-10
700                                + (2.495_735_500_408_857e-12 + 1.239_723_825_777_777_7e-14 * t)
701                                    * t)
702                                * t)
703                            * t)
704                        * t)
705                    * t
706        }
707        35_u8 => {
708            let t = 2.0 * x - 71.0;
709            7.691_579_242_081_956e-2
710                + (1.649_176_662_344_788_9e-3
711                    + (1.182_368_532_004_130_1e-5
712                        + (7.842_007_599_378_154e-8
713                            + (4.778_172_695_691_648e-10
714                                + (2.649_154_440_381_572_5e-12
715                                    + 1.318_019_646_222_222_2e-14 * t)
716                                    * t)
717                                * t)
718                            * t)
719                        * t)
720                    * t
721        }
722        36_u8 => {
723            let t = 2.0 * x - 73.0;
724            8.026_207_557_809_462e-2
725                + (1.697_427_949_170_950_4e-3
726                    + (1.230_588_851_730_989_1e-5
727                        + (8.235_071_769_897_904e-8
728                            + (5.051_149_610_985_711e-10
729                                + (2.812_252_849_762_69e-12 + 1.401_088_963_555_555_5e-14 * t)
730                                    * t)
731                                * t)
732                            * t)
733                        * t)
734                    * t
735        }
736        37_u8 => {
737            let t = 2.0 * x - 75.0;
738            8.370_682_200_898_036e-2
739                + (1.747_656_103_221_265_7e-3
740                    + (1.281_234_395_854_076_4e-5
741                        + (8.650_639_951_503_644e-8
742                            + (5.340_944_082_386_946e-10
743                                + (2.985_618_662_088_755_5e-12 + 1.489_185_159_111_111e-14 * t)
744                                    * t)
745                                * t)
746                            * t)
747                        * t)
748                    * t
749        }
750        38_u8 => {
751            let t = 2.0 * x - 77.0;
752            8.725_408_428_446_171e-2
753                + (1.799_960_888_600_196_2e-3
754                    + (1.334_444_308_008_949_3e-5
755                        + (9.090_099_431_642_9e-8
756                            + (5.648_613_497_261_646e-10
757                                + (3.169_870_708_003_396e-12 + 1.582_569_779_555_555_6e-14 * t)
758                                    * t)
759                                * t)
760                            * t)
761                        * t)
762                    * t
763        }
764        39_u8 => {
765            let t = 2.0 * x - 79.0;
766            9.090_812_018_217_274e-2
767                + (1.854_447_805_065_77e-3
768                    + (1.390_366_314_342_612e-5
769                        + (9.554_924_606_254_991e-8
770                            + (5.975_278_712_524_205e-10
771                                + (3.365_659_736_609_91e-12 + 1.681_513_061_333_333_4e-14 * t)
772                                    * t)
773                                * t)
774                            * t)
775                        * t)
776                    * t
777        }
778        40_u8 => {
779            let t = 2.0 * x - 81.0;
780            9.467_340_450_807_549e-2
781                + (1.911_228_441_988_730_4e-3
782                    + (1.449_157_261_654_500_5e-5
783                        + (1.004_668_218_633_361_4e-7
784                            + (6.322_127_295_979_1e-10
785                                + (3.573_669_397_558_913e-12 + 1.786_293_159_111_111e-14 * t)
786                                    * t)
787                                * t)
788                            * t)
789                        * t)
790                    * t
791        }
792        41_u8 => {
793            let t = 2.0 * x - 83.0;
794            9.855_464_164_800_445e-2
795                + (1.970_420_854_472_562_2e-3
796                    + (1.510_983_687_562_544_5e-5
797                        + (1.056_703_666_767_598_4e-7
798                            + (6.690_416_864_001_935e-10
799                                + (3.794_617_185_082_434e-12 + 1.897_195_904e-14 * t) * t)
800                                * t)
801                            * t)
802                        * t)
803                    * t
804        }
805        42_u8 => {
806            let t = 2.0 * x - 85.0;
807            1.025_567_788_947_009e-1
808                + (2.032_149_962_947_285_7e-3
809                    + (1.576_022_424_296_218e-5
810                        + (1.111_775_607_135_350_7e-7
811                            + (7.081_478_511_009_766e-10
812                                + (4.029_255_327_663_256e-12 + 2.014_514_307_555_555_6e-14 * t)
813                                    * t)
814                                * t)
815                            * t)
816                        * t)
817                    * t
818        }
819        43_u8 => {
820            let t = 2.0 * x - 87.0;
821            1.066_850_205_986_509_4e-1
822                + (2.096_547_977_614_873e-3
823                    + (1.644_461_237_762_498_2e-5
824                        + (1.170_071_796_202_615_3e-7
825                            + (7.496_720_325_093_842e-10
826                                + (4.278_371_618_608_592_5e-12 + 2.138_547_936e-14 * t) * t)
827                                * t)
828                            * t)
829                        * t)
830                    * t
831        }
832        44_u8 => {
833            let t = 2.0 * x - 89.0;
834            1.109_448_431_938_644_4e-1
835                + (2.163_754_849_190_817e-3
836                    + (1.716_499_503_571_965_6e-5
837                        + (1.231_791_575_073_593_8e-7
838                            + (7.937_630_983_149_963e-10
839                                + (4.542_790_176_310_636e-12 + 2.269_602_565_333_333_3e-14 * t)
840                                    * t)
841                                * t)
842                            * t)
843                        * t)
844                    * t
845        }
846        45_u8 => {
847            let t = 2.0 * x - 91.0;
848            1.153_420_111_526_880_5e-1
849                + (2.233_918_747_454_642e-3
850                    + (1.792_348_921_750_422_6e-5
851                        + (1.297_146_528_824_599_7e-7
852                            + (8.405_783_418_038_907e-10
853                                + (4.823_372_120_641_802_5e-12
854                                    + 2.407_989_006_222_222_2e-14 * t)
855                                    * t)
856                                * t)
857                            * t)
858                        * t)
859                    * t
860        }
861        46_u8 => {
862            let t = 2.0 * x - 93.0;
863            1.198_825_939_268_409_5e-1
864                + (2.307_196_569_191_869e-3
865                    + (1.872_234_271_895_893_7e-5
866                        + (1.366_361_175_433_795_8e-7
867                            + (8.902_838_548_849_328e-10
868                                + (5.121_016_156_922_585e-12 + 2.554_022_711_111_111e-14 * t)
869                                    * t)
870                                * t)
871                            * t)
872                        * t)
873                    * t
874        }
875        47_u8 => {
876            let t = 2.0 * x - 95.0;
877            1.245_729_839_350_981_2e-1
878                + (2.383_754_477_180_957_6e-3
879                    + (1.956_394_210_571_161e-5
880                        + (1.439_673_684_773_947e-7
881                            + (9.430_549_064_645_925e-10
882                                + (5.436_659_058_313_422e-12 + 2.708_022_592e-14 * t) * t)
883                                * t)
884                            * t)
885                        * t)
886                    * t
887        }
888        48_u8 => {
889            let t = 2.0 * x - 97.0;
890            1.294_199_156_614_243_8e-1
891                + (2.463_768_471_950_886e-3
892                    + (2.045_082_112_747_588e-5
893                        + (1.517_336_628_052_390_6e-7
894                            + (9.990_763_250_638_903e-10
895                                + (5.771_276_031_135_163e-12 + 2.870_309_955_555_555_5e-14 * t)
896                                    * t)
897                                * t)
898                            * t)
899                        * t)
900                    * t
901        }
902        49_u8 => {
903            let t = 2.0 * x - 99.0;
904            1.344_304_859_308_869_7e-1
905                + (2.547_424_998_108_082_3e-3
906                    + (2.138_566_959_136_291_6e-5
907                        + (1.599_617_757_990_044_2e-7
908                            + (1.058_542_884_457_513_3e-9
909                                + (6.125_880_953_678_788e-12 + 3.041_208_014_222_222e-14 * t)
910                                    * t)
911                                * t)
912                            * t)
913                        * t)
914                    * t
915        }
916        50_u8 => {
917            let t = 2.0 * x - 101.0;
918            1.396_121_754_343_456_2e-1
919                + (2.634_921_587_105_176_2e-3
920                    + (2.237_134_271_257_256_8e-5
921                        + (1.686_800_819_929_682_3e-7
922                            + (1.121_659_691_044_499_7e-9
923                                + (6.501_526_475_309_089e-12 + 3.221_039_450_666_667e-14 * t)
924                                    * t)
925                                * t)
926                            * t)
927                        * t)
928                    * t
929        }
930        51_u8 => {
931            let t = 2.0 * x - 103.0;
932            1.449_728_715_767_38e-1
933                + (2.726_467_538_398_244e-3
934                    + (2.341_087_096_105_095e-5
935                        + (1.779_186_393_952_637_8e-7
936                            + (1.188_642_571_433_095_8e-9
937                                + (6.899_303_966_505_428_4e-12
938                                    + 3.410_126_622_222_222_5e-14 * t)
939                                    * t)
940                                * t)
941                            * t)
942                        * t)
943                    * t
944        }
945        52_u8 => {
946            let t = 2.0 * x - 105.0;
947            1.505_208_927_277_461_9e-1
948                + (2.822_284_641_013_623_7e-3
949                    + (2.450_747_042_271_339_8e-5
950                        + (1.877_092_767_962_613_7e-7
951                            + (1.259_718_458_758_337e-9
952                                + (7.320_343_304_922_983e-12 + 3.608_788_904_888_888_7e-14 * t)
953                                    * t)
954                                * t)
955                            * t)
956                        * t)
957                    * t
958        }
959        53_u8 => {
960            let t = 2.0 * x - 107.0;
961            1.562_650_139_577_461e-1
962                + (2.922_607_937_619_662_7e-3
963                    + (2.566_455_369_376_845e-5
964                        + (1.980_856_841_565_446_2e-7
965                            + (1.335_125_775_981_555_7e-9
966                                + (7.765_812_489_104_676e-12 + 3.817_342_003_555_556e-14 * t)
967                                    * t)
968                                * t)
969                            * t)
970                        * t)
971                    * t
972        }
973        54_u8 => {
974            let t = 2.0 * x - 109.0;
975            1.622_144_943_462_073_8e-1
976                + (3.027_686_533_272_647_7e-3
977                    + (2.688_574_132_653_456_3e-5
978                        + (2.090_835_060_434_638_3e-7
979                            + (1.415_114_814_424_073e-9
980                                + (8.236_917_066_597_432e-12 + 4.036_095_745_777_778e-14 * t)
981                                    * t)
982                                * t)
983                            * t)
984                        * t)
985                    * t
986        }
987        55_u8 => {
988            let t = 2.0 * x - 111.0;
989            1.683_791_059_541_213e-1
990                + (3.137_784_451_079_308_3e-3
991                    + (2.817_487_384_491_117_3e-5
992                        + (2.207_404_380_704_578_2e-7
993                            + (1.499_948_105_599_609e-9
994                                + (8.734_899_366_193_081e-12 + 4.265_352_897_777_778e-14 * t)
995                                    * t)
996                                * t)
997                            * t)
998                        * t)
999                    * t
1000        }
1001        56_u8 => {
1002            let t = 2.0 * x - 113.0;
1003            1.747_691_645_565_937e-1
1004                + (3.253_181_537_090_306_6e-3
1005                    + (2.953_602_434_734_436_5e-5
1006                        + (2.330_963_262_776_707_4e-7
1007                            + (1.589_900_784_358_244_5e-9
1008                                + (9.261_037_523_542_736e-12 + 4.505_407_310_222_222_4e-14 * t)
1009                                    * t)
1010                                * t)
1011                            * t)
1012                        * t)
1013                    * t
1014        }
1015        57_u8 => {
1016            let t = 2.0 * x - 115.0;
1017            1.813_955_622_364_370_2e-1
1018                + (3.374_174_416_809_7e-3
1019                    + (3.097_351_171_470_95e-5
1020                        + (2.461_932_693_759_229e-7
1021                            + (1.685_260_941_226_775_1e-9
1022                                + (9.816_644_294_285_49e-12 + 4.756_541_809_777_778e-14 * t) * t)
1023                                * t)
1024                            * t)
1025                        * t)
1026                    * t
1027        }
1028        58_u8 => {
1029            let t = 2.0 * x - 117.0;
1030            1.882_698_019_444_366_5e-1
1031                + (3.501_077_505_774_031_6e-3
1032                    + (3.249_191_444_001_427e-5
1033                        + (2.600_757_237_588_632e-7
1034                            + (1.786_329_961_738_837_7e-9
1035                                + (1.040_306_563_834_387_8e-11 + 5.019_026_583_111_111e-14 * t)
1036                                    * t)
1037                                * t)
1038                            * t)
1039                        * t)
1040                    * t
1041        }
1042        59_u8 => {
1043            let t = 2.0 * x - 119.0;
1044            1.954_040_341_369_396_9e-1
1045                + (3.634_224_076_721_132_6e-3
1046                    + (3.409_608_509_620_090_6e-5
1047                        + (2.747_906_111_701_763_6e-7
1048                            + (1.893_422_850_479_003_3e-9
1049                                + (1.102_167_907_532_359_9e-11 + 5.293_117_173_333_333e-14 * t)
1050                                    * t)
1051                                * t)
1052                            * t)
1053                        * t)
1054                    * t
1055        }
1056        60_u8 => {
1057            let t = 2.0 * x - 121.0;
1058            2.028_110_956_065_188_6e-1
1059                + (3.773_967_385_932_36e-3
1060                    + (3.579_116_545_759_241e-5
1061                        + (2.903_874_288_941_617_4e-7
1062                            + (2.006_868_537_484_9e-9
1063                                + (1.167_389_179_957_838_1e-11
1064                                    + 5.579_052_309_333_333_5e-14 * t)
1065                                    * t)
1066                                * t)
1067                            * t)
1068                        * t)
1069                    * t
1070        }
1071        61_u8 => {
1072            let t = 2.0 * x - 123.0;
1073            2.105_045_506_266_933_5e-1
1074                + (3.920_681_861_392_565e-3
1075                    + (3.758_260_228_968_010_5e-5
1076                        + (3.069_183_623_188_687_7e-7
1077                            + (2.127_010_164_576_367_6e-9
1078                                + (1.236_113_855_106_289_9e-11 + 5.877_052_016e-14 * t) * t)
1079                                * t)
1080                            * t)
1081                        * t)
1082                    * t
1083        }
1084        62_u8 => {
1085            let t = 2.0 * x - 125.0;
1086            2.184_987_345_370_333_3e-1
1087                + (4.074_764_355_468_959e-3
1088                    + (3.947_616_382_098_671e-5
1089                        + (3.244_383_997_013_992e-7
1090                            + (2.254_205_349_151_868e-9
1091                                + (1.308_487_923_529_085_9e-11 + 6.187_315_326_222_222e-14 * t)
1092                                    * t)
1093                                * t)
1094                            * t)
1095                        * t)
1096                    * t
1097        }
1098        63_u8 => {
1099            let t = 2.0 * x - 127.0;
1100            2.268_087_999_004_323e-1
1101                + (4.236_635_464_862_852e-3
1102                    + (4.147_795_690_965_689_6e-5
1103                        + (3.430_054_489_450_281e-7
1104                            + (2.388_826_422_926_406_7e-9
1105                                + (1.384_659_629_281_851_4e-11 + 6.510_018_375_111_112e-14 * t)
1106                                    * t)
1107                                * t)
1108                            * t)
1109                        * t)
1110                    * t
1111        }
1112        64_u8 => {
1113            let t = 2.0 * x - 129.0;
1114            2.354_507_653_698_870_4e-1
1115                + (4.406_740_920_636_517e-3
1116                    + (4.359_444_491_622_47e-5
1117                        + (3.626_804_561_776_041_5e-7
1118                            + (2.531_260_643_085_32e-9
1119                                + (1.464_779_181_283_790_2e-11 + 6.845_312_263_111_111e-14 * t)
1120                                    * t)
1121                                * t)
1122                            * t)
1123                        * t)
1124                    * t
1125        }
1126        65_u8 => {
1127            let t = 2.0 * x - 131.0;
1128            2.444_415_674_077_743_4e-1
1129                + (4.585_553_051_160_578e-3
1130                    + (4.583_246_629_268_308_6e-5
1131                        + (3.835_275_259_003_303e-7
1132                            + (2.681_910_373_305_560_2e-9
1133                                + (1.548_998_439_088_475_8e-11 + 7.193_320_636_444_444e-14 * t)
1134                                    * t)
1135                                * t)
1136                            * t)
1137                        * t)
1138                    * t
1139        }
1140        66_u8 => {
1141            let t = 2.0 * x - 133.0;
1142            2.537_991_150_063_426_7e-1
1143                + (4.773_572_320_865_003e-3
1144                    + (4.819_925_389_653_418_5e-5
1145                        + (4.056_140_424_556_473_3e-7
1146                            + (2.841_193_232_087_116_4e-9
1147                                + (1.637_470_573_645_832e-11 + 7.554_137_982_222_222e-14 * t)
1148                                    * t)
1149                                * t)
1150                            * t)
1151                        * t)
1152                    * t
1153        }
1154        67_u8 => {
1155            let t = 2.0 * x - 135.0;
1156            2.635_423_475_639_361_3e-1
1157                + (4.971_328_947_708_378_5e-3
1158                    + (5.070_245_503_693_037e-5
1159                        + (4.290_107_925_426_818_5e-7
1160                            + (3.009_542_205_890_048e-9
1161                                + (1.730_349_702_534_734e-11 + 7.927_827_336_888_888e-14 * t)
1162                                    * t)
1163                                * t)
1164                            * t)
1165                        * t)
1166                    * t
1167        }
1168        68_u8 => {
1169            let t = 2.0 * x - 137.0;
1170            2.736_912_960_773_234_5e-1
1171                + (5.179_384_602_305_264e-3
1172                    + (5.335_015_225_832_66e-5
1173                        + (4.537_920_884_886_502e-7
1174                            + (3.187_405_724_581_438e-9
1175                                + (1.827_790_501_024_511e-11 + 8.314_418_236_444_444e-14 * t)
1176                                    * t)
1177                                * t)
1178                            * t)
1179                        * t)
1180                    * t
1181        }
1182        69_u8 => {
1183            let t = 2.0 * x - 139.0;
1184            2.842_671_478_164_031_7e-1
1185                + (5.398_334_191_669_514e-3
1186                    + (5.615_088_486_525_581e-5
1187                        + (4.800_358_919_649_474e-7
1188                            + (3.375_247_696_757_079_8e-9
1189                                + (1.929_947_788_808_346_8e-11 + 8.713_904_913_777_777e-14 * t)
1190                                    * t)
1191                                * t)
1192                            * t)
1193                        * t)
1194                    * t
1195        }
1196        70_u8 => {
1197            let t = 2.0 * x - 141.0;
1198            2.952_923_146_534_852e-1
1199                + (5.628_807_730_542_079_5e-3
1200                    + (5.911_367_118_991_331e-5
1201                        + (5.078_239_378_174_484e-7
1202                            + (3.573_547_502_585_171_4e-9
1203                                + (2.036_976_093_701_707e-11 + 9.126_244_261_333_333e-14 * t)
1204                                    * t)
1205                                * t)
1206                            * t)
1207                        * t)
1208                    * t
1209        }
1210        71_u8 => {
1211            let t = 2.0 * x - 143.0;
1212            3.067_905_052_252_884e-1
1213                + (5.871_472_303_274_54e-3
1214                    + (6.224_803_160_219_768e-5
1215                        + (5.372_418_576_620_094e-7
1216                            + (3.782_799_941_896_024e-9
1217                                + (2.149_029_193_044_454e-11 + 9.551_353_918_222_223e-14 * t)
1218                                    * t)
1219                                * t)
1220                            * t)
1221                        * t)
1222                    * t
1223        }
1224        72_u8 => {
1225            let t = 2.0 * x - 145.0;
1226            3.187_868_011_117_332e-1
1227                + (6.127_034_119_233_91e-3
1228                    + (6.556_401_225_970_764e-5
1229                        + (5.683_793_028_783_774e-7
1230                            + (4.003_515_135_339_238e-9
1231                                + (2.266_259_634_123_929_5e-11 + 9.989_110_976e-14 * t) * t)
1232                                * t)
1233                            * t)
1234                        * t)
1235                    * t
1236        }
1237        73_u8 => {
1238            let t = 2.0 * x - 147.0;
1239            3.313_077_372_215_262_3e-1
1240                + (6.396_240_664_679_808e-3
1241                    + (6.907_220_959_294_24e-5
1242                        + (6.013_300_666_188_594e-7
1243                            + (4.236_218_376_588_347e-9
1244                                + (2.388_818_234_707_369_7e-11
1245                                    + 1.043_934_981_155_555_5e-13 * t)
1246                                    * t)
1247                                * t)
1248                            * t)
1249                        * t)
1250                    * t
1251        }
1252        74_u8 => {
1253            let t = 2.0 * x - 149.0;
1254            3.443_813_865_804_133_4e-1
1255                + (6.679_882_954_041_4e-3
1256                    + (7.278_379_551_860_356e-5
1257                        + (6.361_922_044_322_88e-7
1258                            + (4.481_449_933_651_445e-9
1259                                + (2.516_853_565_128_547_6e-11
1260                                    + 1.090_186_138_311_111_1e-13 * t)
1261                                    * t)
1262                                * t)
1263                            * t)
1264                        * t)
1265                    * t
1266        }
1267        75_u8 => {
1268            let t = 2.0 * x - 151.0;
1269            3.580_374_497_238_017_5e-1
1270                + (6.978_797_883_488_269e-3
1271                    + (7.671_054_337_145_482e-5
1272                        + (6.730_681_530_891_739e-7
1273                            + (4.739_764_797_584_523e-9
1274                                + (2.650_511_414_114_305e-11 + 1.137_639_093_333_333_2e-13 * t)
1275                                    * t)
1276                                * t)
1277                            * t)
1278                        * t)
1279                    * t
1280        }
1281        76_u8 => {
1282            let t = 2.0 * x - 153.0;
1283            3.723_073_489_011_972_7e-1
1284                + (7.293_870_689_646_138e-3
1285                    + (8.086_485_454_267_072e-5
1286                        + (7.120_648_471_806_269e-7
1287                            + (5.011_732_376_974_588_4e-9
1288                                + (2.789_934_239_410_007_3e-11
1289                                    + 1.186_263_761_422_222_2e-13 * t)
1290                                    * t)
1291                                * t)
1292                            * t)
1293                        * t)
1294                    * t
1295        }
1296        77_u8 => {
1297            let t = 2.0 * x - 155.0;
1298            3.872_243_273_055_545e-1
1299                + (7.626_037_516_254_98e-3
1300                    + (8.525_978_581_000_461e-5
1301                        + (7.532_938_330_517_133e-7
1302                            + (5.297_936_136_838_812e-9
1303                                + (2.935_260_605_416_409e-11 + 1.236_025_337_066_666_6e-13 * t)
1304                                    * t)
1305                                * t)
1306                            * t)
1307                        * t)
1308                    * t
1309        }
1310        78_u8 => {
1311            let t = 2.0 * x - 157.0;
1312            4.028_235_535_461_694e-1
1313                + (7.976_288_091_502_973e-3
1314                    + (8.990_907_734_243_825e-5
1315                        + (7.968_713_796_195_619e-7
1316                            + (5.598_973_180_736_040_5e-9
1317                                + (3.086_624_610_146_486_6e-11
1318                                    + 1.286_884_194_666_666_8e-13 * t)
1319                                    * t)
1320                                * t)
1321                            * t)
1322                        * t)
1323                    * t
1324        }
1325        79_u8 => {
1326            let t = 2.0 * x - 159.0;
1327            4.191_422_315_891_379e-1
1328                + (8.345_668_518_695_046e-3
1329                    + (9.482_718_135_925_016e-5
1330                        + (8.429_185_856_178_314e-7
1331                            + (5.915_453_775_108_349e-9
1332                                + (3.244_155_303_434_747e-11 + 1.338_795_794_311_111e-13 * t)
1333                                    * t)
1334                                * t)
1335                            * t)
1336                        * t)
1337                    * t
1338        }
1339        80_u8 => {
1340            let t = 2.0 * x - 161.0;
1341            4.362_197_163_946_378_6e-1
1342                + (8.735_284_182_828_95e-3
1343                    + (1.000_292_914_206_68e-4
1344                        + (8.915_614_828_021_988e-7
1345                            + (6.248_000_815_078_86e-9
1346                                + (3.407_976_098_345_888e-11 + 1.391_710_717_688_888_8e-13 * t)
1347                                    * t)
1348                                * t)
1349                            * t)
1350                        * t)
1351                    * t
1352        }
1353        81_u8 => {
1354            let t = 2.0 * x - 163.0;
1355            4.540_976_354_853_433e-1
1356                + (9.146_302_775_554_824e-3
1357                    + (1.055_313_723_244_616_7e-4
1358                        + (9.429_311_346_463_863e-7
1359                            + (6.597_249_231_221_996e-9
1360                                + (3.578_204_179_547_656_4e-11 + 1.445_574_587_2e-13 * t) * t)
1361                                * t)
1362                            * t)
1363                        * t)
1364                    * t
1365        }
1366        82_u8 => {
1367            let t = 2.0 * x - 165.0;
1368            4.728_200_166_851_233e-1
1369                + (9.579_957_440_886_046e-3
1370                    + (1.113_501_905_800_006_7e-4
1371                        + (9.971_637_300_550_903e-7
1372                            + (6.963_845_336_995_697e-9
1373                                + (3.754_949_908_816_134_6e-11 + 1.500_328_071_288_889e-13 * t)
1374                                    * t)
1375                                * t)
1376                            * t)
1377                        * t)
1378                    * t
1379        }
1380        83_u8 => {
1381            let t = 2.0 * x - 167.0;
1382            4.924_334_222_717_984e-1
1383                + (1.003_755_004_390_949_7e-2
1384                    + (1.175_033_454_284_523_5e-4
1385                        + (1.054_400_671_618_896_7e-6
1386                            + (7.348_446_116_824_222e-9
1387                                + (3.938_316_232_643_575e-11 + 1.555_906_911_822_222_3e-13 * t)
1388                                    * t)
1389                                * t)
1390                            * t)
1391                        * t)
1392                    * t
1393        }
1394        84_u8 => {
1395            let t = 2.0 * x - 169.0;
1396            5.129_870_897_920_926e-1
1397                + (1.052_045_456_461_242_7e-2
1398                    + (1.240_093_003_749_499_7e-4
1399                        + (1.114_788_657_937_126_5e-6
1400                            + (7.751_718_455_056_87e-9
1401                                + (4.128_398_093_187_262_5e-11 + 1.612_241_968e-13 * t) * t)
1402                                * t)
1403                            * t)
1404                        * t)
1405                    * t
1406        }
1407        85_u8 => {
1408            let t = 2.0 * x - 171.0;
1409            5.345_330_797_910_137e-1
1410                + (1.103_012_061_880_072_7e-2
1411                    + (1.308_874_151_957_227e-4
1412                        + (1.178_479_759_537_451_5e-6
1413                            + (8.174_338_306_304_482e-9
1414                                + (4.325_281_844_951_708_4e-11 + 1.669_259_264e-13 * t) * t)
1415                                * t)
1416                            * t)
1417                        * t)
1418                    * t
1419        }
1420        86_u8 => {
1421            let t = 2.0 * x - 173.0;
1422            5.571_264_307_116_93e-1
1423                + (1.156_807_710_792_973_6e-2
1424                    + (1.381_579_783_803_665_2e-4
1425                        + (1.245_631_487_926_090_5e-6
1426                            + (8.616_989_807_896_932e-9
1427                                + (4.529_044_681_153_965e-11 + 1.726_880_108_444_444_3e-13 * t)
1428                                    * t)
1429                                * t)
1430                            * t)
1431                        * t)
1432                    * t
1433        }
1434        87_u8 => {
1435            let t = 2.0 * x - 175.0;
1436            5.808_253_212_251_933e-1
1437                + (1.213_593_599_950_387_8e-2
1438                    + (1.458_422_399_666_584e-4
1439                        + (1.316_406_857_309_571e-6
1440                            + (9.080_364_335_510_602e-9
1441                                + (4.739_754_071_312_462e-11 + 1.785_021_160_888_889e-13 * t)
1442                                    * t)
1443                                * t)
1444                            * t)
1445                        * t)
1446                    * t
1447        }
1448        88_u8 => {
1449            let t = 2.0 * x - 177.0;
1450            6.056_912_402_529_337e-1
1451                + (1.273_539_623_952_555e-2
1452                    + (1.539_624_447_225_886_4e-4
1453                        + (1.390_974_438_538_281_7e-6
1454                            + (9.565_159_503_230_623e-9
1455                                + (4.957_467_212_766_904e-11 + 1.843_594_556_444_444_4e-13 * t)
1456                                    * t)
1457                                * t)
1458                            * t)
1459                        * t)
1460                    * t
1461        }
1462        89_u8 => {
1463            let t = 2.0 * x - 179.0;
1464            6.317_891_649_471_572e-1
1465                + (1.336_824_779_828_703_2e-2
1466                    + (1.625_418_656_276_207_6e-4
1467                        + (1.469_508_404_833_405_5e-6
1468                            + (1.007_207_810_960_415_2e-8
1469                                + (5.182_230_499_568_071e-11 + 1.902_508_142_222_222_3e-13 * t)
1470                                    * t)
1471                                * t)
1472                            * t)
1473                        * t)
1474                    * t
1475        }
1476        90_u8 => {
1477            let t = 2.0 * x - 181.0;
1478            6.591_877_468_972_532e-1
1479                + (1.403_637_585_060_199_2e-2
1480                    + (1.716_048_376_025_970_7e-4
1481                        + (1.552_188_568_872_318_8e-6
1482                            + (1.060_182_703_153_528e-8
1483                                + (5.414_079_010_583_752e-11 + 1.961_665_514_666_666_7e-13 * t)
1484                                    * t)
1485                                * t)
1486                            * t)
1487                        * t)
1488                    * t
1489        }
1490        91_u8 => {
1491            let t = 2.0 * x - 183.0;
1492            6.879_595_068_317_443e-1
1493                + (1.474_176_509_136_586_8e-2
1494                    + (1.811_767_914_352_043_3e-4
1495                        + (1.639_200_410_823_058_4e-6
1496                            + (1.115_511_606_801_804_3e-8
1497                                + (5.653_036_019_492_569e-11 + 2.020_966_366_222_222_2e-13 * t)
1498                                    * t)
1499                                * t)
1500                            * t)
1501                        * t)
1502                    * t
1503        }
1504        92_u8 => {
1505            let t = 2.0 * x - 185.0;
1506            7.181_810_380_872_997e-1
1507                + (1.548_650_418_711_711_2e-2
1508                    + (1.912_842_878_455_092_4e-4
1509                        + (1.730_735_096_935_997_5e-6
1510                            + (1.173_265_673_611_360_8e-8
1511                                + (5.899_112_528_756_384e-11 + 2.080_306_533_333_333_4e-13 * t)
1512                                    * t)
1513                                * t)
1514                            * t)
1515                        * t)
1516                    * t
1517        }
1518        93_u8 => {
1519            let t = 2.0 * x - 187.0;
1520            7.499_332_191_172_625e-1
1521                + (1.627_279_036_404_478_3e-2
1522                    + (2.019_550_516_337_791_2e-4
1523                        + (1.826_989_488_320_334_8e-6
1524                            + (1.233_516_102_163_022_5e-8
1525                                + (6.152_306_831_216_908e-11 + 2.139_578_343_111_111_2e-13 * t)
1526                                    * t)
1527                                * t)
1528                            * t)
1529                        * t)
1530                    * t
1531        }
1532        94_u8 => {
1533            let t = 2.0 * x - 189.0;
1534            7.833_014_353_128_349e-1
1535                + (1.710_293_413_265_243e-2
1536                    + (2.132_180_058_506_332_8e-4
1537                        + (1.928_166_139_554_391_2e-6
1538                            + (1.296_334_008_735_434_2e-8
1539                                + (6.412_604_099_806_635e-11 + 2.198_670_894_222_222_3e-13 * t)
1540                                    * t)
1541                                * t)
1542                            * t)
1543                        * t)
1544                    * t
1545        }
1546        95_u8 => {
1547            let t = 2.0 * x - 191.0;
1548            8.183_758_104_102_381e-1
1549                + (1.797_936_414_904_422_3e-2
1550                    + (2.251_033_059_275_313e-4
1551                        + (2.034_473_286_801_817_5e-6
1552                            + (1.361_790_294_183_995e-8
1553                                + (6.679_976_008_397_248e-11 + 2.257_470_126_222_222e-13 * t)
1554                                    * t)
1555                                * t)
1556                            * t)
1557                        * t)
1558                    * t
1559        }
1560        96_u8 => {
1561            let t = 2.0 * x - 193.0;
1562            8.552_514_477_568_512e-1
1563                + (1.890_463_221_254_756e-2
1564                    + (2.376_423_737_037_125_5e-4
1565                        + (2.146_124_825_130_639e-6
1566                            + (1.429_955_507_187_052_3e-8
1567                                + (6.954_380_386_469_418e-11 + 2.315_859_368_888_888_7e-13 * t)
1568                                    * t)
1569                                * t)
1570                            * t)
1571                        * t)
1572                    * t
1573        }
1574        97_u8 => {
1575            let t = 2.0 * x - 195.0;
1576            8.940_286_817_084_994e-1
1577                + (1.988_141_839_912_72e-2
1578                    + (2.508_679_312_839_599_4e-4
1579                        + (2.263_340_274_758_523_3e-6
1580                            + (1.500_899_704_211_653e-8
1581                                + (7.235_760_907_504_394e-11 + 2.373_719_473_777_777_7e-13 * t)
1582                                    * t)
1583                                * t)
1584                            * t)
1585                        * t)
1586                    * t
1587        }
1588        98_u8 => {
1589            let t = 2.0 * x - 197.0;
1590            9.348_133_394_287_079e-1
1591                + (2.091_253_632_978_037e-2
1592                    + (2.648_140_346_599_848e-4
1593                        + (2.386_344_735_975_492_4e-6
1594                            + (1.574_692_306_547_218_3e-8
1595                                + (7.524_046_814_172_015e-11 + 2.430_929_127_111_111_4e-13 * t)
1596                                    * t)
1597                                * t)
1598                            * t)
1599                        * t)
1600                    * t
1601        }
1602        99_u8 => {
1603            let t = 2.0 * x - 199.0;
1604            9.777_170_133_588_503e-1
1605                + (2.200_093_857_283_048e-2
1606                    + (2.795_161_070_268_238e-4
1607                        + (2.515_368_832_524_531_6e-6
1608                            + (1.651_401_954_782_282e-8
1609                                + (7.819_152_682_936_823e-11 + 2.487_365_235_555_555_7e-13 * t)
1610                                    * t)
1611                                * t)
1612                            * t)
1613                        * t)
1614                    * t
1615        }
1616        100_u8..=u8::MAX => 1.0,
1617    }
1618}