g_math 0.4.2

Multi-domain fixed-point arithmetic with geometric extension: Lie groups, manifolds, ODE solvers, tensors, fiber bundles — zero-float, 0 ULP transcendentals
Documentation
// Trigonometric Constants - Generated by build.rs
// ZERO float arithmetic - Pure BigRational → Q-format conversion

// Q64.64 trigonometric constants (i128)
pub const PI_Q64: i128 = 57952155664616982739;
pub const PI_HALF_Q64: i128 = 28976077832308491369;
pub const PI_QUARTER_Q64: i128 = 14488038916154245684;
pub const TWO_OVER_PI_Q64: i128 = 11743562013128004905;

// Q128.128 trigonometric constants (I256 words)
pub const PI_Q128: [u64; 4] = [1376283091369227076, 2611923443488327891, 3, 0];
pub const PI_HALF_Q128: [u64; 4] = [9911513582539389346, 10529333758598939753, 1, 0];
pub const PI_QUARTER_Q128: [u64; 4] = [14179128828124470481, 14488038916154245684, 0, 0];
pub const TWO_OVER_PI_Q128: [u64; 4] = [18169587780923219392, 11743562013128004905, 0, 0];

// Q256.256 trigonometric constants (I512 words)
pub const PI_Q256: [u64; 8] = [589684135938649225, 11820040416388919760, 1376283091369227076, 2611923443488327891, 3, 0, 0, 0];
pub const PI_HALF_Q256: [u64; 8] = [294842067969324612, 5910020208194459880, 9911513582539389346, 10529333758598939753, 1, 0, 0, 0];
pub const PI_QUARTER_Q256: [u64; 8] = [147421033984662306, 2955010104097229940, 14179128828124470481, 14488038916154245684, 0, 0, 0, 0];
pub const TWO_OVER_PI_Q256: [u64; 8] = [18325537948574664033, 15808362127397457985, 18169587780923219392, 11743562013128004905, 0, 0, 0, 0];

// Q512.512 trigonometric constants (I1024 words) for tier N+1 computation
pub const PI_Q512: [u64; 16] = [4577018097722394903, 13883517620612518109, 13714699805381954668, 4983270260364809079, 589684135938649225, 11820040416388919760, 1376283091369227076, 2611923443488327891, 3, 0, 0, 0, 0, 0, 0, 0];
pub const PI_HALF_Q512: [u64; 16] = [11511881085715973259, 6941758810306259054, 16080721939545753142, 11715007167037180347, 294842067969324612, 5910020208194459880, 9911513582539389346, 10529333758598939753, 1, 0, 0, 0, 0, 0, 0, 0];
pub const PI_QUARTER_Q512: [u64; 16] = [5755940542857986629, 3470879405153129527, 17263733006627652379, 5857503583518590173, 147421033984662306, 2955010104097229940, 14179128828124470481, 14488038916154245684, 0, 0, 0, 0, 0, 0, 0, 0];
pub const TWO_OVER_PI_Q512: [u64; 16] = [16754012890938950788, 18311050168422213438, 452944820249399836, 13196794004601950944, 18325537948574664033, 15808362127397457985, 18169587780923219392, 11743562013128004905, 0, 0, 0, 0, 0, 0, 0, 0];

// Sin Taylor coefficients: 1/(2k+1)! for k=0,1,2,...
// sin(x) = Σ (-1)^k * SIN_COEFF[k] * x^(2k+1)
pub const SIN_COEFFS_Q64: [i128; 11] = [
    18446744073709551616, // 1/1!
    3074457345618258602, // 1/3!
    153722867280912930, // 1/5!
    3660068268593165, // 1/7!
    50834281508238, // 1/9!
    462129831893, // 1/11!
    2962370717, // 1/13!
    14106527, // 1/15!
    51862, // 1/17!
    151, // 1/19!
    0, // 1/21!
];
pub const SIN_COEFFS_Q128: [[u64; 4]; 21] = [
    [0, 0, 1, 0], // 1/1!
    [12297829382473034410, 3074457345618258602, 0, 0], // 1/3!
    [2459565876494606882, 153722867280912930, 0, 0], // 1/5!
    [58561092297490640, 3660068268593165, 0, 0], // 1/7!
    [7430751933748256770, 50834281508238, 0, 0], // 1/9!
    [1409133677485678815, 462129831893, 0, 0], // 1/11!
    [4857215645510110865, 2962370717, 0, 0], // 1/13!
    [4151686605285043032, 14106527, 0, 0], // 1/15!
    [4287855011944804392, 51862, 0, 0], // 1/17!
    [11878864184877327952, 151, 0, 0], // 1/19!
    [6660326712654808623, 0, 0, 0], // 1/21!
    [13162701013151795, 0, 0, 0], // 1/23!
    [21937835021919, 0, 0, 0], // 1/25!
    [31250477239, 0, 0, 0], // 1/27!
    [38485809, 0, 0, 0], // 1/29!
    [41382, 0, 0, 0], // 1/31!
    [39, 0, 0, 0], // 1/33!
    [0, 0, 0, 0], // 1/35!
    [0, 0, 0, 0], // 1/37!
    [0, 0, 0, 0], // 1/39!
    [0, 0, 0, 0], // 1/41!
];
pub const SIN_COEFFS_Q256: [[u64; 8]; 41] = [
    [0, 0, 0, 0, 1, 0, 0, 0], // 1/1!
    [12297829382473034410, 12297829382473034410, 12297829382473034410, 3074457345618258602, 0, 0, 0, 0], // 1/3!
    [2459565876494606882, 2459565876494606882, 2459565876494606882, 153722867280912930, 0, 0, 0, 0], // 1/5!
    [14991639628157603853, 936977476759850240, 58561092297490640, 3660068268593165, 0, 0, 0, 0], // 1/7!
    [6357131908294261703, 16410119419363488245, 7430751933748256770, 50834281508238, 0, 0, 0, 0], // 1/9!
    [12299722266264468451, 8198671226885654234, 1409133677485678815, 462129831893, 0, 0, 0, 0], // 1/11!
    [4099288594694802714, 15543090672325877666, 4857215645510110865, 2962370717, 0, 0, 0, 0], // 1/13!
    [9506417374072982748, 8594653646772154211, 4151686605285043032, 14106527, 0, 0, 0, 0], // 1/15!
    [15429843095978460292, 14680482991058953320, 4287855011944804392, 51862, 0, 0, 0, 0], // 1/17!
    [11587816008391293877, 17734539588209917787, 11878864184877327952, 151, 0, 0, 0, 0], // 1/19!
    [2443235095386706268, 13569837414977980513, 6660326712654808623, 0, 0, 0, 0, 0], // 1/21!
    [697492831019502345, 12895791492953457907, 13162701013151795, 0, 0, 0, 0, 0], // 1/23!
    [831265971368628993, 12165599501013710577, 21937835021919, 0, 0, 0, 0, 0], // 1/25!
    [710674296241490772, 3722445176487265653, 31250477239, 0, 0, 0, 0, 0], // 1/27!
    [14835510535010564896, 7524131445288606958, 38485809, 0, 0, 0, 0, 0], // 1/29!
    [4022664315510043001, 10897620030012723058, 41382, 0, 0, 0, 0, 0], // 1/31!
    [6467157170064435739, 3469084229758052976, 39, 0, 0, 0, 0, 0], // 1/33!
    [1865610458836311453, 607472355549941652, 0, 0, 0, 0, 0, 0], // 1/35!
    [12631603758019480018, 456060326989445, 0, 0, 0, 0, 0, 0], // 1/37!
    [16949156739592927955, 307733014162, 0, 0, 0, 0, 0, 0], // 1/39!
    [14880210257429036685, 187642081, 0, 0, 0, 0, 0, 0], // 1/41!
    [4982527449697663717, 103899, 0, 0, 0, 0, 0, 0], // 1/43!
    [8750745056900488197, 52, 0, 0, 0, 0, 0, 0], // 1/45!
    [447724993936076397, 0, 0, 0, 0, 0, 0, 0], // 1/47!
    [190359266129284, 0, 0, 0, 0, 0, 0, 0], // 1/49!
    [74650692599, 0, 0, 0, 0, 0, 0, 0], // 1/51!
    [27086608, 0, 0, 0, 0, 0, 0, 0], // 1/53!
    [9120, 0, 0, 0, 0, 0, 0, 0], // 1/55!
    [2, 0, 0, 0, 0, 0, 0, 0], // 1/57!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/59!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/61!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/63!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/65!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/67!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/69!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/71!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/73!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/75!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/77!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/79!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/81!
];
pub const SIN_COEFFS_Q512: [[u64; 16]; 65] = [
    [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], // 1/1!
    [12297829382473034410, 12297829382473034410, 12297829382473034410, 12297829382473034410, 12297829382473034410, 12297829382473034410, 12297829382473034410, 3074457345618258602, 0, 0, 0, 0, 0, 0, 0, 0], // 1/3!
    [2459565876494606882, 2459565876494606882, 2459565876494606882, 2459565876494606882, 2459565876494606882, 2459565876494606882, 2459565876494606882, 153722867280912930, 0, 0, 0, 0, 0, 0, 0, 0], // 1/5!
    [58561092297490640, 14991639628157603853, 936977476759850240, 58561092297490640, 14991639628157603853, 936977476759850240, 58561092297490640, 3660068268593165, 0, 0, 0, 0, 0, 0, 0, 0], // 1/7!
    [3331475472923911967, 16605323060355123712, 2062651806478281432, 5381113703336084369, 6357131908294261703, 16410119419363488245, 7430751933748256770, 50834281508238, 0, 0, 0, 0, 0, 0, 0, 0], // 1/9!
    [17470844173988338909, 13902166700950348692, 2534216481019286869, 10278477292723806663, 12299722266264468451, 8198671226885654234, 1409133677485678815, 462129831893, 0, 0, 0, 0, 0, 0, 0, 0], // 1/11!
    [111992590858899608, 8248253255044291091, 2735957244720121628, 1366619628868774836, 4099288594694802714, 15543090672325877666, 4857215645510110865, 2962370717, 0, 0, 0, 0, 0, 0, 0, 0], // 1/13!
    [8521172227336597173, 12864156609603042033, 12135174473412563069, 14236853140808648269, 9506417374072982748, 8594653646772154211, 4151686605285043032, 14106527, 0, 0, 0, 0, 0, 0, 0, 0], // 1/15!
    [17460788232245188832, 18290582031020119215, 9607081209067865223, 10632091649409921692, 15429843095978460292, 14680482991058953320, 4287855011944804392, 51862, 0, 0, 0, 0, 0, 0, 0, 0], // 1/17!
    [428619873532783772, 8521723396501227260, 2832858985502820319, 9847776353989907356, 11587816008391293877, 17734539588209917787, 11878864184877327952, 151, 0, 0, 0, 0, 0, 0, 0, 0], // 1/19!
    [5798568660959984754, 2962984705559621870, 10020691685217334735, 8675848473511360894, 2443235095386706268, 13569837414977980513, 6660326712654808623, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/21!
    [10510792217172551087, 16739167024779137971, 7311006929697880746, 14672464359890812471, 697492831019502345, 12895791492953457907, 13162701013151795, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/23!
    [8472275687478832075, 12141260553443904124, 3178876077536302828, 5466243609010802414, 831265971368628993, 12165599501013710577, 21937835021919, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/25!
    [4058790403189102252, 14049433897313881007, 4944681997058307701, 17902705068098597511, 710674296241490772, 3722445176487265653, 31250477239, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/27!
    [7615416324009715386, 17850669374087822536, 8434343267664164971, 10653914940349961519, 14835510535010564896, 7524131445288606958, 38485809, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/29!
    [8219965013806197940, 8211135453565734021, 15024322158135263159, 7905868877716937101, 4022664315510043001, 10897620030012723058, 41382, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/31!
    [9597994755189725412, 9912419531483789299, 15334108782955882604, 9388075223920214161, 6467157170064435739, 3469084229758052976, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/33!
    [16951167451529184572, 2240540811887108589, 11716492339860224666, 9138252382049450517, 1865610458836311453, 607472355549941652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/35!
    [17531593408929513497, 527940552261899451, 14425508313116744337, 17581123484924527365, 12631603758019480018, 456060326989445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/37!
    [8189637280591163917, 13032570165807127153, 2735669676420721017, 1057427547689964145, 16949156739592927955, 307733014162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/39!
    [5145336389613326983, 14506637610474036073, 15040263717211031238, 10202594086830642243, 14880210257429036685, 187642081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/41!
    [15497705479627354999, 13347704539244268242, 7740434954327431674, 7921610881069619681, 4982527449697663717, 103899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/43!
    [4274801258201314138, 11242485382541900766, 8360843368218078399, 10075177754828835816, 8750745056900488197, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/45!
    [10087107445135472397, 4757668332302850208, 17921611192487639441, 16343936206710740138, 447724993936076397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/47!
    [1384657340313782549, 9865821601195749, 16399496906992113315, 3371597425096984856, 190359266129284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/49!
    [7878387824945104114, 3363821905920212822, 3261738952971094251, 13268509893571927313, 74650692599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/51!
    [6174084333739169700, 16486826732747658143, 6005076623029912515, 6370145908559998372, 27086608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/53!
    [6045406083519573364, 8607820662902517389, 8883787576440299233, 1294038017925975331, 9120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/55!
    [14917635294588932423, 12445002447167784193, 7324846030377958081, 15811900320704028570, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/57!
    [5723820309029930799, 5184034499497968114, 23703045682412672, 15401925326745509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/59!
    [12753001728632293857, 989274828673926252, 17080885073455560885, 4208176318782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/61!
    [14993015538065219949, 1686246008485146915, 14427403299073841832, 1077362088, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/63!
    [15767588509032577215, 17205541647115756109, 5005373730395059630, 258981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/65!
    [10553501436209970288, 17991760738915129426, 10450949633281958809, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/67!
    [1394011275262018593, 306562458315121612, 230256203305293255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/69!
    [6651500883573999701, 8258412902708665486, 46329215956799, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/71!
    [4233908838237688974, 10442793385119601355, 8814538804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/73!
    [10201313778568081369, 3505101089563060721, 1588205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/75!
    [13874627816502786183, 7291665096305494864, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/77!
    [2702505320075059776, 812456882355013629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/79!
    [3271298062656226831, 125379148511576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/81!
    [15720597550040854481, 18421855496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/83!
    [14873274437790226884, 2580091, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/85!
    [15492617787965103318, 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/87!
    [812202831862110681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/89!
    [99170064940428, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/91!
    [11590704177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/93!
    [1297951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/95!
    [139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/97!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/99!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/101!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/103!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/105!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/107!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/109!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/111!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/113!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/115!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/117!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/119!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/121!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/123!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/125!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/127!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/129!
];

// Cos Taylor coefficients: 1/(2k)! for k=0,1,2,...
// cos(x) = Σ (-1)^k * COS_COEFF[k] * x^(2k)
pub const COS_COEFFS_Q64: [i128; 11] = [
    18446744073709551616, // 1/0!
    9223372036854775808, // 1/2!
    768614336404564650, // 1/4!
    25620477880152155, // 1/6!
    457508533574145, // 1/8!
    5083428150823, // 1/10!
    38510819324, // 1/12!
    211597908, // 1/14!
    881657, // 1/16!
    2881, // 1/18!
    7, // 1/20!
];
pub const COS_COEFFS_Q128: [[u64; 4]; 21] = [
    [0, 0, 1, 0], // 1/0!
    [0, 9223372036854775808, 0, 0], // 1/2!
    [12297829382473034410, 768614336404564650, 0, 0], // 1/4!
    [409927646082434480, 25620477880152155, 0, 0], // 1/6!
    [11536535182605656090, 457508533574145, 0, 0], // 1/8!
    [15500470452342466969, 5083428150823, 0, 0], // 1/10!
    [7803571170502786407, 38510819324, 0, 0], // 1/12!
    [6935066858146990638, 211597908, 0, 0], // 1/14!
    [17553302981933019829, 881657, 0, 0], // 1/16!
    [4337490628154611714, 2881, 0, 0], // 1/18!
    [10739652449784119786, 7, 0, 0], // 1/20!
    [302742123302491301, 0, 0, 0], // 1/22!
    [548445875547991, 0, 0, 0], // 1/24!
    [843762885458, 0, 0, 0], // 1/26!
    [1116088472, 0, 0, 0], // 1/28!
    [1282860, 0, 0, 0], // 1/30!
    [1293, 0, 0, 0], // 1/32!
    [1, 0, 0, 0], // 1/34!
    [0, 0, 0, 0], // 1/36!
    [0, 0, 0, 0], // 1/38!
    [0, 0, 0, 0], // 1/40!
];
pub const COS_COEFFS_Q256: [[u64; 8]; 41] = [
    [0, 0, 0, 0, 1, 0, 0, 0], // 1/0!
    [0, 0, 0, 9223372036854775808, 0, 0, 0, 0], // 1/2!
    [12297829382473034410, 12297829382473034410, 12297829382473034410, 768614336404564650, 0, 0, 0, 0], // 1/4!
    [12707757028555468891, 6558842337318951685, 409927646082434480, 25620477880152155, 0, 0, 0, 0], // 1/6!
    [1873954953519700481, 117122184594981280, 11536535182605656090, 457508533574145, 0, 0, 0, 0], // 1/8!
    [6169736412942291655, 16398407200903990117, 15500470452342466969, 5083428150823, 0, 0, 0, 0], // 1/10!
    [16397263583613332050, 17592738003140893500, 7803571170502786407, 38510819324, 0, 0, 0, 0], // 1/12!
    [13469052095127879919, 18239340259325003476, 6935066858146990638, 211597908, 0, 0, 0, 0], // 1/14!
    [4052915599700102349, 9760537889778035446, 17553302981933019829, 881657, 0, 0, 0, 0], // 1/16!
    [17254319348629515897, 4914858849216508876, 4337490628154611714, 2881, 0, 0, 0, 0], // 1/18!
    [14414448855701728405, 8265424608894316535, 10739652449784119786, 7, 0, 0, 0, 0], // 1/20!
    [16042335113448553953, 1455299158576706005, 302742123302491301, 0, 0, 0, 0, 0], // 1/22!
    [2334905210506173216, 8992082345989938570, 548445875547991, 0, 0, 0, 0, 0], // 1/24!
    [741461924810699254, 8272299396608414552, 843762885458, 0, 0, 0, 0, 0], // 1/26!
    [5954691819986694832, 15285627102564534029, 1116088472, 0, 0, 0, 0, 0], // 1/28!
    [14022129338554023348, 5784827603622485716, 1282860, 0, 0, 0, 0, 0], // 1/30!
    [10502001801321311627, 3799315139758438523, 1293, 0, 0, 0, 0, 0], // 1/32!
    [9956133838142246024, 2814788370538406207, 1, 0, 0, 0, 0, 0], // 1/34!
    [6200737203981970301, 16874232098609490, 0, 0, 0, 0, 0, 0], // 1/36!
    [15381070264289883687, 12001587552353, 0, 0, 0, 0, 0, 0], // 1/38!
    [1346066122175300779, 7693325354, 0, 0, 0, 0, 0, 0], // 1/40!
    [11334495526194472073, 4467668, 0, 0, 0, 0, 0, 0], // 1/42!
    [6401902012621384953, 2361, 0, 0, 0, 0, 0, 0], // 1/44!
    [2596330641286039084, 1, 0, 0, 0, 0, 0, 0], // 1/46!
    [9327604040334924, 0, 0, 0, 0, 0, 0, 0], // 1/48!
    [3807185322585, 0, 0, 0, 0, 0, 0, 0], // 1/50!
    [1435590242, 0, 0, 0, 0, 0, 0, 0], // 1/52!
    [501603, 0, 0, 0, 0, 0, 0, 0], // 1/54!
    [162, 0, 0, 0, 0, 0, 0, 0], // 1/56!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/58!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/60!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/62!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/64!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/66!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/68!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/70!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/72!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/74!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/76!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/78!
    [0, 0, 0, 0, 0, 0, 0, 0], // 1/80!
];
pub const COS_COEFFS_Q512: [[u64; 16]; 65] = [
    [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], // 1/0!
    [0, 0, 0, 0, 0, 0, 0, 9223372036854775808, 0, 0, 0, 0, 0, 0, 0, 0], // 1/2!
    [12297829382473034410, 12297829382473034410, 12297829382473034410, 12297829382473034410, 12297829382473034410, 12297829382473034410, 12297829382473034410, 768614336404564650, 0, 0, 0, 0, 0, 0, 0, 0], // 1/4!
    [409927646082434480, 12707757028555468891, 6558842337318951685, 409927646082434480, 12707757028555468891, 6558842337318951685, 409927646082434480, 25620477880152155, 0, 0, 0, 0, 0, 0, 0, 0], // 1/6!
    [11536535182605656090, 1873954953519700481, 117122184594981280, 11536535182605656090, 1873954953519700481, 117122184594981280, 11536535182605656090, 457508533574145, 0, 0, 0, 0, 0, 0, 0, 0], // 1/8!
    [7711845176776211843, 5349881120777422694, 9429637217502603951, 2382785777704563598, 6169736412942291655, 16398407200903990117, 15500470452342466969, 5083428150823, 0, 0, 0, 0, 0, 0, 0, 0], // 1/10!
    [1455903681165694909, 14993571947028026103, 17120700107652029553, 17766055175294072869, 16397263583613332050, 17592738003140893500, 7803571170502786407, 38510819324, 0, 0, 0, 0, 0, 0, 0, 0], // 1/12!
    [17137118967791647901, 8494908406950114341, 16006920437802481501, 10638612301324656268, 13469052095127879919, 18239340259325003476, 6935066858146990638, 211597908, 0, 0, 0, 0, 0, 0, 0, 0], // 1/14!
    [1685494768815384299, 15791989347989200815, 15746427964477295879, 14724861376582704228, 4052915599700102349, 9760537889778035446, 17553302981933019829, 881657, 0, 0, 0, 0, 0, 0, 0, 0], // 1/16!
    [8143777597122891674, 14338791943846905012, 16930832577134482837, 2640309988712723606, 17254319348629515897, 4914858849216508876, 4337490628154611714, 2881, 0, 0, 0, 0, 0, 0, 0, 0], // 1/18!
    [11089477437902370158, 6882446595623404428, 7520340578758961662, 16172121280352614241, 14414448855701728405, 8265424608894316535, 10739652449784119786, 7, 0, 0, 0, 0, 0, 0, 0, 0], // 1/20!
    [1940548036744503999, 16065960095729141026, 2132462719665292634, 5425286950716757754, 16042335113448553953, 1455299158576706005, 302742123302491301, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/22!
    [8892707376165734119, 8383608656744777255, 5684925643569364252, 7528881709303199042, 2334905210506173216, 8992082345989938570, 548445875547991, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/24!
    [17353620517558002725, 10399833753283754874, 4379205404607446635, 3757690922213790788, 741461924810699254, 8272299396608414552, 843762885458, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/26!
    [17932888585476678424, 1160577784679408307, 4788281804036613179, 13815628090796058208, 5954691819986694832, 15285627102564534029, 1116088472, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/28!
    [15011242469767965139, 14737526102313583656, 4585385059454367542, 5274262251000879148, 14022129338554023348, 5784827603622485716, 1282860, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/30!
    [3139177668198561125, 13515195285902669412, 7963499847386232317, 14658577210014241484, 10502001801321311627, 3799315139758438523, 1293, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/32!
    [2995050444815808338, 4631952121210594183, 4248862273497727762, 6244184118668390645, 9956133838142246024, 2814788370538406207, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/34!
    [3032913550557692851, 1087056359980728106, 17234973521452095222, 4865526362373205973, 6200737203981970301, 16874232098609490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/36!
    [5801204689993015296, 10208146476320065352, 14457397011860361610, 4346186212489498428, 15381070264289883687, 12001587552353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/38!
    [8044607163341338534, 4476331670729827292, 7908257973237077462, 12477987938446196444, 1346066122175300779, 7693325354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/40!
    [2318548970432406787, 2102228902507434346, 797309709307632925, 8587874559221717213, 11334495526194472073, 4467668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/42!
    [7898615881963620092, 7849752224227640848, 7303070095622495662, 10661141198268372956, 6401902012621384953, 2361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/44!
    [12925448078628412301, 2249482733719340409, 12212242729989231019, 11848494693313170275, 2596330641286039084, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/46!
    [12507977454246690085, 483425258458591704, 10365353273102832947, 17634321240075845059, 9327604040334924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/48!
    [14416153524299725911, 5534220538544889399, 327989938139842266, 12611217918624434796, 3807185322585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/50!
    [13631820435113616644, 6804845371276955644, 4674411767522985870, 5576339826907984645, 1435590242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/52!
    [455941266804605950, 12261534616899666013, 8992970787768115824, 15831858764799988383, 501603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/54!
    [1754984400929773775, 8388864687600737639, 11687854109933475103, 15834602742071150944, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/56!
    [5664004905993988101, 10710130291027292888, 1398479695262347664, 908713594277985031, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/58!
    [3169854350768757449, 5005532327980846566, 8916321353054323492, 256698755445758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/60!
    [3776031138921724407, 13999778166016497616, 5035948229884006237, 67873811593, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/62!
    [10322329033092180101, 11555562639951050180, 11754643222616498538, 16833782, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/64!
    [6108321425105047896, 6409604716192816540, 17684094702637830476, 3923, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/66!
    [3953057624531524895, 2706065550033839617, 15887678028065234596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/68!
    [11087960891015188378, 14498249807319149435, 3289374332932760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/70!
    [13927440011998469263, 6007410091639282675, 643461332733, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/72!
    [8782026370514486426, 4628164685295831492, 119115389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/74!
    [16881929669270093985, 8055890204236556105, 20897, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/76!
    [10583735475124654580, 8843861484917421854, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/78!
    [6720726043220650708, 10155711029437670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/80!
    [13537511493722308826, 1529014006238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/82!
    [9849730199919775304, 219307803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/84!
    [1245430172166720755, 30001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/86!
    [16945819814599195824, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/88!
    [9024475909579007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/90!
    [1077935488482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/92!
    [123305363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/94!
    [13520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/96!
    [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/98!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/100!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/102!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/104!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/106!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/108!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/110!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/112!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/114!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/116!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/118!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/120!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/122!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/124!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/126!
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1/128!
];

// Atan constants
pub const TAN_PI_8_Q64: i128 = 7640891576956012808;
pub const TAN_PI_8_Q128: [u64; 4] = [12896923290648804670, 7640891576956012808, 0, 0];
pub const TAN_PI_8_Q256: [u64; 8] = [15721882728060629555, 4242040607594729625, 12896923290648804670, 7640891576956012808, 0, 0, 0, 0];
pub const TAN_PI_8_Q512: [u64; 16] = [14950352997789113929, 1558488240577143546, 8937266406098079139, 13055918179168402956, 15721882728060629555, 4242040607594729625, 12896923290648804670, 7640891576956012808, 0, 0, 0, 0, 0, 0, 0, 0];