#![allow(clippy::excessive_precision)]
#![allow(clippy::unreadable_literal)]
pub(crate) const SINE: &[f32] = &[
-0.006135884649154475,
-0.012271538285719925,
-0.01840672990580482,
-0.024541228522912288,
-0.030674803176636626,
-0.03680722294135883,
-0.04293825693494082,
-0.049067674327418015,
-0.055195244349689934,
-0.06132073630220858,
-0.06744391956366405,
-0.07356456359966743,
-0.07968243797143013,
-0.0857973123444399,
-0.09190895649713272,
-0.0980171403295606,
-0.10412163387205459,
-0.11022220729388306,
-0.11631863091190475,
-0.1224106751992162,
-0.12849811079379317,
-0.13458070850712617,
-0.1406582393328492,
-0.14673047445536175,
-0.15279718525844344,
-0.15885814333386145,
-0.1649131204899699,
-0.17096188876030122,
-0.17700422041214875,
-0.18303988795514095,
-0.1890686641498062,
-0.19509032201612825,
-0.2011046348420919,
-0.20711137619221856,
-0.21311031991609136,
-0.2191012401568698,
-0.22508391135979283,
-0.2310581082806711,
-0.2370236059943672,
-0.24298017990326387,
-0.24892760574572015,
-0.25486565960451457,
-0.2607941179152755,
-0.26671275747489837,
-0.272621355449949,
-0.27851968938505306,
-0.2844075372112719,
-0.29028467725446233,
-0.2961508882436238,
-0.3020059493192281,
-0.30784964004153487,
-0.3136817403988915,
-0.3195020308160157,
-0.3253102921622629,
-0.33110630575987643,
-0.33688985339222005,
-0.3426607173119944,
-0.34841868024943456,
-0.35416352542049034,
-0.3598950365349881,
-0.36561299780477385,
-0.37131719395183754,
-0.37700741021641826,
-0.3826834323650898,
-0.38834504669882625,
-0.3939920400610481,
-0.3996241998456468,
-0.40524131400498986,
-0.4108431710579039,
-0.41642956009763715,
-0.4220002707997997,
-0.4275550934302821,
-0.43309381885315196,
-0.43861623853852766,
-0.4441221445704292,
-0.44961132965460654,
-0.45508358712634384,
-0.46053871095824,
-0.4659764957679662,
-0.47139673682599764,
-0.4767992300633221,
-0.4821837720791227,
-0.487550160148436,
-0.49289819222978404,
-0.4982276669727818,
-0.5035383837257176,
-0.508830142543107,
-0.5141027441932217,
-0.5193559901655896,
-0.524589682678469,
-0.5298036246862946,
-0.5349976198870972,
-0.5401714727298929,
-0.5453249884220465,
-0.5504579729366048,
-0.5555702330196022,
-0.560661576197336,
-0.5657318107836131,
-0.5707807458869673,
-0.5758081914178453,
-0.5808139580957645,
-0.5857978574564389,
-0.5907597018588742,
-0.5956993044924334,
-0.600616479383869,
-0.6055110414043255,
-0.6103828062763095,
-0.6152315905806268,
-0.6200572117632891,
-0.6248594881423863,
-0.629638238914927,
-0.6343932841636455,
-0.6391244448637757,
-0.6438315428897914,
-0.6485144010221124,
-0.6531728429537768,
-0.6578066932970786,
-0.6624157775901718,
-0.6669999223036375,
-0.6715589548470183,
-0.6760927035753159,
-0.680600997795453,
-0.6850836677727004,
-0.6895405447370668,
-0.6939714608896539,
-0.6983762494089728,
-0.7027547444572253,
-0.7071067811865476,
-0.7114321957452164,
-0.7157308252838186,
-0.7200025079613817,
-0.7242470829514669,
-0.7284643904482252,
-0.7326542716724128,
-0.7368165688773698,
-0.7409511253549591,
-0.745057785441466,
-0.7491363945234593,
-0.7531867990436125,
-0.7572088465064846,
-0.7612023854842618,
-0.765167265622459,
-0.7691033376455796,
-0.7730104533627369,
-0.7768884656732324,
-0.7807372285720945,
-0.7845565971555752,
-0.7883464276266062,
-0.7921065773002123,
-0.7958369046088835,
-0.799537269107905,
-0.8032075314806448,
-0.8068475535437992,
-0.8104571982525948,
-0.8140363297059483,
-0.8175848131515837,
-0.8211025149911046,
-0.8245893027850253,
-0.8280450452577558,
-0.8314696123025452,
-0.83486287498638,
-0.838224705554838,
-0.8415549774368983,
-0.844853565249707,
-0.8481203448032971,
-0.8513551931052652,
-0.8545579883654005,
-0.8577286100002721,
-0.8608669386377673,
-0.8639728561215867,
-0.8670462455156926,
-0.8700869911087113,
-0.8730949784182901,
-0.8760700941954066,
-0.8790122264286334,
-0.8819212643483549,
-0.8847970984309378,
-0.8876396204028539,
-0.8904487232447579,
-0.8932243011955153,
-0.8959662497561851,
-0.8986744656939538,
-0.901348847046022,
-0.9039892931234433,
-0.9065957045149153,
-0.9091679830905223,
-0.9117060320054299,
-0.9142097557035307,
-0.9166790599210427,
-0.9191138516900578,
-0.9215140393420419,
-0.9238795325112867,
-0.9262102421383113,
-0.9285060804732156,
-0.9307669610789837,
-0.9329927988347388,
-0.9351835099389475,
-0.937339011912575,
-0.9394592236021899,
-0.9415440651830208,
-0.9435934581619604,
-0.9456073253805213,
-0.9475855910177411,
-0.9495281805930367,
-0.9514350209690083,
-0.9533060403541938,
-0.9551411683057707,
-0.9569403357322089,
-0.9587034748958716,
-0.9604305194155658,
-0.9621214042690416,
-0.9637760657954398,
-0.9653944416976894,
-0.9669764710448521,
-0.9685220942744173,
-0.970031253194544,
-0.9715038909862518,
-0.9729399522055601,
-0.9743393827855759,
-0.9757021300385286,
-0.9770281426577544,
-0.9783173707196277,
-0.9795697656854405,
-0.9807852804032304,
-0.9819638691095552,
-0.9831054874312163,
-0.984210092386929,
-0.9852776423889412,
-0.9863080972445987,
-0.9873014181578584,
-0.9882575677307495,
-0.989176509964781,
-0.9900582102622971,
-0.99090263542778,
-0.9917097536690995,
-0.99247953459871,
-0.9932119492347945,
-0.9939069700023561,
-0.9945645707342554,
-0.9951847266721968,
-0.9957674144676598,
-0.996312612182778,
-0.9968202992911657,
-0.9972904566786902,
-0.9977230666441916,
-0.9981181129001492,
-0.9984755805732948,
-0.9987954562051724,
-0.9990777277526454,
-0.9993223845883495,
-0.9995294175010931,
-0.9996988186962042,
-0.9998305817958234,
-0.9999247018391445,
-0.9999811752826011
];
pub(crate) const BITREV: &[&[u16]] = &[
&[0],
&[0, 1],
&[0, 2, 2, 3],
&[0, 4, 2, 6, 4, 5, 6, 7],
&[0, 8, 4, 12, 4, 10, 6, 14, 8, 9, 10, 13, 12, 13, 14, 15],
&[
0, 16, 8, 24, 4, 20, 12, 28, 8, 18, 10, 26, 12, 22, 14, 30, 16, 17, 18, 25, 20, 21, 22, 29, 24, 25, 26, 27, 28, 29, 30, 31
],
&[
0, 32, 16, 48, 8, 40, 24, 56, 8, 36, 20, 52, 12, 44, 28, 60, 16, 34, 18, 50, 20, 42, 26, 58, 24, 38, 26, 54, 28, 46, 30, 62, 32, 33, 34, 49, 36, 41,
38, 57, 40, 41, 42, 53, 44, 45, 46, 61, 48, 49, 50, 51, 52, 53, 54, 59, 56, 57, 58, 59, 60, 61, 62, 63
],
&[
0, 64, 32, 96, 16, 80, 48, 112, 8, 72, 40, 104, 24, 88, 56, 120, 16, 68, 36, 100, 20, 84, 52, 116, 24, 76, 44, 108, 28, 92, 60, 124, 32, 66, 34, 98,
36, 82, 50, 114, 40, 74, 42, 106, 44, 90, 58, 122, 48, 70, 50, 102, 52, 86, 54, 118, 56, 78, 58, 110, 60, 94, 62, 126, 64, 65, 66, 97, 68, 81, 70, 113,
72, 73, 74, 105, 76, 89, 78, 121, 80, 81, 82, 101, 84, 85, 86, 117, 88, 89, 90, 109, 92, 93, 94, 125, 96, 97, 98, 99, 100, 101, 102, 115, 104, 105,
106, 107, 108, 109, 110, 123, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127
],
&[
0, 128, 64, 192, 32, 160, 96, 224, 16, 144, 80, 208, 48, 176, 112, 240, 16, 136, 72, 200, 40, 168, 104, 232, 24, 152, 88, 216, 56, 184, 120, 248, 32,
132, 68, 196, 36, 164, 100, 228, 40, 148, 84, 212, 52, 180, 116, 244, 48, 140, 76, 204, 52, 172, 108, 236, 56, 156, 92, 220, 60, 188, 124, 252, 64,
130, 66, 194, 68, 162, 98, 226, 72, 146, 82, 210, 76, 178, 114, 242, 80, 138, 82, 202, 84, 170, 106, 234, 88, 154, 90, 218, 92, 186, 122, 250, 96, 134,
98, 198, 100, 166, 102, 230, 104, 150, 106, 214, 108, 182, 118, 246, 112, 142, 114, 206, 116, 174, 118, 238, 120, 158, 122, 222, 124, 190, 126, 254,
128, 129, 130, 193, 132, 161, 134, 225, 136, 145, 138, 209, 140, 177, 142, 241, 144, 145, 146, 201, 148, 169, 150, 233, 152, 153, 154, 217, 156, 185,
158, 249, 160, 161, 162, 197, 164, 165, 166, 229, 168, 169, 170, 213, 172, 181, 174, 245, 176, 177, 178, 205, 180, 181, 182, 237, 184, 185, 186, 221,
188, 189, 190, 253, 192, 193, 194, 195, 196, 197, 198, 227, 200, 201, 202, 211, 204, 205, 206, 243, 208, 209, 210, 211, 212, 213, 214, 235, 216, 217,
218, 219, 220, 221, 222, 251, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 247, 240, 241, 242, 243, 244, 245, 246, 247,
248, 249, 250, 251, 252, 253, 254, 255
],
&[
0, 256, 128, 384, 64, 320, 192, 448, 32, 288, 160, 416, 96, 352, 224, 480, 16, 272, 144, 400, 80, 336, 208, 464, 48, 304, 176, 432, 112, 368, 240, 496,
32, 264, 136, 392, 72, 328, 200, 456, 40, 296, 168, 424, 104, 360, 232, 488, 48, 280, 152, 408, 88, 344, 216, 472, 56, 312, 184, 440, 120, 376, 248,
504, 64, 260, 132, 388, 68, 324, 196, 452, 72, 292, 164, 420, 100, 356, 228, 484, 80, 276, 148, 404, 84, 340, 212, 468, 88, 308, 180, 436, 116, 372,
244, 500, 96, 268, 140, 396, 100, 332, 204, 460, 104, 300, 172, 428, 108, 364, 236, 492, 112, 284, 156, 412, 116, 348, 220, 476, 120, 316, 188, 444,
124, 380, 252, 508, 128, 258, 130, 386, 132, 322, 194, 450, 136, 290, 162, 418, 140, 354, 226, 482, 144, 274, 146, 402, 148, 338, 210, 466, 152, 306,
178, 434, 156, 370, 242, 498, 160, 266, 162, 394, 164, 330, 202, 458, 168, 298, 170, 426, 172, 362, 234, 490, 176, 282, 178, 410, 180, 346, 218, 474,
184, 314, 186, 442, 188, 378, 250, 506, 192, 262, 194, 390, 196, 326, 198, 454, 200, 294, 202, 422, 204, 358, 230, 486, 208, 278, 210, 406, 212, 342,
214, 470, 216, 310, 218, 438, 220, 374, 246, 502, 224, 270, 226, 398, 228, 334, 230, 462, 232, 302, 234, 430, 236, 366, 238, 494, 240, 286, 242, 414,
244, 350, 246, 478, 248, 318, 250, 446, 252, 382, 254, 510, 256, 257, 258, 385, 260, 321, 262, 449, 264, 289, 266, 417, 268, 353, 270, 481, 272, 273,
274, 401, 276, 337, 278, 465, 280, 305, 282, 433, 284, 369, 286, 497, 288, 289, 290, 393, 292, 329, 294, 457, 296, 297, 298, 425, 300, 361, 302, 489,
304, 305, 306, 409, 308, 345, 310, 473, 312, 313, 314, 441, 316, 377, 318, 505, 320, 321, 322, 389, 324, 325, 326, 453, 328, 329, 330, 421, 332, 357,
334, 485, 336, 337, 338, 405, 340, 341, 342, 469, 344, 345, 346, 437, 348, 373, 350, 501, 352, 353, 354, 397, 356, 357, 358, 461, 360, 361, 362, 429,
364, 365, 366, 493, 368, 369, 370, 413, 372, 373, 374, 477, 376, 377, 378, 445, 380, 381, 382, 509, 384, 385, 386, 387, 388, 389, 390, 451, 392, 393,
394, 419, 396, 397, 398, 483, 400, 401, 402, 403, 404, 405, 406, 467, 408, 409, 410, 435, 412, 413, 414, 499, 416, 417, 418, 419, 420, 421, 422, 459,
424, 425, 426, 427, 428, 429, 430, 491, 432, 433, 434, 435, 436, 437, 438, 475, 440, 441, 442, 443, 444, 445, 446, 507, 448, 449, 450, 451, 452, 453,
454, 455, 456, 457, 458, 459, 460, 461, 462, 487, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 503, 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
],
&[
0, 512, 256, 768, 128, 640, 384, 896, 64, 576, 320, 832, 192, 704, 448, 960, 32, 544, 288, 800, 160, 672, 416, 928, 96, 608, 352, 864, 224, 736, 480,
992, 32, 528, 272, 784, 144, 656, 400, 912, 80, 592, 336, 848, 208, 720, 464, 976, 48, 560, 304, 816, 176, 688, 432, 944, 112, 624, 368, 880, 240, 752,
496, 1008, 64, 520, 264, 776, 136, 648, 392, 904, 72, 584, 328, 840, 200, 712, 456, 968, 80, 552, 296, 808, 168, 680, 424, 936, 104, 616, 360, 872,
232, 744, 488, 1000, 96, 536, 280, 792, 152, 664, 408, 920, 104, 600, 344, 856, 216, 728, 472, 984, 112, 568, 312, 824, 184, 696, 440, 952, 120, 632,
376, 888, 248, 760, 504, 1016, 128, 516, 260, 772, 132, 644, 388, 900, 136, 580, 324, 836, 196, 708, 452, 964, 144, 548, 292, 804, 164, 676, 420, 932,
152, 612, 356, 868, 228, 740, 484, 996, 160, 532, 276, 788, 164, 660, 404, 916, 168, 596, 340, 852, 212, 724, 468, 980, 176, 564, 308, 820, 180, 692,
436, 948, 184, 628, 372, 884, 244, 756, 500, 1012, 192, 524, 268, 780, 196, 652, 396, 908, 200, 588, 332, 844, 204, 716, 460, 972, 208, 556, 300, 812,
212, 684, 428, 940, 216, 620, 364, 876, 236, 748, 492, 1004, 224, 540, 284, 796, 228, 668, 412, 924, 232, 604, 348, 860, 236, 732, 476, 988, 240, 572,
316, 828, 244, 700, 444, 956, 248, 636, 380, 892, 252, 764, 508, 1020, 256, 514, 258, 770, 260, 642, 386, 898, 264, 578, 322, 834, 268, 706, 450, 962,
272, 546, 290, 802, 276, 674, 418, 930, 280, 610, 354, 866, 284, 738, 482, 994, 288, 530, 290, 786, 292, 658, 402, 914, 296, 594, 338, 850, 300, 722,
466, 978, 304, 562, 306, 818, 308, 690, 434, 946, 312, 626, 370, 882, 316, 754, 498, 1010, 320, 522, 322, 778, 324, 650, 394, 906, 328, 586, 330, 842,
332, 714, 458, 970, 336, 554, 338, 810, 340, 682, 426, 938, 344, 618, 362, 874, 348, 746, 490, 1002, 352, 538, 354, 794, 356, 666, 410, 922, 360, 602,
362, 858, 364, 730, 474, 986, 368, 570, 370, 826, 372, 698, 442, 954, 376, 634, 378, 890, 380, 762, 506, 1018, 384, 518, 386, 774, 388, 646, 390, 902,
392, 582, 394, 838, 396, 710, 454, 966, 400, 550, 402, 806, 404, 678, 422, 934, 408, 614, 410, 870, 412, 742, 486, 998, 416, 534, 418, 790, 420, 662,
422, 918, 424, 598, 426, 854, 428, 726, 470, 982, 432, 566, 434, 822, 436, 694, 438, 950, 440, 630, 442, 886, 444, 758, 502, 1014, 448, 526, 450, 782,
452, 654, 454, 910, 456, 590, 458, 846, 460, 718, 462, 974, 464, 558, 466, 814, 468, 686, 470, 942, 472, 622, 474, 878, 476, 750, 494, 1006, 480, 542,
482, 798, 484, 670, 486, 926, 488, 606, 490, 862, 492, 734, 494, 990, 496, 574, 498, 830, 500, 702, 502, 958, 504, 638, 506, 894, 508, 766, 510, 1022,
512, 513, 514, 769, 516, 641, 518, 897, 520, 577, 522, 833, 524, 705, 526, 961, 528, 545, 530, 801, 532, 673, 534, 929, 536, 609, 538, 865, 540, 737,
542, 993, 544, 545, 546, 785, 548, 657, 550, 913, 552, 593, 554, 849, 556, 721, 558, 977, 560, 561, 562, 817, 564, 689, 566, 945, 568, 625, 570, 881,
572, 753, 574, 1009, 576, 577, 578, 777, 580, 649, 582, 905, 584, 585, 586, 841, 588, 713, 590, 969, 592, 593, 594, 809, 596, 681, 598, 937, 600, 617,
602, 873, 604, 745, 606, 1001, 608, 609, 610, 793, 612, 665, 614, 921, 616, 617, 618, 857, 620, 729, 622, 985, 624, 625, 626, 825, 628, 697, 630, 953,
632, 633, 634, 889, 636, 761, 638, 1017, 640, 641, 642, 773, 644, 645, 646, 901, 648, 649, 650, 837, 652, 709, 654, 965, 656, 657, 658, 805, 660, 677,
662, 933, 664, 665, 666, 869, 668, 741, 670, 997, 672, 673, 674, 789, 676, 677, 678, 917, 680, 681, 682, 853, 684, 725, 686, 981, 688, 689, 690, 821,
692, 693, 694, 949, 696, 697, 698, 885, 700, 757, 702, 1013, 704, 705, 706, 781, 708, 709, 710, 909, 712, 713, 714, 845, 716, 717, 718, 973, 720, 721,
722, 813, 724, 725, 726, 941, 728, 729, 730, 877, 732, 749, 734, 1005, 736, 737, 738, 797, 740, 741, 742, 925, 744, 745, 746, 861, 748, 749, 750, 989,
752, 753, 754, 829, 756, 757, 758, 957, 760, 761, 762, 893, 764, 765, 766, 1021, 768, 769, 770, 771, 772, 773, 774, 899, 776, 777, 778, 835, 780, 781,
782, 963, 784, 785, 786, 803, 788, 789, 790, 931, 792, 793, 794, 867, 796, 797, 798, 995, 800, 801, 802, 803, 804, 805, 806, 915, 808, 809, 810, 851,
812, 813, 814, 979, 816, 817, 818, 819, 820, 821, 822, 947, 824, 825, 826, 883, 828, 829, 830, 1011, 832, 833, 834, 835, 836, 837, 838, 907, 840, 841,
842, 843, 844, 845, 846, 971, 848, 849, 850, 851, 852, 853, 854, 939, 856, 857, 858, 875, 860, 861, 862, 1003, 864, 865, 866, 867, 868, 869, 870, 923,
872, 873, 874, 875, 876, 877, 878, 987, 880, 881, 882, 883, 884, 885, 886, 955, 888, 889, 890, 891, 892, 893, 894, 1019, 896, 897, 898, 899, 900, 901,
902, 903, 904, 905, 906, 907, 908, 909, 910, 967, 912, 913, 914, 915, 916, 917, 918, 935, 920, 921, 922, 923, 924, 925, 926, 999, 928, 929, 930, 931,
932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 983, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 1015, 960, 961,
962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 1007,
992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
1018, 1019, 1020, 1021, 1022, 1023
]
];