1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
use crate::UBigInt;
impl UBigInt {
/// It returns 2^n.
pub fn exp2(n: u64) -> Self {
UBigInt::from_u32(1 << ((n % 32) as u32)).shift_left((n / 32) as usize)
}
/// It's the inverse function of `log2_accurate`. It returns `truncate(2^(n/4294967296))`. **It may have a small error when `n` is large.**
pub fn exp2_accurate(n: &UBigInt) -> Self {
let trunc = n.shift_right(1);
// 0 ~ 2^32-1
let mut frac = n.sub_ubi(&trunc.shift_left(1)).to_u64().unwrap() as usize;
// It uses linear approximation
// f1 + (f2 - f1) * (frac % 2^23) / (2^23)
let mut f1 = UBigInt::from_u64(EXP_TABLE[frac >> 23]);
let mut f2 = UBigInt::from_u64(EXP_TABLE[(frac >> 23) + 1]);
frac %= 1 << 23;
for _ in 0..5 {
let mid = f1.mul_ubi(&f2).sqrt();
if frac > (1 << 22) {
f1 = mid;
frac -= 1 << 22;
frac *= 2;
}
else {
f2 = mid;
frac *= 2;
}
}
f1.add_ubi_mut(&f2.sub_ubi(&f1).mul_u32(frac as u32).div_u32(1 << 23));
let result_pow_30 = UBigInt::exp2(trunc.to_u64().unwrap()).mul_ubi(&f1).shift_right(1);
let result = result_pow_30.div_u32(1 << 30);
if result_pow_30.rem_pow2(1 << 30).0[0] > (1 << 29) {
result.add_u32(1)
}
else {
result
}
}
}
#[cfg(test)]
mod tests {
use crate::UBigInt;
#[test]
fn exp2_test() {
for n in [0, 1, 2, 3, 4, 5, 17, 1728, 196, 159, 160, 161, 162, 9982, 230716] {
assert_eq!(UBigInt::from_u32(2).pow_u32(n), UBigInt::exp2(n as u64));
}
for n in [1, 2, 3, 29, 1721, 4, 5, 6, 7, 8, 9, 9999, 1048576, 16777216, 230524, 16227766, 12345678, 31415926, 87654321, 987654321, 9876543210] {
assert_eq!(UBigInt::from_u64(n), UBigInt::exp2_accurate(&UBigInt::from_u64(n).log2_accurate()));
}
assert_eq!(UBigInt::one(), UBigInt::exp2_accurate(&UBigInt::zero()));
}
}
const EXP_TABLE: [u64; 513] = [
4611686018427387904, // 2^(62 + 0/512)
4617933561212708776, // 2^(62 + 1/512)
4624189567668517720, // 2^(62 + 2/512)
4630454049260717505, // 2^(62 + 3/512)
4636727017470743990, // 2^(62 + 4/512)
4643008483795587159, // 2^(62 + 5/512)
4649298459747812202, // 2^(62 + 6/512)
4655596956855580605, // 2^(62 + 7/512)
4661903986662671289, // 2^(62 + 8/512)
4668219560728501758, // 2^(62 + 9/512)
4674543690628149290, // 2^(62 + 10/512)
4680876387952372151, // 2^(62 + 11/512)
4687217664307630837, // 2^(62 + 12/512)
4693567531316109348, // 2^(62 + 13/512)
4699926000615736486, // 2^(62 + 14/512)
4706293083860207188, // 2^(62 + 15/512)
4712668792719003883, // 2^(62 + 16/512)
4719053138877417881, // 2^(62 + 17/512)
4725446134036570787, // 2^(62 + 18/512)
4731847789913435949, // 2^(62 + 19/512)
4738258118240859931, // 2^(62 + 20/512)
4744677130767584019, // 2^(62 + 21/512)
4751104839258265753, // 2^(62 + 22/512)
4757541255493500485, // 2^(62 + 23/512)
4763986391269842979, // 2^(62 + 24/512)
4770440258399829021, // 2^(62 + 25/512)
4776902868711997079, // 2^(62 + 26/512)
4783374234050909975, // 2^(62 + 27/512)
4789854366277176596, // 2^(62 + 28/512)
4796343277267473632, // 2^(62 + 29/512)
4802840978914567342, // 2^(62 + 30/512)
4809347483127335355, // 2^(62 + 31/512)
4815862801830788490, // 2^(62 + 32/512)
4822386946966092618, // 2^(62 + 33/512)
4828919930490590543, // 2^(62 + 34/512)
4835461764377823921, // 2^(62 + 35/512)
4842012460617555201, // 2^(62 + 36/512)
4848572031215789604, // 2^(62 + 37/512)
4855140488194797123, // 2^(62 + 38/512)
4861717843593134561, // 2^(62 + 39/512)
4868304109465667592, // 2^(62 + 40/512)
4874899297883592856, // 2^(62 + 41/512)
4881503420934460086, // 2^(62 + 42/512)
4888116490722194255, // 2^(62 + 43/512)
4894738519367117768, // 2^(62 + 44/512)
4901369519005972669, // 2^(62 + 45/512)
4908009501791942890, // 2^(62 + 46/512)
4914658479894676520, // 2^(62 + 47/512)
4921316465500308115, // 2^(62 + 48/512)
4927983470811481030, // 2^(62 + 49/512)
4934659508047369781, // 2^(62 + 50/512)
4941344589443702446, // 2^(62 + 51/512)
4948038727252783086, // 2^(62 + 52/512)
4954741933743514200, // 2^(62 + 53/512)
4961454221201419217, // 2^(62 + 54/512)
4968175601928665007, // 2^(62 + 55/512)
4974906088244084429, // 2^(62 + 56/512)
4981645692483198911, // 2^(62 + 57/512)
4988394426998241059, // 2^(62 + 58/512)
4995152304158177292, // 2^(62 + 59/512)
5001919336348730514, // 2^(62 + 60/512)
5008695535972402814, // 2^(62 + 61/512)
5015480915448498200, // 2^(62 + 62/512)
5022275487213145356, // 2^(62 + 63/512)
5029079263719320435, // 2^(62 + 64/512)
5035892257436869888, // 2^(62 + 65/512)
5042714480852533314, // 2^(62 + 66/512)
5049545946469966345, // 2^(62 + 67/512)
5056386666809763566, // 2^(62 + 68/512)
5063236654409481460, // 2^(62 + 69/512)
5070095921823661386, // 2^(62 + 70/512)
5076964481623852591, // 2^(62 + 71/512)
5083842346398635250, // 2^(62 + 72/512)
5090729528753643538, // 2^(62 + 73/512)
5097626041311588731, // 2^(62 + 74/512)
5104531896712282348, // 2^(62 + 75/512)
5111447107612659306, // 2^(62 + 76/512)
5118371686686801129, // 2^(62 + 77/512)
5125305646625959168, // 2^(62 + 78/512)
5132249000138577866, // 2^(62 + 79/512)
5139201759950318048, // 2^(62 + 80/512)
5146163938804080244, // 2^(62 + 81/512)
5153135549460028048, // 2^(62 + 82/512)
5160116604695611497, // 2^(62 + 83/512)
5167107117305590498, // 2^(62 + 84/512)
5174107100102058270, // 2^(62 + 85/512)
5181116565914464832, // 2^(62 + 86/512)
5188135527589640514, // 2^(62 + 87/512)
5195163997991819502, // 2^(62 + 88/512)
5202201990002663415, // 2^(62 + 89/512)
5209249516521284917, // 2^(62 + 90/512)
5216306590464271356, // 2^(62 + 91/512)
5223373224765708437, // 2^(62 + 92/512)
5230449432377203929, // 2^(62 + 93/512)
5237535226267911401, // 2^(62 + 94/512)
5244630619424553994, // 2^(62 + 95/512)
5251735624851448219, // 2^(62 + 96/512)
5258850255570527794, // 2^(62 + 97/512)
5265974524621367510, // 2^(62 + 98/512)
5273108445061207130, // 2^(62 + 99/512)
5280252029964975318, // 2^(62 + 100/512)
5287405292425313604, // 2^(62 + 101/512)
5294568245552600382, // 2^(62 + 102/512)
5301740902474974933, // 2^(62 + 103/512)
5308923276338361493, // 2^(62 + 104/512)
5316115380306493341, // 2^(62 + 105/512)
5323317227560936928, // 2^(62 + 106/512)
5330528831301116034, // 2^(62 + 107/512)
5337750204744335963, // 2^(62 + 108/512)
5344981361125807763, // 2^(62 + 109/512)
5352222313698672489, // 2^(62 + 110/512)
5359473075734025487, // 2^(62 + 111/512)
5366733660520940720, // 2^(62 + 112/512)
5374004081366495126, // 2^(62 + 113/512)
5381284351595793002, // 2^(62 + 114/512)
5388574484551990431, // 2^(62 + 115/512)
5395874493596319735, // 2^(62 + 116/512)
5403184392108113961, // 2^(62 + 117/512)
5410504193484831407, // 2^(62 + 118/512)
5417833911142080174, // 2^(62 + 119/512)
5425173558513642752, // 2^(62 + 120/512)
5432523149051500645, // 2^(62 + 121/512)
5439882696225859025, // 2^(62 + 122/512)
5447252213525171417, // 2^(62 + 123/512)
5454631714456164423, // 2^(62 + 124/512)
5462021212543862476, // 2^(62 + 125/512)
5469420721331612629, // 2^(62 + 126/512)
5476830254381109377, // 2^(62 + 127/512)
5484249825272419511, // 2^(62 + 128/512)
5491679447604007010, // 2^(62 + 129/512)
5499119134992757962, // 2^(62 + 130/512)
5506568901074005522, // 2^(62 + 131/512)
5514028759501554900, // 2^(62 + 132/512)
5521498723947708391, // 2^(62 + 133/512)
5528978808103290427, // 2^(62 + 134/512)
5536469025677672673, // 2^(62 + 135/512)
5543969390398799154, // 2^(62 + 136/512)
5551479916013211411, // 2^(62 + 137/512)
5559000616286073701, // 2^(62 + 138/512)
5566531505001198220, // 2^(62 + 139/512)
5574072595961070373, // 2^(62 + 140/512)
5581623902986874061, // 2^(62 + 141/512)
5589185439918517022, // 2^(62 + 142/512)
5596757220614656191, // 2^(62 + 143/512)
5604339258952723100, // 2^(62 + 144/512)
5611931568828949315, // 2^(62 + 145/512)
5619534164158391904, // 2^(62 + 146/512)
5627147058874958938, // 2^(62 + 147/512)
5634770266931435030, // 2^(62 + 148/512)
5642403802299506910, // 2^(62 + 149/512)
5650047678969789029, // 2^(62 + 150/512)
5657701910951849201, // 2^(62 + 151/512)
5665366512274234280, // 2^(62 + 152/512)
5673041496984495873, // 2^(62 + 153/512)
5680726879149216084, // 2^(62 + 154/512)
5688422672854033295, // 2^(62 + 155/512)
5696128892203667984, // 2^(62 + 156/512)
5703845551321948571, // 2^(62 + 157/512)
5711572664351837311, // 2^(62 + 158/512)
5719310245455456210, // 2^(62 + 159/512)
5727058308814112982, // 2^(62 + 160/512)
5734816868628327041, // 2^(62 + 161/512)
5742585939117855528, // 2^(62 + 162/512)
5750365534521719369, // 2^(62 + 163/512)
5758155669098229378, // 2^(62 + 164/512)
5765956357125012386, // 2^(62 + 165/512)
5773767612899037406, // 2^(62 + 166/512)
5781589450736641844, // 2^(62 + 167/512)
5789421884973557729, // 2^(62 + 168/512)
5797264929964937993, // 2^(62 + 169/512)
5805118600085382779, // 2^(62 + 170/512)
5812982909728965788, // 2^(62 + 171/512)
5820857873309260657, // 2^(62 + 172/512)
5828743505259367380, // 2^(62 + 173/512)
5836639820031938756, // 2^(62 + 174/512)
5844546832099206882, // 2^(62 + 175/512)
5852464555953009676, // 2^(62 + 176/512)
5860393006104817436, // 2^(62 + 177/512)
5868332197085759439, // 2^(62 + 178/512)
5876282143446650570, // 2^(62 + 179/512)
5884242859758017993, // 2^(62 + 180/512)
5892214360610127856, // 2^(62 + 181/512)
5900196660613012029, // 2^(62 + 182/512)
5908189774396494886, // 2^(62 + 183/512)
5916193716610220111, // 2^(62 + 184/512)
5924208501923677553, // 2^(62 + 185/512)
5932234145026230114, // 2^(62 + 186/512)
5940270660627140663, // 2^(62 + 187/512)
5948318063455599004, // 2^(62 + 188/512)
5956376368260748865, // 2^(62 + 189/512)
5964445589811714934, // 2^(62 + 190/512)
5972525742897629925, // 2^(62 + 191/512)
5980616842327661685, // 2^(62 + 192/512)
5988718902931040333, // 2^(62 + 193/512)
5996831939557085445, // 2^(62 + 194/512)
6004955967075233263, // 2^(62 + 195/512)
6013091000375063950, // 2^(62 + 196/512)
6021237054366328881, // 2^(62 + 197/512)
6029394143978977965, // 2^(62 + 198/512)
6037562284163187015, // 2^(62 + 199/512)
6045741489889385140, // 2^(62 + 200/512)
6053931776148282192, // 2^(62 + 201/512)
6062133157950896232, // 2^(62 + 202/512)
6070345650328581048, // 2^(62 + 203/512)
6078569268333053700, // 2^(62 + 204/512)
6086804027036422110, // 2^(62 + 205/512)
6095049941531212685, // 2^(62 + 206/512)
6103307026930397976, // 2^(62 + 207/512)
6111575298367424380, // 2^(62 + 208/512)
6119854770996239873, // 2^(62 + 209/512)
6128145459991321788, // 2^(62 + 210/512)
6136447380547704623, // 2^(62 + 211/512)
6144760547881007892, // 2^(62 + 212/512)
6153084977227464011, // 2^(62 + 213/512)
6161420683843946224, // 2^(62 + 214/512)
6169767683007996563, // 2^(62 + 215/512)
6178125990017853851, // 2^(62 + 216/512)
6186495620192481741, // 2^(62 + 217/512)
6194876588871596788, // 2^(62 + 218/512)
6203268911415696568, // 2^(62 + 219/512)
6211672603206087828, // 2^(62 + 220/512)
6220087679644914678, // 2^(62 + 221/512)
6228514156155186817, // 2^(62 + 222/512)
6236952048180807805, // 2^(62 + 223/512)
6245401371186603363, // 2^(62 + 224/512)
6253862140658349719, // 2^(62 + 225/512)
6262334372102801992, // 2^(62 + 226/512)
6270818081047722609, // 2^(62 + 227/512)
6279313283041909767, // 2^(62 + 228/512)
6287819993655225927, // 2^(62 + 229/512)
6296338228478626354, // 2^(62 + 230/512)
6304868003124187691, // 2^(62 + 231/512)
6313409333225136570, // 2^(62 + 232/512)
6321962234435878267, // 2^(62 + 233/512)
6330526722432025392, // 2^(62 + 234/512)
6339102812910426620, // 2^(62 + 235/512)
6347690521589195457, // 2^(62 + 236/512)
6356289864207739053, // 2^(62 + 237/512)
6364900856526787044, // 2^(62 + 238/512)
6373523514328420440, // 2^(62 + 239/512)
6382157853416100551, // 2^(62 + 240/512)
6390803889614697950, // 2^(62 + 241/512)
6399461638770521476, // 2^(62 + 242/512)
6408131116751347279, // 2^(62 + 243/512)
6416812339446447901, // 2^(62 + 244/512)
6425505322766621397, // 2^(62 + 245/512)
6434210082644220497, // 2^(62 + 246/512)
6442926635033181806, // 2^(62 + 247/512)
6451654995909055044, // 2^(62 + 248/512)
6460395181269032327, // 2^(62 + 249/512)
6469147207131977483, // 2^(62 + 250/512)
6477911089538455417, // 2^(62 + 251/512)
6486686844550761504, // 2^(62 + 252/512)
6495474488252951030, // 2^(62 + 253/512)
6504274036750868672, // 2^(62 + 254/512)
6513085506172178013, // 2^(62 + 255/512)
6521908912666391106, // 2^(62 + 256/512)
6530744272404898065, // 2^(62 + 257/512)
6539591601580996712, // 2^(62 + 258/512)
6548450916409922250, // 2^(62 + 259/512)
6557322233128876981, // 2^(62 + 260/512)
6566205567997060073, // 2^(62 + 261/512)
6575100937295697351, // 2^(62 + 262/512)
6584008357328071142, // 2^(62 + 263/512)
6592927844419550152, // 2^(62 + 264/512)
6601859414917619391, // 2^(62 + 265/512)
6610803085191910132, // 2^(62 + 266/512)
6619758871634229911, // 2^(62 + 267/512)
6628726790658592574, // 2^(62 + 268/512)
6637706858701248356, // 2^(62 + 269/512)
6646699092220714009, // 2^(62 + 270/512)
6655703507697802965, // 2^(62 + 271/512)
6664720121635655540, // 2^(62 + 272/512)
6673748950559769184, // 2^(62 + 273/512)
6682790011018028767, // 2^(62 + 274/512)
6691843319580736907, // 2^(62 + 275/512)
6700908892840644341, // 2^(62 + 276/512)
6709986747412980336, // 2^(62 + 277/512)
6719076899935483140, // 2^(62 + 278/512)
6728179367068430476, // 2^(62 + 279/512)
6737294165494670077, // 2^(62 + 280/512)
6746421311919650262, // 2^(62 + 281/512)
6755560823071450551, // 2^(62 + 282/512)
6764712715700812329, // 2^(62 + 283/512)
6773877006581169542, // 2^(62 + 284/512)
6783053712508679441, // 2^(62 + 285/512)
6792242850302253364, // 2^(62 + 286/512)
6801444436803587566, // 2^(62 + 287/512)
6810658488877194079, // 2^(62 + 288/512)
6819885023410431628, // 2^(62 + 289/512)
6829124057313536577, // 2^(62 + 290/512)
6838375607519653924, // 2^(62 + 291/512)
6847639690984868337, // 2^(62 + 292/512)
6856916324688235226, // 2^(62 + 293/512)
6866205525631811867, // 2^(62 + 294/512)
6875507310840688563, // 2^(62 + 295/512)
6884821697363019841, // 2^(62 + 296/512)
6894148702270055706, // 2^(62 + 297/512)
6903488342656172924, // 2^(62 + 298/512)
6912840635638906351, // 2^(62 + 299/512)
6922205598358980312, // 2^(62 + 300/512)
6931583247980340008, // 2^(62 + 301/512)
6940973601690182982, // 2^(62 + 302/512)
6950376676698990612, // 2^(62 + 303/512)
6959792490240559659, // 2^(62 + 304/512)
6969221059572033851, // 2^(62 + 305/512)
6978662401973935513, // 2^(62 + 306/512)
6988116534750197236, // 2^(62 + 307/512)
6997583475228193593, // 2^(62 + 308/512)
7007063240758772896, // 2^(62 + 309/512)
7016555848716288996, // 2^(62 + 310/512)
7026061316498633128, // 2^(62 + 311/512)
7035579661527265795, // 2^(62 + 312/512)
7045110901247248700, // 2^(62 + 313/512)
7054655053127276718, // 2^(62 + 314/512)
7064212134659709912, // 2^(62 + 315/512)
7073782163360605593, // 2^(62 + 316/512)
7083365156769750424, // 2^(62 + 317/512)
7092961132450692565, // 2^(62 + 318/512)
7102570107990773865, // 2^(62 + 319/512)
7112192101001162094, // 2^(62 + 320/512)
7121827129116883223, // 2^(62 + 321/512)
7131475209996853740, // 2^(62 + 322/512)
7141136361323913023, // 2^(62 + 323/512)
7150810600804855740, // 2^(62 + 324/512)
7160497946170464309, // 2^(62 + 325/512)
7170198415175541390, // 2^(62 + 326/512)
7179912025598942429, // 2^(62 + 327/512)
7189638795243608238, // 2^(62 + 328/512)
7199378741936597630, // 2^(62 + 329/512)
7209131883529120089, // 2^(62 + 330/512)
7218898237896568485, // 2^(62 + 331/512)
7228677822938551842, // 2^(62 + 332/512)
7238470656578928138, // 2^(62 + 333/512)
7248276756765837157, // 2^(62 + 334/512)
7258096141471733389, // 2^(62 + 335/512)
7267928828693418961, // 2^(62 + 336/512)
7277774836452076628, // 2^(62 + 337/512)
7287634182793302801, // 2^(62 + 338/512)
7297506885787140618, // 2^(62 + 339/512)
7307392963528113062, // 2^(62 + 340/512)
7317292434135256130, // 2^(62 + 341/512)
7327205315752152036, // 2^(62 + 342/512)
7337131626546962464, // 2^(62 + 343/512)
7347071384712461870, // 2^(62 + 344/512)
7357024608466070823, // 2^(62 + 345/512)
7366991316049889394, // 2^(62 + 346/512)
7376971525730730590, // 2^(62 + 347/512)
7386965255800153832, // 2^(62 + 348/512)
7396972524574498482, // 2^(62 + 349/512)
7406993350394917410, // 2^(62 + 350/512)
7417027751627410611, // 2^(62 + 351/512)
7427075746662858865, // 2^(62 + 352/512)
7437137353917057446, // 2^(62 + 353/512)
7447212591830749870, // 2^(62 + 354/512)
7457301478869661696, // 2^(62 + 355/512)
7467404033524534368, // 2^(62 + 356/512)
7477520274311159107, // 2^(62 + 357/512)
7487650219770410842, // 2^(62 + 358/512)
7497793888468282197, // 2^(62 + 359/512)
7507951298995917514, // 2^(62 + 360/512)
7518122469969646927, // 2^(62 + 361/512)
7528307420031020486, // 2^(62 + 362/512)
7538506167846842316, // 2^(62 + 363/512)
7548718732109204835, // 2^(62 + 364/512)
7558945131535523009, // 2^(62 + 365/512)
7569185384868568661, // 2^(62 + 366/512)
7579439510876504817, // 2^(62 + 367/512)
7589707528352920109, // 2^(62 + 368/512)
7599989456116863214, // 2^(62 + 369/512)
7610285313012877354, // 2^(62 + 370/512)
7620595117911034823, // 2^(62 + 371/512)
7630918889706971580, // 2^(62 + 372/512)
7641256647321921879, // 2^(62 + 373/512)
7651608409702752944, // 2^(62 + 374/512)
7661974195821999698, // 2^(62 + 375/512)
7672354024677899535, // 2^(62 + 376/512)
7682747915294427138, // 2^(62 + 377/512)
7693155886721329348, // 2^(62 + 378/512)
7703577958034160077, // 2^(62 + 379/512)
7714014148334315267, // 2^(62 + 380/512)
7724464476749067904, // 2^(62 + 381/512)
7734928962431603070, // 2^(62 + 382/512)
7745407624561053049, // 2^(62 + 383/512)
7755900482342532474, // 2^(62 + 384/512)
7766407555007173531, // 2^(62 + 385/512)
7776928861812161204, // 2^(62 + 386/512)
7787464422040768568, // 2^(62 + 387/512)
7798014255002392130, // 2^(62 + 388/512)
7808578380032587222, // 2^(62 + 389/512)
7819156816493103437, // 2^(62 + 390/512)
7829749583771920117, // 2^(62 + 391/512)
7840356701283281882, // 2^(62 + 392/512)
7850978188467734219, // 2^(62 + 393/512)
7861614064792159106, // 2^(62 + 394/512)
7872264349749810693, // 2^(62 + 395/512)
7882929062860351032, // 2^(62 + 396/512)
7893608223669885848, // 2^(62 + 397/512)
7904301851751000362, // 2^(62 + 398/512)
7915009966702795169, // 2^(62 + 399/512)
7925732588150922154, // 2^(62 + 400/512)
7936469735747620463, // 2^(62 + 401/512)
7947221429171752520, // 2^(62 + 402/512)
7957987688128840099, // 2^(62 + 403/512)
7968768532351100432, // 2^(62 + 404/512)
7979563981597482381, // 2^(62 + 405/512)
7990374055653702648, // 2^(62 + 406/512)
8001198774332282039, // 2^(62 + 407/512)
8012038157472581777, // 2^(62 + 408/512)
8022892224940839862, // 2^(62 + 409/512)
8033760996630207480, // 2^(62 + 410/512)
8044644492460785468, // 2^(62 + 411/512)
8055542732379660816, // 2^(62 + 412/512)
8066455736360943232, // 2^(62 + 413/512)
8077383524405801747, // 2^(62 + 414/512)
8088326116542501375, // 2^(62 + 415/512)
8099283532826439816, // 2^(62 + 416/512)
8110255793340184219, // 2^(62 + 417/512)
8121242918193507985, // 2^(62 + 418/512)
8132244927523427625, // 2^(62 + 419/512)
8143261841494239668, // 2^(62 + 420/512)
8154293680297557614, // 2^(62 + 421/512)
8165340464152348946, // 2^(62 + 422/512)
8176402213304972184, // 2^(62 + 423/512)
8187478948029213992, // 2^(62 + 424/512)
8198570688626326336, // 2^(62 + 425/512)
8209677455425063692, // 2^(62 + 426/512)
8220799268781720304, // 2^(62 + 427/512)
8231936149080167494, // 2^(62 + 428/512)
8243088116731891019, // 2^(62 + 429/512)
8254255192176028480, // 2^(62 + 430/512)
8265437395879406787, // 2^(62 + 431/512)
8276634748336579668, // 2^(62 + 432/512)
8287847270069865227, // 2^(62 + 433/512)
8299074981629383563, // 2^(62 + 434/512)
8310317903593094432, // 2^(62 + 435/512)
8321576056566834961, // 2^(62 + 436/512)
8332849461184357413, // 2^(62 + 437/512)
8344138138107367007, // 2^(62 + 438/512)
8355442108025559785, // 2^(62 + 439/512)
8366761391656660532, // 2^(62 + 440/512)
8378096009746460745, // 2^(62 + 441/512)
8389445983068856661, // 2^(62 + 442/512)
8400811332425887324, // 2^(62 + 443/512)
8412192078647772715, // 2^(62 + 444/512)
8423588242592951930, // 2^(62 + 445/512)
8434999845148121405, // 2^(62 + 446/512)
8446426907228273202, // 2^(62 + 447/512)
8457869449776733335, // 2^(62 + 448/512)
8469327493765200162, // 2^(62 + 449/512)
8480801060193782815, // 2^(62 + 450/512)
8492290170091039695, // 2^(62 + 451/512)
8503794844514017006, // 2^(62 + 452/512)
8515315104548287352, // 2^(62 + 453/512)
8526850971307988384, // 2^(62 + 454/512)
8538402465935861492, // 2^(62 + 455/512)
8549969609603290562, // 2^(62 + 456/512)
8561552423510340771, // 2^(62 + 457/512)
8573150928885797448, // 2^(62 + 458/512)
8584765146987204981, // 2^(62 + 459/512)
8596395099100905773, // 2^(62 + 460/512)
8608040806542079262, // 2^(62 + 461/512)
8619702290654780981, // 2^(62 + 462/512)
8631379572811981681, // 2^(62 + 463/512)
8643072674415606501, // 2^(62 + 464/512)
8654781616896574194, // 2^(62 + 465/512)
8666506421714836405, // 2^(62 + 466/512)
8678247110359417001, // 2^(62 + 467/512)
8690003704348451460, // 2^(62 + 468/512)
8701776225229226304, // 2^(62 + 469/512)
8713564694578218592, // 2^(62 + 470/512)
8725369134001135468, // 2^(62 + 471/512)
8737189565132953756, // 2^(62 + 472/512)
8749026009637959614, // 2^(62 + 473/512)
8760878489209788238, // 2^(62 + 474/512)
8772747025571463624, // 2^(62 + 475/512)
8784631640475438381, // 2^(62 + 476/512)
8796532355703633598, // 2^(62 + 477/512)
8808449193067478767, // 2^(62 + 478/512)
8820382174407951755, // 2^(62 + 479/512)
8832331321595618838, // 2^(62 + 480/512)
8844296656530674782, // 2^(62 + 481/512)
8856278201142982984, // 2^(62 + 482/512)
8868275977392115661, // 2^(62 + 483/512)
8880290007267394102, // 2^(62 + 484/512)
8892320312787928965, // 2^(62 + 485/512)
8904366916002660636, // 2^(62 + 486/512)
8916429838990399638, // 2^(62 + 487/512)
8928509103859867100, // 2^(62 + 488/512)
8940604732749735273, // 2^(62 + 489/512)
8952716747828668109, // 2^(62 + 490/512)
8964845171295361890, // 2^(62 + 491/512)
8976990025378585914, // 2^(62 + 492/512)
8989151332337223232, // 2^(62 + 493/512)
9001329114460311450, // 2^(62 + 494/512)
9013523394067083576, // 2^(62 + 495/512)
9025734193507008925, // 2^(62 + 496/512)
9037961535159834084, // 2^(62 + 497/512)
9050205441435623930, // 2^(62 + 498/512)
9062465934774802696, // 2^(62 + 499/512)
9074743037648195108, // 2^(62 + 500/512)
9087036772557067563, // 2^(62 + 501/512)
9099347162033169373, // 2^(62 + 502/512)
9111674228638774058, // 2^(62 + 503/512)
9124017994966720698, // 2^(62 + 504/512)
9136378483640455343, // 2^(62 + 505/512)
9148755717314072474, // 2^(62 + 506/512)
9161149718672356526, // 2^(62 + 507/512)
9173560510430823461, // 2^(62 + 508/512)
9185988115335762405, // 2^(62 + 509/512)
9198432556164277330, // 2^(62 + 510/512)
9210893855724328808, // 2^(62 + 511/512)
9223372036854775808, // 2^(62 + 512/512)
];