aboutsummaryrefslogtreecommitdiffstats
path: root/nihav-mpeg/src/codecs/aac/tables.rs
blob: 1536127f723b7612c5ba77bc377098a3f9f7da8e (plain) (blame)
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
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
const SWB_OFFSET_48K_LONG: [usize; 49+1] = [
      0,   4,   8,  12,  16,  20,  24,  28,
     32,  36,  40,  48,  56,  64,  72,  80,
     88,  96, 108, 120, 132, 144, 160, 176,
    196, 216, 240, 264, 292, 320, 352, 384,
    416, 448, 480, 512, 544, 576, 608, 640,
    672, 704, 736, 768, 800, 832, 864, 896,
    928, 1024
];
const SWB_OFFSET_48K_SHORT: [usize; 14+1] = [
    0, 4, 8, 12, 16, 20, 28, 36, 44, 56, 68, 80, 96, 112, 128
];
const SWB_OFFSET_32K_LONG: [usize; 51+1] = [
      0,   4,   8,  12,  16,  20,  24,  28,
     32,  36,  40,  48,  56,  64,  72,  80,
     88,  96, 108, 120, 132, 144, 160, 176,
    196, 216, 240, 264, 292, 320, 352, 384,
    416, 448, 480, 512, 544, 576, 608, 640,
    672, 704, 736, 768, 800, 832, 864, 896,
    928, 960, 992, 1024
];
const SWB_OFFSET_8K_LONG: [usize; 40+1] = [
      0,  12,  24,  36,  48,  60,  72,  84,
     96, 108, 120, 132, 144, 156, 172, 188,
    204, 220, 236, 252, 268, 288, 308, 328,
    348, 372, 396, 420, 448, 476, 508, 544,
    580, 620, 664, 712, 764, 820, 880, 944,
    1024
];
const SWB_OFFSET_8K_SHORT: [usize; 15+1] = [
    0, 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 60, 72, 88, 108, 128
];
const SWB_OFFSET_16K_LONG: [usize; 43+1] = [
      0,   8,  16,  24,  32,  40,  48,  56,
     64,  72,  80,  88, 100, 112, 124, 136,
    148, 160, 172, 184, 196, 212, 228, 244,
    260, 280, 300, 320, 344, 368, 396, 424,
    456, 492, 532, 572, 616, 664, 716, 772,
    832, 896, 960, 1024
];
const SWB_OFFSET_16K_SHORT: [usize; 15+1] = [
    0, 4, 8, 12, 16, 20, 24, 28, 32, 40, 48, 60, 72, 88, 108, 128
];
const SWB_OFFSET_24K_LONG: [usize; 47+1] = [
      0,   4,   8,  12,  16,  20,  24,  28,
     32,  36,  40,  44,  52,  60,  68,  76,
     84,  92, 100, 108, 116, 124, 136, 148,
    160, 172, 188, 204, 220, 240, 260, 284,
    308, 336, 364, 396, 432, 468, 508, 552,
    600, 652, 704, 768, 832, 896, 960, 1024
];
const SWB_OFFSET_24K_SHORT: [usize; 15+1] = [
    0, 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 64, 76, 92, 108, 128
];
const SWB_OFFSET_64K_LONG: [usize; 47+1] = [
      0,   4,   8,  12,  16,  20,  24,  28,
     32,  36,  40,  44,  48,  52,  56,  64,
     72,  80,  88, 100, 112, 124, 140, 156,
    172, 192, 216, 240, 268, 304, 344, 384,
    424, 464, 504, 544, 584, 624, 664, 704,
    744, 784, 824, 864, 904, 944, 984, 1024
];
const SWB_OFFSET_64K_SHORT: [usize; 12+1] = [
    0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
];
const SWB_OFFSET_96K_LONG: [usize; 41+1] = [
      0,   4,   8,  12,  16,  20,  24,  28,
     32,  36,  40,  44,  48,  52,  56,  64,
     72,  80,  88,  96, 108, 120, 132, 144,
    156, 172, 188, 212, 240, 276, 320, 384,
    448, 512, 576, 640, 704, 768, 832, 896,
    960, 1024
];

#[derive(Clone,Copy)]
pub struct GASubbandInfo {
    pub min_srate:     u32,
    pub long_bands:    &'static [usize],
    pub short_bands:   &'static [usize],
}

impl GASubbandInfo {
    pub fn find(srate: u32) -> GASubbandInfo {
        for sbi in AAC_SUBBAND_INFO.iter() {
            if srate >= sbi.min_srate {
                return *sbi;
            }
        }
        unreachable!("")
    }
    pub fn find_idx(srate: u32) -> usize {
        for (i, sbi) in AAC_SUBBAND_INFO.iter().enumerate() {
            if srate >= sbi.min_srate {
                return i;
            }
        }
        unreachable!("")
    }
}

pub const AAC_SUBBAND_INFO: [GASubbandInfo; 12] = [
    GASubbandInfo { min_srate: 92017, long_bands: &SWB_OFFSET_96K_LONG, short_bands: &SWB_OFFSET_64K_SHORT }, //96K
    GASubbandInfo { min_srate: 75132, long_bands: &SWB_OFFSET_96K_LONG, short_bands: &SWB_OFFSET_64K_SHORT }, //88.2K
    GASubbandInfo { min_srate: 55426, long_bands: &SWB_OFFSET_64K_LONG, short_bands: &SWB_OFFSET_64K_SHORT }, //64K
    GASubbandInfo { min_srate: 46009, long_bands: &SWB_OFFSET_48K_LONG, short_bands: &SWB_OFFSET_48K_SHORT }, //48K
    GASubbandInfo { min_srate: 37566, long_bands: &SWB_OFFSET_48K_LONG, short_bands: &SWB_OFFSET_48K_SHORT }, //44.1K
    GASubbandInfo { min_srate: 27713, long_bands: &SWB_OFFSET_32K_LONG, short_bands: &SWB_OFFSET_48K_SHORT }, //32K
    GASubbandInfo { min_srate: 23004, long_bands: &SWB_OFFSET_24K_LONG, short_bands: &SWB_OFFSET_24K_SHORT }, //24K
    GASubbandInfo { min_srate: 18783, long_bands: &SWB_OFFSET_24K_LONG, short_bands: &SWB_OFFSET_24K_SHORT }, //22.05K
    GASubbandInfo { min_srate: 13856, long_bands: &SWB_OFFSET_16K_LONG, short_bands: &SWB_OFFSET_16K_SHORT }, //16K
    GASubbandInfo { min_srate: 11502, long_bands: &SWB_OFFSET_16K_LONG, short_bands: &SWB_OFFSET_16K_SHORT }, //12K
    GASubbandInfo { min_srate:  9391, long_bands: &SWB_OFFSET_16K_LONG, short_bands: &SWB_OFFSET_16K_SHORT }, //11.025K
    GASubbandInfo { min_srate:     0, long_bands: &SWB_OFFSET_8K_LONG,  short_bands: &SWB_OFFSET_8K_SHORT  }, //8K
];

pub const CBRT_TAB: [f32; 1024] = [
     0.00000000000000000000,     1.00000000000000000000,
     2.51984209978974632951,     4.32674871092222514692,
     6.34960420787279789894,     8.54987973338348494669,
    10.90272355699283795323,    13.39051827940672370829,
    16.00000000000000000000,    18.72075440746713703075,
    21.54434690031883721721,    24.46378099626247073259,
    27.47314182127996482685,    30.56735094036984736325,
    33.74199169845321980556,    36.99318111495705152207,
    40.31747359663594127180,    43.71178704119000104200,
    47.17334509576013892806,    50.69963132571695247884,
    54.28835233189813142998,    57.93740770400353405834,
    61.64486527441851665347,    65.40894053658600598618,
    69.22797937475560235079,    73.10044345532165163727,
    77.02489777859163322491,    81.00000000000000000000,
    85.02449121251855054238,    89.09718794488957150508,
    93.21697517861576600561,    97.38280022413318313809,
   101.59366732596476638327,   105.84863288986227408821,
   110.14680124343443505670,   114.48732085660064048617,
   118.86938096020656061830,   123.29220851090027062178,
   127.75506545836060596244,   132.25724627755250371381,
   136.79807573413575914734,   141.37690685569194574577,
   145.99311908523089104057,   150.64611659662913933484,
   155.33532675434677209529,   160.06019870205282626894,
   164.82020206673353832582,   169.61482576651865039408,
   174.44357691188540725200,   179.30597979112560434389,
   184.20157493201933028622,   189.12991823257566310337,
   194.09058015449690863083,   199.08314497371681634792,
   204.10721008296945269011,   209.16238534187653901861,
   214.24829247050757933085,   219.36456448277788891331,
   224.51084515641221133822,   229.68678853652237223860,
   234.89205847013181572378,   240.12632816923256494511,
   245.38927980018513969113,   250.68060409747268715691,
   256.00000000000000000000,   261.34717430828876844414,
   266.72184136106455787047,   272.12372272986054586756,
   277.55254693037966879699,   283.00804914946197900670,
   288.48997098659897735513,   293.99806020902258074661,
   299.53207051947419248945,   305.09176133582992811722,
   310.67689758182217143506,   316.28724948815596606218,
   321.92259240337188045261,   327.58270661385544475227,
   333.26737717243751234639,   338.97639373507036181617,
   344.70955040510139547588,   350.46664558470023690369,
   356.24748183302617593933,   362.05186573075151786620,
   367.87960775058269831798,   373.73052213344523844239,
   379.60442677002092443080,   385.50114308734617184858,
   391.42049594019953172189,   397.36231350702384937148,
   403.32642719014482378002,   409.31267152006274646544,
   415.32088406360812690827,   421.35090533576482825936,
   427.40257871497632601129,   433.47575036176183911002,
   439.57026914047943723453,   445.68598654408286118715,
   451.82275662172776382183,   457.98043590909143751160,
   464.15888336127788923421,   470.35796028818739866912,
   476.57753029223648782021,   482.81745920832057938659,
   489.07761504591755781262,   495.35786793323600251610,
   501.65809006331706535811,   507.97815564200383854506,
   514.31794083769662981941,   520.67732373281684917378,
   527.05618427690623677486,   533.45440424129194197023,
   539.87186717525151688967,   546.30845836361522948115,
   552.76406478574624458604,   559.23857507584218167368,
   565.73187948450434582522,   572.24386984152355579202,
   578.77443951983397081167,   585.32348340058865499255,
   591.89089783931282434796,   598.47658063309280506205,
   605.08043098876069996084,   611.70234949203662112128,
   618.34223807759210601741,   625.00000000000000000000,
   631.67553980553766357232,   638.36876330481185599386,
   645.07957754617506035597,   651.80789078990435598324,
   658.55361248311521501881,   665.31665323538380544696,
   672.09692479505252760063,   678.89434002619459701705,
   685.70881288621451907474,   692.54025840406228068201,
   699.38859265904001667978,   706.25373276018079478853,
   713.13559682618000593854,   720.03410396586064910582,
   726.94917425915456366424,   733.88072873858238939593,
   740.82868937121572754752,   747.79297904110563613885,
   754.77352153216222284228,   761.77024151147069871214,
   768.78306451302982865267,   775.81191692189926159948,
   782.85672595874274425816,   789.91741966475472119892,
   796.99392688695829953156,   804.08617726386301105625,
   811.19410121147123967046,   818.31762990962259694715,
   825.45669528866592656295,   832.61123001644899795861,
   839.78116748561631393306,   846.96644180120580445741,
   854.16698776853551318295,   861.38274088137170167004,
   868.61363731037010287198,   875.85961389178234827331,
   883.12060811641987421145,   890.39655811886788240221,
   897.68740266694218788475,   904.99308115138203573017,
   912.31353357577220569881,   919.64870054668795194525,
   926.99852326405654493458,   934.36294351172939189390,
   941.74190364825891581901,   949.13534659787456579093,
   956.54321584165251919905,   963.96545540887381510030,
   971.40200986856583079545,   978.85282432122217951383,
   986.31784439069626646659,   993.79701621626389429314,
  1001.29028644485045643113,  1008.79760222341839923538,
  1016.31891119151077035601,  1023.85416147394680285920,
  1031.40330167366561163045,  1038.96628086471420034155,
  1046.54304858537609578013,  1054.13355483143703939331,
  1061.73775004958427555737,  1069.35558513093608150558,
  1076.98701140469828584568,  1084.63198063194462037109,
  1092.29044499951784480280,  1099.96235711404867558273,
  1107.64766999608963760287,  1115.34633707436104324401,
  1123.05831218010638496227,  1130.78354954155450739684,
  1138.52200377848600103792,  1146.27362989690133392041,
  1154.03838328378830932881,  1161.81621970198650622225,
  1169.60709528514642619770,  1177.41096653278113548740,
  1185.22779030540825227308,  1193.05752381978019055519,
  1200.90012464420063014857,  1208.75555069392523822539,
  1216.62376022664472328393,  1224.50471183804835456776,
  1232.39836445746613159991,  1240.30467734358783752798,
  1248.22361008025725843679,  1256.15512257233989682593,
  1264.09917504166255217108,  1272.05572802302318588953,
  1280.02474236026952900065,  1288.00617920244493252267,
  1296.00000000000000000000,  1304.00616650106857938578,
  1312.02464074780672969490,  1320.05538507279331269587,
  1328.09836209549089589253,  1336.15353471876568627698,
  1344.22086612546524725007,  1352.30031977505278348508,
  1360.39185940029680869324,  1368.49544900401504159392,
  1376.61105285587140485715,  1384.73863548922502932755,
  1392.87816169803019348869,  1401.02959653378615546822,
  1409.19290530253585926207,  1417.36805356191252347223,
  1425.55500711823314408286,  1433.75373202363796717790,
  1441.96419457327500999135,  1450.18636130252873140401,
  1458.42019898429197439581,  1466.66567462628032426218,
  1474.92275546838804685322,  1483.19140898008479051460,
  1491.47160285785225609146,  1499.76330502266005625343,
  1508.06648361748000563721,  1516.38110700483809947476,
  1524.70714376440345704507,  1533.04456269061352195578,
  1541.39333279033482841517,  1549.75342328055865850746,
  1558.12480358613093022677,  1566.50744333751567235576,
  1574.90131236859145593904,  1583.30638071448016673656,
  1591.72261860940751701829,  1600.14999648459470852119,
  1608.58848496618067173372,  1617.03805487317431896934,
  1625.49867721543626211788,  1633.97032319168945711235,
  1642.45296418755824970353,  1650.94657177363530877346,
  1659.45111770357594371603,  1667.96657391221931470762,
  1676.49291251373605427623,  1685.03010579980182968210,
  1693.57812623779638539637,  1702.13694646902761503054,
  1710.70653930698022150790,  1719.28687773558853417906,
  1727.87793490753306001649,  1736.47968414256035553342,
  1745.09209892582581461053,  1753.71515290625897572481,
  1762.34881989495096090911,  1770.99307386356366605273,
  1779.64788894276033072739,  1788.31323942065712335581,
  1796.98909974129538437048,  1805.67544450313417848685,
  1814.37224845756281313162,  1823.07948650743298813106,
  1831.79713370561024778071,  1840.52516525354441361073,
  1849.26355649985868223639,  1858.01228293895707941129,
  1866.77132020964996733055,  1875.54064409379730829778,
  1884.32023051496939389886,  1893.11005553712475456384,
  1901.91009536330496989490,  1910.72032633434610589043,
  1919.54072492760651020272,  1928.37126775571070221481,
  1937.21193156530909970921,  1946.06269323585332867860,
  1954.92352977838686823377,  1963.79441833435078658320,
  1972.67533617440432995075,  1981.56626069726012933804,
  1990.46716942853379578240,  1999.37804001960767870357,
  2008.29885024650856563799,  2017.22957800879910723013,
  2026.17020132848275375266,  2035.12069834892199446178,
  2044.08104733376969540137,  2053.05122666591333334706,
  2062.03121484643192958368,  2071.02099049356548902559,
  2080.02053234169675459475,  2089.02981924034509042325,
  2098.04883015317231039884,  2107.07754415700027205791,
  2116.11594044084005944439,  2125.16399830493258112277,
  2134.22169715980041368706,  2143.28901652531072254494,
  2152.36593602974909707389,  2161.45243540890413759114,
  2170.54849450516263667159,  2179.65409326661519891827,
  2188.76921174617214635986,  2197.89383010068955948111,
  2207.02792859010530656136,  2216.17148757658491620189,
  2225.32448752367715099525,  2234.48690899547914244191,
  2243.65873265581094990134,  2252.83993926739940822900,
  2262.03050969107113193485,  2271.23042488495454521456,
  2280.43966590369080978218,  2289.65821389765352475883,
  2298.88605011217707485783,  2308.12315588679350497977,
  2317.36951265447780206959,  2326.62510194090146635951,
  2335.88990536369425665173,  2345.16390463171399625936,
  2354.44708154432432710568,  2363.73941799068030339571,
  2373.04089594902171590868,  2382.35149748597404119111,
  2391.67120475585691100925,  2401.00000000000000000000,
  2410.33786554606622936004,  2419.68478380738218880719,
  2429.04073728227567767649,  2438.40570855342027001293,
  2447.77968028718680898823,  2457.16263523300173722970,
  2466.55455622271217223446,  2475.95542616995763639656,
  2485.36522806954835350253,  2494.78394499685002421155,
  2504.21156010717499516846,  2513.64805663517973736423,
  2523.09341789426855039372,  2532.54762727600341175530,
  2542.01066824951988970990,  2551.48252436094904179178,
  2560.96317923284522030583,  2570.45261656361970836095,
  2579.95082012698011153459,  2589.45777377137543011521,
  2598.97346141944673962837,  2608.49786706748340700482,
  2618.03097478488477244764,  2627.57276871362722634970,
  2637.12323306773661321603,  2646.68235213276589484101,
  2656.25011026527800629933,  2665.82649189233383886000,
  2675.41148151098528600189,  2685.00506368777328803208,
  2694.60722305823081375417,  2704.21794432639071681693,
  2713.83721226429840630831,  2723.46501171152927180431,
  2733.10132757471080422102,  2742.74614482704935401302,
  2752.39944850786146976073,  2762.06122372210976129745,
  2771.73145563994323122640,  2781.41012949624202083838,
  2791.09723059016651603505,  2800.79274428471076089283,
  2810.49665600626012615697,  2820.20895124415318114955,
  2829.92961555024771902502,  2839.65863453849088445739,
  2849.39599388449335539114,  2859.14167932510752976443,
  2868.89567665800966950546,  2878.65797174128595490861,
  2888.42855049302240274501,  2898.20739889089860213409,
  2907.99450297178522342112,  2917.78984883134525549784,
  2927.59342262363892738373,  2937.40521056073227132648,
  2947.22519891230928461227,  2957.05337400528764764422,
  2966.88972222343795795776,  2976.73423000700643820062,
  2986.58688385234107848682,  2996.44767031152117328537,
  3006.31657599199021347845,  3016.19358755619209563972,
  3026.07869172121060962696,  3035.97187525841216786546,
  3045.87312499309173830491,  3055.78242780412194573689,
  3065.69977062360530431151,  3075.62514043652954696498,
  3085.55852428042601551033,  3095.49990924503107792656,
  3105.44928247195053809670,  3115.40663115432700493820,
  3125.37194253651018711372,  3135.34520391373008166446,
  3145.32640263177302305956,  3155.31552608666056211642,
  3165.31256172433114230614,  3175.31749704032454349396,
  3185.33031957946906157026,  3195.35101693557139501636,
  3205.37957675110920726017,  3215.41598671692633695265,
  3225.46023457193062612391,  3235.51230810279433813198,
  3245.57219514365713714379,  3255.63988357583160145749,
  3265.71536132751124304541,  3275.79861637348100614534,
  3285.88963673483021850807,  3295.98841047866796875294,
  3306.09492571784088369122,  3316.20917061065327974332,
  3326.33113336058966400132,  3336.46080221603955851080,
  3346.59816547002462430149,  3356.74321145992806000841,
  3366.89592856722625133717,  3377.05630521722264744393,
  3387.22432987878384105568,  3397.39999106407782850466,
  3407.58327732831442777872,  3417.77417726948783081903,
  3427.97267952812126929741,  3438.17877278701376998757,
  3448.39244577098897963983,  3458.61368724664603711446,
  3468.84248602211247151468,  3479.07883094679910570283,
  3489.32271091115694452744,  3499.57411484643602694966,
  3509.83303172444622261685,  3520.09945055731995207868,
  3530.37336039727681180980,  3540.65475033639008443415,
  3550.94360950635511419560,  3561.23992707825953026111,
  3571.54369226235529746609,  3581.85489430783257756550,
  3592.17352250259538137946,  3602.49956617303899469964,
  3612.83301468382916011676,  3623.17385743768299671973,
  3633.52208387515164043012,  3643.87768347440458818515,
  3654.24064575101572849320,  3664.61096025775104210727,
  3674.98861658435795582168,  3685.37360435735633314170,
  3695.76591323983108607973,  3706.16553293122639147692,
  3716.57245316714149657125,  3726.98666371912809803252,
  3737.40815439448927900602,  3747.83691503607998890009,
  3758.27293552210905158456,  3768.71620576594268574038,
  3779.16671571590952406431,  3789.62445535510711613307,
  3800.08941470120990058954,  3810.56158380627863273143,
  3821.04095275657125316944,  3831.52751167235518402572,
  3842.02125070772103908753,  3852.52216005039773354970,
  3863.03022992156898112320,  3873.54545057569116485685,
  3884.06781230031256788788,  3894.59730541589395251890,
  3905.13392027563047362763,  3915.67764726527491511764,
  3926.22847680296223506229,  3936.78639933903540953137,
  3947.35140535587256080042,  3957.92348536771535935521,
  3968.50262992049868683036,  3979.08882959168154890793,
  3989.68207499007922574244,  4000.28235675569664914646,
  4010.88966555956299447478,  4021.50399210356747655837,
  4032.12532712029633791399,  4042.75366137287101918383,
  4053.38898565478749960955,  4064.03129078975679807556,
  4074.68056763154662330038,  4085.33680706382416263069,
  4096.00000000000000000000,  4106.67013738307315078222,
  4117.34721018547720623528,  4128.03120940892757431586,
  4138.72212608426980951926,  4149.41995127132902020943,
  4160.12467605876034467899,  4170.83629156390048577850,
  4181.55478893262029506899,  4192.28015933917839616801,
  4203.01239398607583929801,  4213.75148410391177646350,
  4224.49742095124014948910,  4235.25019581442738064250,
  4246.00980000751105750209,  4256.77622487205960371218,
  4267.54946177703292593209,  4278.32950211864402879055,
  4289.11633732022158978791,  4299.90995883207348494138,
  4310.71035813135125700262,  4321.51752672191551845492,
  4332.33145613420228011936,  4343.15213792509019866919,
  4353.97956367776873388570,  4364.81372500160720769251,
  4375.65461353202475838577,  4386.50222093036118091515,
  4397.35653888374864582436,  4408.21755910498429043578,
  4419.08527333240367268619,  4429.95967332975508245848,
  4440.84075088607470071224,  4451.72849781556260149140,
  4462.62290595745958760268,  4473.52396717592485378736,
  4484.43167335991447074703,  4495.34601642306068195203,
  4506.26698830355200656809,  4517.19458096401414299031,
  4528.12878639139166406679,  4539.06959659683049913613,
  4550.01700361556119502535,  4560.97099950678295016481,
  4571.93157635354841514175,  4582.89872626264925288657,
  4593.87244136450245283440,  4604.85271381303739213234,
  4615.83953578558363764099,  4626.83289948275948335408,
  4637.83279712836121605897,  4648.83922096925310379868,
  4659.85216327525810113911,  4670.87161633904926523501,
  4681.89757247604187653725,  4692.93002402428625872167,
  4703.96896334436129199791,  4715.01438281926861376317,
  4726.06627485432750178902,  4737.12463187707043306490,
  4748.18944633713931411373,  4759.26071070618237639862,
  4770.33841747775173168417,  4781.42255916720158215385,
  4792.51312831158707983646,  4803.61011746956382960024,
  4814.71351922128803175051,  4825.82332616831725755390,
  4836.93953093351185357207,  4848.06212616093696991768,
  4859.19110451576520574858,  4870.32645868417987021484,
  4881.46818137327884988080,  4892.61626531097908148277,
  4903.77070324592162282226,  4914.93148794737731830133,
  4926.09861220515305304894,  4937.27206882949859286685,
  4948.45185065101400370761,  4959.63795052055764637908,
  4970.83036130915474296638,  4982.02907590790650920278,
  4993.23408722789984897689,  5004.44538820011760647470,
  5015.66297177534937157352,  5026.88683092410283414352,
  5038.11695863651568266957,  5049.35334792226804374128,
  5060.59599181049545700030,  5071.84488334970238307574,
  5083.10001560767623794548,  5094.36138167140195238055,
  5105.62897464697705021443,  5116.90278765952724278460,
  5128.18281385312253464555,  5139.46904639069383739266,
  5150.76147845395008724735,  5162.06010324329586226046,
  5173.36491397774949620901,  5184.67590389486168473015,
  5195.99306625063457946696,  5207.31639431944136777275,
  5218.64588139394633349310,  5229.98152078502539476210,
  5241.32330582168711604207,  5252.67122985099419082825,
  5264.02528623798539017136,  5275.38546836559797512686,
  5286.75176963459056894345,  5298.12418346346648492902,
  5309.50270328839750768337,  5320.88732256314812363853,
  5332.27803475900019749466,  5343.67483336467809167120,
  5355.07771188627422464538,  5366.48666384717506608493,
  5377.90168278798756453909,  5389.32276226646600480462,
  5400.74989585743929171310,  5412.18307715273865739103,
  5423.62229976112578906462,  5435.06755730822137274201,
  5446.51884343643405268681,  5457.97615180488980016543,
  5469.43947608936169134078,  5480.90880998220008944137,
  5492.38414719226322928148,  5503.86548144484820056943,
  5515.35280648162232767522,  5526.84611606055494206099,
  5538.34540395584954594062,  5549.85066395787636263065,
  5561.36188987310527215822,  5572.87907552403912848766,
  5584.40221474914745648420,  5595.93130140280052425440,
  5607.46632935520379040912,  5619.00729249233272160991,
  5630.55418471586797863175,  5642.10699994313096796533,
  5653.66573210701975733484,  5665.23037515594535039405,
  5676.80092305376832011338,  5688.37736977973579808574,
  5699.95970932841881497846,  5711.54793570964999330223,
  5723.14204294846158631490,  5734.74202508502386342409,
  5746.34787617458383784274,  5757.95959028740433508500,
  5769.57716150870339937682,  5781.20058393859403575522,
  5792.82985169202428586548,  5804.46495889871763400807,
  5816.10589970311374244488,  5827.75266826430951326733,
  5839.40525875600047331188,  5851.06366536642248232785,
  5862.72788229829375934747,  5874.39790376875722747797,
  5886.07372400932317303513,  5897.75533726581221821409,
  5909.44273779829860414349,  5921.13591988105378255449,
  5932.83487780249031468554,  5944.53960586510607315938,
  5956.25009838542874748271,  5967.96634969396064926063,
  5979.68835413512381508465,  5991.41610606720540610287,
  6003.14959986230340175701,  6014.88882990627258469111,
  6026.63379059867081659247,  6038.38447635270560190282,
  6050.14088159518093714526,  6061.90300076644444515159,
  6073.67082832033479083862,  6085.44435872412937778478,
  6097.22358645849232292250,  6109.00850601742270810388,
  6120.79911190820310563222,  6132.59539865134837750251,
  6144.39736078055474512803,  6156.20499284264912773514,
  6168.01828939753874964564,  6179.83724501816101087963,
  6191.66185429043362385814,  6203.49211181320501021897,
  6215.32801219820495899381,  6227.16955006999554278829,
  6239.01672006592229121176,  6250.86951683606561894385,
  6262.72793504319250755710,  6274.59196936270843845418,
  6286.46161448260957694235,  6298.33686510343520349244,
  6310.21771593822039276018,  6322.10416171244893688591,
  6333.99619716400651305005,  6345.89381704313409249180,
  6357.79701611238158988695,  6369.70578914656175197088,
  6381.62013093270428235943,  6393.54003627001020304581,
  6405.46549996980644951853,  6417.39651685550069817135,
  6429.33308176253642558822,  6441.27518953834819653438,
  6453.22283504231718055181,  6465.17601314572689473778,
  6477.13471873171917212961,  6489.09894669525035361295,
  6501.06869194304770142251,  6513.04394939356603447102,
  6525.02471397694458232645,  6537.01098063496405738785,
  6549.00274432100394351959,  6561.00000000000000000000,
  6573.00274264840197907197,  6585.01096725413155631842,
  6597.02466881654047148971,  6609.04384234636887939973,
  6621.06848286570390962714,  6633.09858540793843229335,
  6645.13414501773003047301,  6657.17515675096017665240,
  6669.22161567469361224125,  6681.27351686713792941814,
  6693.33085541760335312165,  6705.39362642646272231859,
  6717.46182500511166973889,  6729.53544627592899810861,
  6741.61448537223725215708,  6753.69893743826348483974,
  6765.78879762910021658207,  6777.88406111066658705365,
  6789.98472305966969690639,  6802.09077866356613942311,
  6814.20222312052372075341,  6826.31905163938336666512,
  6838.44125943962121618801,  6850.56884175131089945917,
  6862.70179381508599938037,  6874.84011088210269634835,
  6886.98378821400259399540,  6899.13282108287572501106,
  6911.28720477122373691708,  6923.44693457192325563853,
  6935.61200578818942583722,  6947.78241373353962741599,
  6959.95815373175736693294,  6972.13922111685634302592,
  6984.32561123304468356362,  6996.51731943468935607670,
  7008.71434108628074710341,  7020.91667156239741249389,
  7033.12430624767099576007,  7045.33724053675131321109,
  7057.55546983427160692410,  7069.77898955481396265025,
  7082.00779512287489161680,  7094.24188197283107686025,
  7106.48124554890528130421,  7118.72588130513241758149,
  7130.97578470532577893077,  7143.23095122304342902888,
  7155.49137634155475034353,  7167.75705555380715104744,
  7180.02798436239292783509,  7192.30415827951628499159,
  7204.58557282696050807078,  7216.87222353605529190470,
  7229.16410594764422115706,  7241.46121561205240328318,
  7253.76354808905425274642,  7266.07109894784142525374,
  7278.38386376699090206390,  7290.70183813443322186472,
  7303.02501764742086110393,  7315.35339791249676095048,
  7327.68697454546300019352,  7340.02574317134961247545,
  7352.36969942438354907735,  7364.71883894795778397085,
  7377.07315739460056168550,  7389.43265042594478740465,
  7401.79731371269755702865,  7414.16714293460982776414,
  7426.54213378044622775532,  7438.92228194795500484219,
  7451.30758314383811142479,  7463.69803308372142754257,
  7476.09362749212511916383,  7488.49436210243413217391,
  7500.90023265686882001713,  7513.31123490645570638402,
  7525.72736461099837871413,  7538.14861753904851599415,
  7550.57498946787704637205,  7563.00647618344543624577,
  7575.44307348037710802987,  7587.88477716192898884021,
  7600.33158303996318558849,  7612.78348693491878936343,
  7625.24048467578380513161,  7637.70257210006720890322,
  7650.16974505377112961555,  7662.64199939136315583508,
  7675.11933097574876712015,  7687.60173567824388692928,
  7700.08920937854756073745,  7712.58174796471475346778,
  7725.07934733312927027112,  7737.58200338847679579618,
  7750.08971204371805550856,  7762.60246922006209438555,
  7775.12027084693967473241,  7787.64311286197679203067,
  7800.17099121096830812588,  7812.70390184785169990017,
  7825.24184073468092493210,  7837.78480384160040191734,
  7850.33278714681910501999,  7862.88578663658477368105,
  7875.44379830515823408240,  7888.00681815478783417799,
  7900.57484219568399051786,  7913.14786644599384617545,
  7925.72588693177604026621,  7938.30889968697558637233,
  7950.89690075339886199671,  7963.48988618068870553391,
  7976.08785202629962245361,  7988.69079435547309920497,
  8001.29870924121302363592,  8013.91159276426121269163,
  8026.52944101307304565823,  8039.15225008379320278156,
  8051.78001608023150890370,  8064.41273511383888132599,
  8077.05040330368338082659,  8089.69301677642636665882,
  8102.34057166629875317403,  8114.99306411507736889548,
  8127.65049027206141672979,  8140.31284629404903582077,
  8152.98012834531396217282,  8165.65233259758229072790,
  8178.32945523000933527156,  8191.01149242915658802209,
  8203.69844038896877663000,  8216.39029531075101944113,
  8229.08705340314607703717,  8241.78871088211170136849,
  8254.49526397089807995722,  8267.20670890002537611481,
  8279.92304190726136400070,  8292.64425923759915859953,
  8305.37035714323503855602,  8318.10133188354636412492,
  8330.83717972506958670621,  8343.57789694147835174732,
  8356.32347981356169273434,  8369.07392462920231766098,
  8381.82922768335498620538,  8394.58938527802497683936,
  8407.35439372224664477349,  8420.12424933206206896317,
  8432.89894843049978849116,  8445.67848734755362729685,
  8458.46286242016160747911,  8471.25206999218494970727,
  8484.04610641438716120590,  8496.84496804441321059084,
  8509.64865124676878864997,  8522.45715239279965516631,
  8535.27046786067107144753,  8548.08859403534731718578,
  8560.91152730857129187036,  8573.73926407884420113728,
  8586.57180075140532568189,  8599.40913373821187349859,
  8612.25125945791891603130,  8625.09817433585940440776,
  8637.94987480402427015764,  8650.80635730104260524297,
  8663.66761827216192428881,  8676.53365416922850688004,
  8689.40446145066782060646,  8702.28003658146502360539,
  8715.16037603314554565620,  8728.04547628375574998272,
  8740.93533381784367170779,  8753.82994512643983591489,
  8766.72930670703815266216,  8779.63341506357688956440,
  8792.54226670641972103486,  8805.45585815233685463950,
  8818.37418592448623295485,  8831.29724655239481182245,
  8844.22503657193991329768,  8857.15755252533065409682,
  8870.09479096108944853748,  8883.03674843403358526677,
  8895.98342150525687870682,  8908.93480674211139299288,
  8921.89090071818923967331,  8934.85170001330444790407,
  8947.81720121347490669911,  8960.78740091090438026442,
  8973.76229570396459291488,  8986.74188219717738752686,
  8999.72615700119695318995,  9012.71511673279212446349,
  9025.70875801482875019123,  9038.70707747625213191330,
  9051.71007175206953312281,  9064.71773748333275594355,
  9077.73007131712078715054,  9090.74706990652251368607,
  9103.76872991061950484766,  9116.79504799446886251108,
  9129.82602082908613942191,  9142.86164509142832424162,
  9155.90191746437689268222,  9168.94683463672092627827,
  9181.99639330314029606730,  9195.05059016418891276019,
  9208.10942192627804188897,  9221.17288530165968454069,
  9234.24097700841002200150,  9247.31369377041292633080,
  9260.39103231734353299664,  9273.47298938465187946356,
  9286.55956171354660560232,  9299.65074605097871845192,
  9312.74653914962541915552,  9325.84693776787399248864,
  9338.95193866980575913278,  9352.06153862518008973572,
  9365.17573440941847989094,  9378.29452280358868760422,
  9391.41790059438893098935,  9404.54586457413214701816,
  9417.67841154073031065777,  9430.81553829767881457275,
  9443.95724165404090730863,  9457.10351842443219324286,
  9470.25436542900518957756,  9483.40977949343394413155,
  9496.56975744889871041871,  9509.73429613207068207016,
  9522.90339238509678525100,  9536.07704305558452818162,
  9549.25524499658690982059,  9562.43799506658738376092,
  9575.62529012948488100320,  9588.81712705457888830451,
  9602.01350271655458365615,  9615.21441399546802737649,
  9628.41985777673141016949,  9641.62983095109835478100,
  9654.84433041464927614229,  9668.06335306877679352549,
  9681.28689582017119948074,  9694.51495558080598280444,
  9707.74752926792340594895,  9720.98461380402013630368,
  9734.22620611683293173133,  9747.47230313932437868574,
  9760.72290180966868520666,  9773.97799907123752523169,
  9787.23759187258593795101,  9800.50167716743827644733,
  9813.77025191467421224699,  9827.04331307831478939152,
  9840.32085762750853119418,  9853.60288253651759901763,
  9866.88938478470400149335,  9880.18036135651585503519,
  9893.47580924147369628929,  9906.77572543415684308519,
  9920.08010693418980803143,  9933.38895074622876047662,
  9946.70225387994803934974,  9960.02001335002671561073,
  9973.34222617613520310298,  9986.66888938292192045504,
 10000.00000000000000000000, 10013.33555506193404666240,
 10026.67555160822694520477, 10040.01998668330671538322,
 10053.36885733651341520795, 10066.72216062208609227387,
 10080.07989359914978294520, 10093.44205333170255827926,
 10106.80863688860261716795, 10120.17964134355542735065,
 10133.55506377510091249443, 10146.93490126660068500663,
 10160.31915090622532695087, 10173.70780978694171573050,
 10187.10087500650039581928, 10200.49834366742299677666,
 10213.90021287698969591272, 10227.30647974722672687969,
 10240.71714139489393278014, 10254.13219494147236458541,
 10267.55163751315192418952, 10280.97546624081905065854,
 10294.40367826004445332739, 10307.83627071107088560176
];