Coverage Report

Created: 2025-11-05 08:08

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/pxfm-0.1.25/src/sincos_dyadic.rs
Line
Count
Source
1
/*
2
 * // Copyright (c) Radzivon Bartoshyk 6/2025. All rights reserved.
3
 * //
4
 * // Redistribution and use in source and binary forms, with or without modification,
5
 * // are permitted provided that the following conditions are met:
6
 * //
7
 * // 1.  Redistributions of source code must retain the above copyright notice, this
8
 * // list of conditions and the following disclaimer.
9
 * //
10
 * // 2.  Redistributions in binary form must reproduce the above copyright notice,
11
 * // this list of conditions and the following disclaimer in the documentation
12
 * // and/or other materials provided with the distribution.
13
 * //
14
 * // 3.  Neither the name of the copyright holder nor the names of its
15
 * // contributors may be used to endorse or promote products derived from
16
 * // this software without specific prior written permission.
17
 * //
18
 * // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
 * // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
 * // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
 * // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22
 * // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
 * // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
 * // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
 * // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
 * // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
 * // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 */
29
use crate::dyadic_float::{DyadicFloat128, DyadicSign};
30
use crate::rounding::CpuRound;
31
use crate::sincos_reduce_tables::ONE_TWENTY_EIGHT_OVER_PI;
32
33
0
pub(crate) fn range_reduction_small_f128(x: f64) -> DyadicFloat128 {
34
    const PI_OVER_128_F128: DyadicFloat128 = DyadicFloat128 {
35
        sign: DyadicSign::Pos,
36
        exponent: -133,
37
        mantissa: 0xc90f_daa2_2168_c234_c4c6_628b_80dc_1cd1_u128,
38
    };
39
    const ONE_TWENTY_EIGHT_OVER_PI_D: f64 = f64::from_bits(0x40445f306dc9c883);
40
0
    let prod_hi = x * ONE_TWENTY_EIGHT_OVER_PI_D;
41
0
    let kd = prod_hi.cpu_round();
42
43
0
    let mk_f128 = DyadicFloat128::new_from_f64(-kd);
44
0
    let x_f128 = DyadicFloat128::new_from_f64(x);
45
0
    let over_pi3 = ONE_TWENTY_EIGHT_OVER_PI[3];
46
0
    let p_hi = x_f128.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.0)));
47
0
    let p_mid = x_f128.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.1)));
48
0
    let p_lo = x_f128.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.2)));
49
0
    let s_hi = p_hi.quick_add(&mk_f128);
50
0
    let s_lo = p_mid.quick_add(&p_lo);
51
0
    let y = s_hi.quick_add(&s_lo);
52
0
    y.quick_mul(&PI_OVER_128_F128)
53
0
}
54
55
0
pub(crate) fn range_reduction_small_f128_f128(x: DyadicFloat128) -> (DyadicFloat128, i64) {
56
    const PI_OVER_128_F128: DyadicFloat128 = DyadicFloat128 {
57
        sign: DyadicSign::Pos,
58
        exponent: -133,
59
        mantissa: 0xc90f_daa2_2168_c234_c4c6_628b_80dc_1cd1_u128,
60
    };
61
    const ONE_TWENTY_EIGHT_OVER_PI_D: f64 = f64::from_bits(0x40445f306dc9c883);
62
0
    let prod_hi = x.fast_as_f64() * ONE_TWENTY_EIGHT_OVER_PI_D;
63
0
    let kd = prod_hi.cpu_round();
64
65
0
    let mk_f128 = DyadicFloat128::new_from_f64(-kd);
66
0
    let over_pi3 = ONE_TWENTY_EIGHT_OVER_PI[3];
67
0
    let p_hi = x.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.0)));
68
0
    let p_mid = x.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.1)));
69
0
    let p_lo = x.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.2)));
70
0
    let p_lo_lo = x.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.3)));
71
0
    let s_hi = p_hi.quick_add(&mk_f128);
72
0
    let s_lo = p_mid.quick_add(&p_lo);
73
0
    let y = (s_hi + s_lo) + p_lo_lo;
74
0
    (y.quick_mul(&PI_OVER_128_F128), kd as i64)
75
0
}
76
77
// pub(crate) fn range_reduction_small_f128_f128(x: DyadicFloat128) -> (DyadicFloat128, u64) {
78
//     const PI_OVER_128_F128: DyadicFloat128 = DyadicFloat128 {
79
//         sign: DyadicSign::Pos,
80
//         exponent: -133,
81
//         mantissa: 0xc90f_daa2_2168_c234_c4c6_628b_80dc_1cd1_u128,
82
//     };
83
//     const ONE_TWENTY_EIGHT_OVER_PI_D: f64 = f64::from_bits(0x40445f306dc9c883);
84
//     let prod_hi = x.fast_as_f64() * ONE_TWENTY_EIGHT_OVER_PI_D;
85
//     let kd = prod_hi.round();
86
//
87
//     let mk_f128 = DyadicFloat128::new_from_f64(-kd);
88
//     let over_pi3 = ONE_TWENTY_EIGHT_OVER_PI[3];
89
//     let p_hi = x.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.0)));
90
//     let p_mid = x.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.1)));
91
//     let p_lo = x.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.2)));
92
//     let p_lo_lo = x.quick_mul(&DyadicFloat128::new_from_f64(f64::from_bits(over_pi3.3)));
93
//     let s_hi = p_hi.quick_add(&mk_f128);
94
//     let s_lo = p_mid.quick_add(&p_lo);
95
//     let s_lo_lo = p_lo_lo.quick_add(&p_lo_lo);
96
//     let y = s_hi.quick_add(&s_lo).quick_add(&s_lo_lo);
97
//     (y.quick_mul(&PI_OVER_128_F128), (kd as i64) as u64)
98
// }
99
100
pub(crate) struct SinCosDyadic {
101
    pub(crate) v_sin: DyadicFloat128,
102
    pub(crate) v_cos: DyadicFloat128,
103
}
104
105
#[cold]
106
0
pub(crate) fn sincos_eval_dyadic(u: &DyadicFloat128) -> SinCosDyadic {
107
0
    let u_sq = u.quick_mul(u);
108
109
    // sin(u) ~ x - x^3/3! + x^5/5! - x^7/7! + x^9/9! - x^11/11! + x^13/13!
110
    static SIN_COEFFS: [DyadicFloat128; 7] = [
111
        DyadicFloat128 {
112
            sign: DyadicSign::Pos,
113
            exponent: -127,
114
            mantissa: 0x80000000_00000000_00000000_00000000_u128,
115
        }, // 1
116
        DyadicFloat128 {
117
            sign: DyadicSign::Neg,
118
            exponent: -130,
119
            mantissa: 0xaaaaaaaa_aaaaaaaa_aaaaaaaa_aaaaaaab_u128,
120
        }, // -1/3!
121
        DyadicFloat128 {
122
            sign: DyadicSign::Pos,
123
            exponent: -134,
124
            mantissa: 0x88888888_88888888_88888888_88888889_u128,
125
        }, // 1/5!
126
        DyadicFloat128 {
127
            sign: DyadicSign::Neg,
128
            exponent: -140,
129
            mantissa: 0xd00d00d0_0d00d00d_00d00d00_d00d00d0_u128,
130
        }, // -1/7!
131
        DyadicFloat128 {
132
            sign: DyadicSign::Pos,
133
            exponent: -146,
134
            mantissa: 0xb8ef1d2a_b6399c7d_560e4472_800b8ef2_u128,
135
        }, // 1/9!
136
        DyadicFloat128 {
137
            sign: DyadicSign::Neg,
138
            exponent: -153,
139
            mantissa: 0xd7322b3f_aa271c7f_3a3f25c1_bee38f10_u128,
140
        }, // -1/11!
141
        DyadicFloat128 {
142
            sign: DyadicSign::Pos,
143
            exponent: -160,
144
            mantissa: 0xb092309d_43684be5_1c198e91_d7b4269e_u128,
145
        }, // 1/13!
146
    ];
147
148
    // cos(u) ~ 1 - x^2/2 + x^4/4! - x^6/6! + x^8/8! - x^10/10! + x^12/12!
149
    static COS_COEFFS: [DyadicFloat128; 7] = [
150
        DyadicFloat128 {
151
            sign: DyadicSign::Pos,
152
            exponent: -127,
153
            mantissa: 0x80000000_00000000_00000000_00000000_u128,
154
        }, // 1.0
155
        DyadicFloat128 {
156
            sign: DyadicSign::Neg,
157
            exponent: -128,
158
            mantissa: 0x80000000_00000000_00000000_00000000_u128,
159
        }, // 1/2
160
        DyadicFloat128 {
161
            sign: DyadicSign::Pos,
162
            exponent: -132,
163
            mantissa: 0xaaaaaaaa_aaaaaaaa_aaaaaaaa_aaaaaaab_u128,
164
        }, // 1/4!
165
        DyadicFloat128 {
166
            sign: DyadicSign::Neg,
167
            exponent: -137,
168
            mantissa: 0xb60b60b6_0b60b60b_60b60b60_b60b60b6_u128,
169
        }, // 1/6!
170
        DyadicFloat128 {
171
            sign: DyadicSign::Pos,
172
            exponent: -143,
173
            mantissa: 0xd00d00d0_0d00d00d_00d00d00_d00d00d0_u128,
174
        }, // 1/8!
175
        DyadicFloat128 {
176
            sign: DyadicSign::Neg,
177
            exponent: -149,
178
            mantissa: 0x93f27dbb_c4fae397_780b69f5_333c725b_u128,
179
        }, // 1/10!
180
        DyadicFloat128 {
181
            sign: DyadicSign::Pos,
182
            exponent: -156,
183
            mantissa: 0x8f76c77f_c6c4bdaa_26d4c3d6_7f425f60_u128,
184
        }, // 1/12!
185
    ];
186
187
0
    let mut sin_u = SIN_COEFFS[6];
188
0
    for i in (0..7).rev() {
189
0
        sin_u = sin_u * u_sq + SIN_COEFFS[i];
190
0
    }
191
0
    sin_u = sin_u * *u;
192
193
0
    let mut cos_u = COS_COEFFS[6];
194
0
    for i in (0..7).rev() {
195
0
        cos_u = cos_u * u_sq + COS_COEFFS[i];
196
0
    }
197
198
0
    SinCosDyadic {
199
0
        v_sin: sin_u,
200
0
        v_cos: cos_u,
201
0
    }
202
0
}
203
204
/*
205
   Sage math:
206
   # Sin K PI over 128
207
   R = RealField(128)
208
   π = R.pi()
209
210
   def format_hex(value):
211
       l = hex(value)[2:]
212
       n = 4
213
       x = [l[i:i + n] for i in range(0, len(l), n)]
214
       return "0x" + "_".join(x) + "_u128"
215
216
   def print_dyadic(value):
217
       (s, m, e) = RealField(128)(value).sign_mantissa_exponent();
218
       print("DyadicFloat128 {")
219
       print(f"    sign: DyadicSign::{'Pos' if s >= 0 else 'Neg'},")
220
       print(f"    exponent: {e},")
221
       print(f"    mantissa: {format_hex(m)},")
222
       print("},")
223
224
   # Generate array entries
225
   print("pub(crate) static SIN_K_PI_OVER_128_F128: [DyadicFloat128; 65] = [")
226
   for k in range(65):
227
       value = R(k) * π / 128
228
       print_dyadic(value.sin())
229
230
   print("];")
231
*/
232
pub(crate) static SIN_K_PI_OVER_128_F128: [DyadicFloat128; 65] = [
233
    DyadicFloat128 {
234
        sign: DyadicSign::Pos,
235
        exponent: 0,
236
        mantissa: 0x0_u128,
237
    },
238
    DyadicFloat128 {
239
        sign: DyadicSign::Pos,
240
        exponent: -133,
241
        mantissa: 0xc90a_afbd_1b33_efc9_c539_edcb_fda0_cf2c_u128,
242
    },
243
    DyadicFloat128 {
244
        sign: DyadicSign::Pos,
245
        exponent: -132,
246
        mantissa: 0xc8fb_2f88_6ec0_9f37_6a17_954b_2b7c_5171_u128,
247
    },
248
    DyadicFloat128 {
249
        sign: DyadicSign::Pos,
250
        exponent: -131,
251
        mantissa: 0x96a9_0496_70cf_ae65_f775_7409_4d3c_35c4_u128,
252
    },
253
    DyadicFloat128 {
254
        sign: DyadicSign::Pos,
255
        exponent: -131,
256
        mantissa: 0xc8bd_35e1_4da1_5f0e_c739_6c89_4bbf_7389_u128,
257
    },
258
    DyadicFloat128 {
259
        sign: DyadicSign::Pos,
260
        exponent: -131,
261
        mantissa: 0xfab2_72b5_4b98_71a2_7047_29ae_56d7_8a37_u128,
262
    },
263
    DyadicFloat128 {
264
        sign: DyadicSign::Pos,
265
        exponent: -130,
266
        mantissa: 0x9640_8374_7309_d113_000a_89a1_1e07_c1ff_u128,
267
    },
268
    DyadicFloat128 {
269
        sign: DyadicSign::Pos,
270
        exponent: -130,
271
        mantissa: 0xaf10_a224_59fe_32a6_3fee_f3bb_58b1_f10d_u128,
272
    },
273
    DyadicFloat128 {
274
        sign: DyadicSign::Pos,
275
        exponent: -130,
276
        mantissa: 0xc7c5_c1e3_4d30_55b2_5cc8_c00e_4fcc_d850_u128,
277
    },
278
    DyadicFloat128 {
279
        sign: DyadicSign::Pos,
280
        exponent: -130,
281
        mantissa: 0xe05c_1353_f27b_17e5_0ebc_61ad_e6ca_83cc_u128,
282
    },
283
    DyadicFloat128 {
284
        sign: DyadicSign::Pos,
285
        exponent: -130,
286
        mantissa: 0xf8cf_cbd9_0af8_d57a_4221_dc4b_a772_598d_u128,
287
    },
288
    DyadicFloat128 {
289
        sign: DyadicSign::Pos,
290
        exponent: -129,
291
        mantissa: 0x888e_9315_8fb3_bb04_9841_56f5_5334_4306_u128,
292
    },
293
    DyadicFloat128 {
294
        sign: DyadicSign::Pos,
295
        exponent: -129,
296
        mantissa: 0x94a0_3176_acf8_2d45_ae4b_a773_da6b_f754_u128,
297
    },
298
    DyadicFloat128 {
299
        sign: DyadicSign::Pos,
300
        exponent: -129,
301
        mantissa: 0xa09a_e4a0_bb30_0a19_2f89_5f44_a303_cc0b_u128,
302
    },
303
    DyadicFloat128 {
304
        sign: DyadicSign::Pos,
305
        exponent: -129,
306
        mantissa: 0xac7c_d3ad_58fe_e7f0_811f_9539_84ef_f83e_u128,
307
    },
308
    DyadicFloat128 {
309
        sign: DyadicSign::Pos,
310
        exponent: -129,
311
        mantissa: 0xb844_2987_d22c_f576_9cc3_ef36_746d_e3b8_u128,
312
    },
313
    DyadicFloat128 {
314
        sign: DyadicSign::Pos,
315
        exponent: -129,
316
        mantissa: 0xc3ef_1535_754b_168d_3122_c2a5_9efd_dc37_u128,
317
    },
318
    DyadicFloat128 {
319
        sign: DyadicSign::Pos,
320
        exponent: -129,
321
        mantissa: 0xcf7b_ca1d_476c_516d_a812_90bd_baad_62e4_u128,
322
    },
323
    DyadicFloat128 {
324
        sign: DyadicSign::Pos,
325
        exponent: -129,
326
        mantissa: 0xdae8_804f_0ae6_015b_362c_b974_182e_3030_u128,
327
    },
328
    DyadicFloat128 {
329
        sign: DyadicSign::Pos,
330
        exponent: -129,
331
        mantissa: 0xe633_74c9_8e22_f0b4_2872_ce1b_fc7a_d1cc_u128,
332
    },
333
    DyadicFloat128 {
334
        sign: DyadicSign::Pos,
335
        exponent: -129,
336
        mantissa: 0xf15a_e9c0_37b1_d8f0_6c48_e9e3_420b_0f1d_u128,
337
    },
338
    DyadicFloat128 {
339
        sign: DyadicSign::Pos,
340
        exponent: -129,
341
        mantissa: 0xfc5d_26df_c4d5_cfda_27c0_7c91_1290_b8d1_u128,
342
    },
343
    DyadicFloat128 {
344
        sign: DyadicSign::Pos,
345
        exponent: -128,
346
        mantissa: 0x839c_3cc9_17ff_6cb4_bfd7_9717_f288_0abf_u128,
347
    },
348
    DyadicFloat128 {
349
        sign: DyadicSign::Pos,
350
        exponent: -128,
351
        mantissa: 0x88f5_9aa0_da59_1421_b892_ca83_61d8_c84c_u128,
352
    },
353
    DyadicFloat128 {
354
        sign: DyadicSign::Pos,
355
        exponent: -128,
356
        mantissa: 0x8e39_d9cd_7346_4364_bba4_cfec_bff5_4868_u128,
357
    },
358
    DyadicFloat128 {
359
        sign: DyadicSign::Pos,
360
        exponent: -128,
361
        mantissa: 0x9368_2a66_e896_f544_b178_2191_1e71_c16e_u128,
362
    },
363
    DyadicFloat128 {
364
        sign: DyadicSign::Pos,
365
        exponent: -128,
366
        mantissa: 0x987f_bfe7_0b81_a708_19ce_c845_ac87_a5c6_u128,
367
    },
368
    DyadicFloat128 {
369
        sign: DyadicSign::Pos,
370
        exponent: -128,
371
        mantissa: 0x9d7f_d149_0285_c9e3_e25e_3954_9638_ae67_u128,
372
    },
373
    DyadicFloat128 {
374
        sign: DyadicSign::Pos,
375
        exponent: -128,
376
        mantissa: 0xa267_9928_48ee_b0c0_3b51_67ee_359a_234e_u128,
377
    },
378
    DyadicFloat128 {
379
        sign: DyadicSign::Pos,
380
        exponent: -128,
381
        mantissa: 0xa736_55df_1f2f_489e_149f_6e75_9934_68a2_u128,
382
    },
383
    DyadicFloat128 {
384
        sign: DyadicSign::Pos,
385
        exponent: -128,
386
        mantissa: 0xabeb_49a4_6764_fd15_1bec_da80_89c1_a94c_u128,
387
    },
388
    DyadicFloat128 {
389
        sign: DyadicSign::Pos,
390
        exponent: -128,
391
        mantissa: 0xb085_baa8_e966_f6da_e4ca_d00d_5c94_bcd1_u128,
392
    },
393
    DyadicFloat128 {
394
        sign: DyadicSign::Pos,
395
        exponent: -128,
396
        mantissa: 0xb504_f333_f9de_6484_597d_89b3_754a_be9f_u128,
397
    },
398
    DyadicFloat128 {
399
        sign: DyadicSign::Pos,
400
        exponent: -128,
401
        mantissa: 0xb968_41bf_7ffc_b21a_9de1_e3b2_2b8b_f4db_u128,
402
    },
403
    DyadicFloat128 {
404
        sign: DyadicSign::Pos,
405
        exponent: -128,
406
        mantissa: 0xbdae_f913_557d_76f0_ac85_320f_528d_6d5c_u128,
407
    },
408
    DyadicFloat128 {
409
        sign: DyadicSign::Pos,
410
        exponent: -128,
411
        mantissa: 0xc1d8_705f_fcbb_6e90_bdf0_715c_b8b2_0bd7_u128,
412
    },
413
    DyadicFloat128 {
414
        sign: DyadicSign::Pos,
415
        exponent: -128,
416
        mantissa: 0xc5e4_0358_a8ba_05a7_43da_25d9_9267_326b_u128,
417
    },
418
    DyadicFloat128 {
419
        sign: DyadicSign::Pos,
420
        exponent: -128,
421
        mantissa: 0xc9d1_124c_931f_da7a_8335_241b_e169_3225_u128,
422
    },
423
    DyadicFloat128 {
424
        sign: DyadicSign::Pos,
425
        exponent: -128,
426
        mantissa: 0xcd9f_023f_9c3a_059e_23af_31db_7179_a4a9_u128,
427
    },
428
    DyadicFloat128 {
429
        sign: DyadicSign::Pos,
430
        exponent: -128,
431
        mantissa: 0xd14d_3d02_313c_0eed_744f_ea20_e8ab_ef92_u128,
432
    },
433
    DyadicFloat128 {
434
        sign: DyadicSign::Pos,
435
        exponent: -128,
436
        mantissa: 0xd4db_3148_750d_1819_f630_e8b6_dac8_3e68_u128,
437
    },
438
    DyadicFloat128 {
439
        sign: DyadicSign::Pos,
440
        exponent: -128,
441
        mantissa: 0xd848_52c0_a80f_fcdb_24b9_fe00_6635_74a4_u128,
442
    },
443
    DyadicFloat128 {
444
        sign: DyadicSign::Pos,
445
        exponent: -128,
446
        mantissa: 0xdb94_1a28_cb71_ec87_2c19_b632_53da_43fb_u128,
447
    },
448
    DyadicFloat128 {
449
        sign: DyadicSign::Pos,
450
        exponent: -128,
451
        mantissa: 0xdebe_0563_7ca9_4cfb_4b19_aa71_fec3_ae6c_u128,
452
    },
453
    DyadicFloat128 {
454
        sign: DyadicSign::Pos,
455
        exponent: -128,
456
        mantissa: 0xe1c5_978c_05ed_8691_f4e8_a837_2f8c_5810_u128,
457
    },
458
    DyadicFloat128 {
459
        sign: DyadicSign::Pos,
460
        exponent: -128,
461
        mantissa: 0xe4aa_5909_a08f_a7b4_1227_85ae_67f5_515c_u128,
462
    },
463
    DyadicFloat128 {
464
        sign: DyadicSign::Pos,
465
        exponent: -128,
466
        mantissa: 0xe76b_d7a1_e63b_9786_1251_2952_9d48_a92f_u128,
467
    },
468
    DyadicFloat128 {
469
        sign: DyadicSign::Pos,
470
        exponent: -128,
471
        mantissa: 0xea09_a68a_6e49_cd62_15ad_45b4_a1b5_e823_u128,
472
    },
473
    DyadicFloat128 {
474
        sign: DyadicSign::Pos,
475
        exponent: -128,
476
        mantissa: 0xec83_5e79_946a_3145_7e61_0231_ac1d_6181_u128,
477
    },
478
    DyadicFloat128 {
479
        sign: DyadicSign::Pos,
480
        exponent: -128,
481
        mantissa: 0xeed8_9db6_6611_e307_86f8_c20f_b664_b01b_u128,
482
    },
483
    DyadicFloat128 {
484
        sign: DyadicSign::Pos,
485
        exponent: -128,
486
        mantissa: 0xf109_0827_b437_25fd_6712_7db3_5b28_7315_u128,
487
    },
488
    DyadicFloat128 {
489
        sign: DyadicSign::Pos,
490
        exponent: -128,
491
        mantissa: 0xf314_4762_4708_8f74_a548_6bdc_455d_56a3_u128,
492
    },
493
    DyadicFloat128 {
494
        sign: DyadicSign::Pos,
495
        exponent: -128,
496
        mantissa: 0xf4fa_0ab6_316e_d2ec_163c_5c7f_03b7_18c5_u128,
497
    },
498
    DyadicFloat128 {
499
        sign: DyadicSign::Pos,
500
        exponent: -128,
501
        mantissa: 0xf6ba_073b_424b_19e8_2c79_1f59_cc1f_fc23_u128,
502
    },
503
    DyadicFloat128 {
504
        sign: DyadicSign::Pos,
505
        exponent: -128,
506
        mantissa: 0xf853_f7dc_9186_b952_c7ad_c6b4_9888_91ba_u128,
507
    },
508
    DyadicFloat128 {
509
        sign: DyadicSign::Pos,
510
        exponent: -128,
511
        mantissa: 0xf9c7_9d63_272c_4628_4504_ae08_d19b_2981_u128,
512
    },
513
    DyadicFloat128 {
514
        sign: DyadicSign::Pos,
515
        exponent: -128,
516
        mantissa: 0xfb14_be7f_bae5_8156_2172_a361_fd2a_722f_u128,
517
    },
518
    DyadicFloat128 {
519
        sign: DyadicSign::Pos,
520
        exponent: -128,
521
        mantissa: 0xfc3b_27d3_8a5d_49ab_2567_78ff_cb5c_1769_u128,
522
    },
523
    DyadicFloat128 {
524
        sign: DyadicSign::Pos,
525
        exponent: -128,
526
        mantissa: 0xfd3a_abf8_4528_b50b_eae6_bd95_1c1d_abbd_u128,
527
    },
528
    DyadicFloat128 {
529
        sign: DyadicSign::Pos,
530
        exponent: -128,
531
        mantissa: 0xfe13_2387_0cfe_9a3d_90cd_1d95_9db6_74ef_u128,
532
    },
533
    DyadicFloat128 {
534
        sign: DyadicSign::Pos,
535
        exponent: -128,
536
        mantissa: 0xfec4_6d1e_8929_2cf0_4139_0efd_c726_e9ef_u128,
537
    },
538
    DyadicFloat128 {
539
        sign: DyadicSign::Pos,
540
        exponent: -128,
541
        mantissa: 0xff4e_6d68_0c41_d0a9_0f66_8633_f1ab_858a_u128,
542
    },
543
    DyadicFloat128 {
544
        sign: DyadicSign::Pos,
545
        exponent: -128,
546
        mantissa: 0xffb1_0f1b_cb6b_ef1d_421e_8eda_af59_453e_u128,
547
    },
548
    DyadicFloat128 {
549
        sign: DyadicSign::Pos,
550
        exponent: -128,
551
        mantissa: 0xffec_4304_2668_65d9_5657_5523_6696_1732_u128,
552
    },
553
    DyadicFloat128 {
554
        sign: DyadicSign::Pos,
555
        exponent: -127,
556
        mantissa: 0x8000_0000_0000_0000_0000_0000_0000_0000_u128,
557
    },
558
];