Skip to main content

conspire/math/special/
mod.rs

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