libdpf/include/grotto/principal_recip_tables.inc

1135 lines
68 KiB
PHP
Raw Permalink Normal View History

// Principal-domain cubics for 1/x, 1/sqrt(x), and 1/x^2 on [1/2, 1].
// One minimax march per (map, precision). Coefficients are round-ties-even
// at q = k + 16, the Horner cap. Absolute error target is 2^{-(k+1)}.
// Knots are numerators over 2^62, except the closed ends 1/2 and 1.
#pragma once
// inv k=8 via mathematica: 2 pieces, lgErr=-9.001611, horner_ulp=0.8889, guard=0.999023
static constexpr knot INV_K8_KNOTS[] = {
{1, 1},
{4395684760228120576, 62},
{1, 0},
};
static constexpr cubic_bits INV_K8_PIECES[] = {
{{0, -1, 0, -1}, {98471040u, 18446744073496572160u, 201209600u, 18446744073639455872u}},
{{0, -1, 0, -1}, {68742784u, 18446744073603936896u, 72110336u, 18446744073691090432u}},
};
static constexpr table_ref INV_K8_TABLE{INV_K8_KNOTS, INV_K8_PIECES, 2, 24};
// inv k=12 via mathematica: 3 pieces, lgErr=-13.001414, horner_ulp=0.9957, guard=0.999023
static constexpr knot INV_K12_KNOTS[] = {
{1, 1},
{3140469092404011008, 62},
{4389662140030243605, 62},
{1, 0},
};
static constexpr cubic_bits INV_K12_PIECES[] = {
{{0, -1, 0, -1}, {1845551364u, 18446744068970257476u, 5387551048u, 18446744071421920582u}},
{{0, -1, 0, -1}, {1338304570u, 18446744071219159122u, 2050068342u, 18446744073079627770u}},
{{0, -1, 0, -1}, {1100644244u, 18446744072017392234u, 1156136180u, 18446744073413366016u}},
};
static constexpr table_ref INV_K12_TABLE{INV_K12_KNOTS, INV_K12_PIECES, 3, 28};
// inv k=16 via mathematica: 5 pieces, lgErr=-17.001420, horner_ulp=0.9941, guard=0.999023
static constexpr knot INV_K16_KNOTS[] = {
{1, 1},
{2682843557043716096, 62},
{3140164047665089248, 62},
{3699242632235958049, 62},
{4388503708419479836, 62},
{1, 0},
};
static constexpr cubic_bits INV_K16_PIECES[] = {
{{0, -1, 0, -1}, {31876736094u, 18446743985074812938u, 109430049603u, 18446744023093733223u}},
{{0, -1, 0, -1}, {27317306967u, 18446744008621890456u, 68853909683u, 18446744046423395529u}},
{{0, -1, 0, -1}, {23265243988u, 18446744026503186428u, 42523121530u, 18446744059361393712u}},
{{0, -1, 0, -1}, {19681476922u, 18446744039929662093u, 25736408593u, 18446744066365396641u}},
{{0, -1, 0, -1}, {17612646313u, 18446744046627840261u, 18505488341u, 18446744068968095405u}},
};
static constexpr table_ref INV_K16_TABLE{INV_K16_KNOTS, INV_K16_PIECES, 5, 32};
// inv k=20 via mathematica: 9 pieces, lgErr=-21.001373, horner_ulp=0.9950, guard=0.999023
static constexpr knot INV_K20_KNOTS[] = {
{1, 1},
{2485428443391719424, 62},
{2682843619277352932, 62},
{2900256692407397112, 62},
{3140148912897141198, 62},
{3405368776453413946, 62},
{3699192875227306165, 62},
{4025404325853316706, 62},
{4388383595833716728, 62},
{1, 0},
};
static constexpr cubic_bits INV_K20_PIECES[] = {
{{0, -1, 0, -1}, {529613778043u, 18446742543439148379u, 1964684319223u, 18446743128023667667u}},
{{0, -1, 0, -1}, {490997691690u, 18446742758470786270u, 1565458356666u, 18446743375149026733u}},
{{0, -1, 0, -1}, {454532587088u, 18446742946585836256u, 1241897513441u, 18446743560704817794u}},
{{0, -1, 0, -1}, {420137000842u, 18446743110725738537u, 980731756804u, 18446743699255505936u}},
{{0, -1, 0, -1}, {387731090459u, 18446743253558787506u, 770824078706u, 18446743802109899153u}},
{{0, -1, 0, -1}, {357236668950u, 18446743377500724188u, 602860118956u, 18446743878004979551u}},
{{0, -1, 0, -1}, {328577151642u, 18446743484734514811u, 469077557785u, 18446743933655872819u}},
{{0, -1, 0, -1}, {301677434045u, 18446743577229075587u, 363031342527u, 18446743974195930100u}},
{{0, -1, 0, -1}, {281806221255u, 18446743640390286143u, 296099943929u, 18446743997842125302u}},
};
static constexpr table_ref INV_K20_TABLE{INV_K20_KNOTS, INV_K20_PIECES, 9, 36};
// inv k=24 via mathematica: 18 pieces, lgErr=-25.001380, horner_ulp=0.9955, guard=0.999023
static constexpr knot INV_K24_KNOTS[] = {
{1, 1},
{2393533460608248832, 62},
{2485433733212245601, 62},
{2581786556579317798, 62},
{2682854420872937914, 62},
{2788917984915098468, 62},
{2900274542073444141, 62},
{3017245000415605393, 62},
{3140172819527308537, 62},
{3269425733718242213, 62},
{3405398580289223014, 62},
{3548514506152298192, 62},
{3699229005107193178, 62},
{3858031119468533554, 62},
{4025447053601954019, 62},
{4202043674076141324, 62},
{4388431950526482574, 62},
{4585270719181424606, 62},
{1, 0},
};
static constexpr cubic_bits INV_K24_PIECES[] = {
{{0, -1, 0, -1}, {8633831152768u, 18446718651497691931u, 33267134100523u, 18446727749825349709u}},
{{0, -1, 0, -1}, {8316061419524u, 18446720488424476885u, 29727361637660u, 18446730023681658757u}},
{{0, -1, 0, -1}, {8007144115484u, 18446722208152129020u, 26535957683200u, 18446731997960710700u}},
{{0, -1, 0, -1}, {7706915009789u, 18446723817140106357u, 23661486437642u, 18446733709820889061u}},
{{0, -1, 0, -1}, {7415206693261u, 18446725321572879090u, 21075046272795u, 18446735192126488468u}},
{{0, -1, 0, -1}, {7131857642169u, 18446726727322450527u, 18750167245494u, 18446736473863571571u}},
{{0, -1, 0, -1}, {6856708195014u, 18446728039982509112u, 16662589577550u, 18446737580588635601u}},
{{0, -1, 0, -1}, {6589597350356u, 18446729264893450816u, 14790076706023u, 18446738534817170724u}},
{{0, -1, 0, -1}, {6330366754543u, 18446730407132886292u, 13112293194206u, 18446739356345529770u}},
{{0, -1, 0, -1}, {6078859825007u, 18446731471530299163u, 11610652119672u, 18446740062560511352u}},
{{0, -1, 0, -1}, {5834921878975u, 18446732462676406871u, 10268180595242u, 18446740668712528826u}},
{{0, -1, 0, -1}, {5598399651965u, 18446733384934731182u, 9069391110812u, 18446741188161589889u}},
{{0, -1, 0, -1}, {5369141236433u, 18446734242450798744u, 8000164858231u, 18446741632595625416u}},
{{0, -1, 0, -1}, {5146996755296u, 18446735039158503407u, 7047646083491u, 18446742012224373708u}},
{{0, -1, 0, -1}, {4931817643378u, 18446735778791454699u, 6200137465202u, 18446742335954941025u}},
{{0, -1, 0, -1}, {4723456669422u, 18446736464891032036u, 5447006728935u, 18446742611546568932u}},
{{0, -1, 0, -1}, {4521768189627u, 18446737100813504274u, 4778600576632u, 18446742845748176107u}},
{{0, -1, 0, -1}, {4410701190432u, 18446737438630251878u, 4436101591586u, 18446742961497697104u}},
};
static constexpr table_ref INV_K24_TABLE{INV_K24_KNOTS, INV_K24_PIECES, 18, 40};
// inv k=28 via mathematica: 35 pieces, lgErr=-29.001400, horner_ulp=0.9946, guard=0.999023
static constexpr knot INV_K28_KNOTS[] = {
{1, 1},
{2349176962541164544, 62},
{2393535239093311684, 62},
{2438944572315562316, 62},
{2485435246343028919, 62},
{2533040598920365035, 62},
{2581790689389428069, 62},
{2631719745073093565, 62},
{2682861773899807294, 62},
{2735251918747051252, 62},
{2788927586515496587, 62},
{2843925963259818216, 62},
{2900286609634385998, 62},
{2958050425125727373, 62},
{3017260085447505267, 62},
{3077958731736245301, 62},
{3140191408248182722, 62},
{3204004601607723661, 62},
{3269446724593746436, 62},
{3336569202743123811, 62},
{3405423186753130206, 62},
{3476062615941412050, 62},
{3548542399056939436, 62},
{3622922115963349549, 62},
{3699260400375369588, 62},
{3777619979753875027, 62},
{3858065979381994273, 62},
{3940664567429232515, 62},
{4025485925175709136, 62},
{4112601456327789129, 62},
{4202086472596488694, 62},
{4294018958751491355, 62},
{4388479445830466963, 62},
{4485551748105611216, 62},
{4585323000622207749, 62},
{1, 0},
};
static constexpr cubic_bits INV_K28_PIECES[] = {
{{0, -1, 0, -1}, {139434880990708u, 18446329646705569136u, 547439173112582u, 18446472899307779517u}},
{{0, -1, 0, -1}, {136856815503694u, 18446344830087667078u, 517631495181693u, 18446492405514175758u}},
{{0, -1, 0, -1}, {134314647538162u, 18446359524590828914u, 489318182965913u, 18446510590440888752u}},
{{0, -1, 0, -1}, {131808102840932u, 18446373743428441526u, 462431458190966u, 18446527537598729800u}},
{{0, -1, 0, -1}, {129336780494773u, 18446387500231671706u, 436904981097040u, 18446543326411154515u}},
{{0, -1, 0, -1}, {126900345523638u, 18446400807944656244u, 412675879221168u, 18446558031122204033u}},
{{0, -1, 0, -1}, {124498497018754u, 18446413679036566998u, 389684208872262u, 18446571721360498680u}},
{{0, -1, 0, -1}, {122130890465803u, 18446426125925493896u, 367872107353656u, 18446584462833005735u}},
{{0, -1, 0, -1}, {119797216324021u, 18446438160561139507u, 347184457418650u, 18446596317103977725u}},
{{0, -1, 0, -1}, {117497142968376u, 18446449794732667832u, 327568261811841u, 18446607342130661092u}},
{{0, -1, 0, -1}, {115230349702184u, 18446461039899679305u, 308972862106969u, 18446617592292842295u}},
{{0, -1, 0, -1}, {112996526023780u, 18446471907206574198u, 291349829178495u, 18446627118610344688u}},
{{0, -1, 0, -1}, {110795341520863u, 18446482407633419925u, 274652646130128u, 18446635969057425760u}},
{{0, -1, 0, -1}, {108626462987688u, 18446492551912073472u, 258836781925382u, 18446644188653967401u}},
{{0, -1, 0, -1}, {106489572269881u, 18446502350448227161u, 243859742476464u, 18446651819569295380u}},
{{0, -1, 0, -1}, {104384364267603u, 18446511813342006010u, 229680962046935u, 18446658901305533270u}},
{{0, -1, 0, -1}, {102310530535221u, 18446520950469313782u, 216261613004750u, 18446665470910454607u}},
{{0, -1, 0, -1}, {100267761879415u, 18446529771473494602u, 203564558744806u, 18446671563108701297u}},
{{0, -1, 0, -1}, {98255727460652u, 18446538285856706513u, 191554167363435u, 18446677210492532254u}},
{{0, -1, 0, -1}, {96274112000561u, 18446546502821678458u, 180196484302987u, 18446682443535614667u}},
{{0, -1, 0, -1}, {94322619499916u, 18446554431268238804u, 169459170320513u, 18446687290719937530u}},
{{0, -1, 0, -1}, {92400954612418u, 18446562079878132665u, 159311326412398u, 18446691778705551554u}},
{{0, -1, 0, -1}, {90508801780452u, 18446569457200085894u, 149723332435467u, 18446695932483323943u}},
{{0, -1, 0, -1}, {88645853244261u, 18446576571538839458u, 140666949139457u, 18446699775405770001u}},
{{0, -1, 0, -1}, {86811818303007u, 18446583430928805636u, 132115296815985u, 18446703329273258443u}},
{{0, -1, 0, -1}, {85006384066388u, 18446590043286088122u, 124042617765807u, 18446706614503386669u}},
{{0, -1, 0, -1}, {83229254831870u, 18446596416263988185u, 116424413111647u, 18446709650139275636u}},
{{0, -1, 0, -1}, {81480135208652u, 18446602557322127620u, 109237311027292u, 18446712453966992399u}},
{{0, -1, 0, -1}, {79758729908560u, 18446608473730426653u, 102459021202186u, 18446715042591896661u}},
{{0, -1, 0, -1}, {78064747785215u, 18446614172559566406u, 96068304976524u, 18446717431505883849u}},
{{0, -1, 0, -1}, {76397889876842u, 18446619660724622890u, 90044888081919u, 18446719635172304639u}},
{{0, -1, 0, -1}, {74757865308657u, 18446624944935117442u, 84369479530009u, 18446721667068025870u}},
{{0, -1, 0, -1}, {73144387222894u, 18446630031713970670u, 79023712820666u, 18446723539752046558u}},
{{0, -1, 0, -1}, {71557168207934u, 18446634927416074522u, 73990091232565u, 18446725264928793103u}},
{{0, -1, 0, -1}, {70570816436059u, 18446637913651479714u, 70976411845107u, 18446726278725386619u}},
};
static constexpr table_ref INV_K28_TABLE{INV_K28_KNOTS, INV_K28_PIECES, 35, 44};
// inv k=32 via mathematica: 69 pieces, lgErr=-33.001368, horner_ulp=0.9994, guard=0.999023
static constexpr knot INV_K32_KNOTS[] = {
{1, 1},
{2327384642088792064, 62},
{2349178753458520255, 62},
{2371227157187865962, 62},
{2393535784769630333, 62},
{2416106177069221068, 62},
{2438943901654624713, 62},
{2462052266975434023, 62},
{2485434414003175120, 62},
{2509095318941242324, 62},
{2533037756196304985, 62},
{2557268242916805988, 62},
{2581789150258529021, 62},
{2606604578834733274, 62},
{2631718394966766193, 62},
{2657136090999344766, 62},
{2682861027596882905, 62},
{2708898133469064056, 62},
{2735252035537132055, 62},
{2761927053647060289, 62},
{2788927195255931246, 62},
{2816257862668884673, 62},
{2843924081725382071, 62},
{2871932154608244916, 62},
{2900284674018481605, 62},
{2928988706044565603, 62},
{2958049223896532154, 62},
{2987470732532634695, 62},
{3017258781410283234, 62},
{3047418377183766432, 62},
{3077956900172612909, 62},
{3108878182149778786, 62},
{3140189692839117671, 62},
{3171895388634615759, 62},
{3204002597906738512, 62},
{3236517793058471606, 62},
{3269445294305070434, 62},
{3302793593430038705, 62},
{3336567651340307550, 62},
{3370774994026461702, 62},
{3405421943194563794, 62},
{3440514711486219949, 62},
{3476061444876919134, 62},
{3512067691067825437, 62},
{3548541547779493947, 62},
{3585490272548183663, 62},
{3622921084669423383, 62},
{3660841818766451059, 62},
{3699259683542453833, 62},
{3738183494612627102, 62},
{3777619875769286724, 62},
{3817578393524222955, 62},
{3858066251777950972, 62},
{3899092065639609179, 62},
{3940664830023349625, 62},
{3982793461831714320, 62},
{4025486711560106170, 62},
{4068753231799358093, 62},
{4112603011153886224, 62},
{4157044963248283930, 62},
{4202088966524138548, 62},
{4247744512322934362, 62},
{4294022013929097780, 62},
{4340931281333410003, 62},
{4388483110520335878, 62},
{4436687741462949784, 62},
{4485556101427602905, 62},
{4535099244468854898, 62},
{4585328268476879133, 62},
{1, 0},
};
static constexpr cubic_bits INV_K32_PIECES[] = {
{{0, -1, 0, -1}, {2241360531373682u, 18440051188887158704u, 8882411717922879u, 18442323504939396687u}},
{{0, -1, 0, -1}, {2220590928201404u, 18440174653739812647u, 8637765334742498u, 18442485094972641988u}},
{{0, -1, 0, -1}, {2199966505223835u, 18440296118172954509u, 8399315640753940u, 18442641130945101493u}},
{{0, -1, 0, -1}, {2179486303644314u, 18440415611698186893u, 8166916323130910u, 18442791793612319419u}},
{{0, -1, 0, -1}, {2159149539569665u, 18440533162426526798u, 7940426269897275u, 18442937256859772152u}},
{{0, -1, 0, -1}, {2138955673438898u, 18440648796759001524u, 7719709940271938u, 18443077687694171144u}},
{{0, -1, 0, -1}, {2118903430103920u, 18440762544957012125u, 7504626767081653u, 18443213253042886612u}},
{{0, -1, 0, -1}, {2098992668434686u, 18440874430510185532u, 7295051267010834u, 18443344107152587493u}},
{{0, -1, 0, -1}, {2079222573833378u, 18440984480452862854u, 7090853372505883u, 18443470404161298260u}},
{{0, -1, 0, -1}, {2059592537052442u, 18441092720354530269u, 6891907910022429u, 18443592292192171050u}},
{{0, -1, 0, -1}, {2040101395676978u, 18441199178517594216u, 6698086813565016u, 18443709918240023684u}},
{{0, -1, 0, -1}, {2020748219593512u, 18441303881583173371u, 6509267273158919u, 18443823423206345146u}},
{{0, -1, 0, -1}, {2001533100286196u, 18441406850409782464u, 6325338853548002u, 18443932937879614497u}},
{{0, -1, 0, -1}, {1982455558197662u, 18441508108735353248u, 6146187758254130u, 18444038592525517428u}},
{{0, -1, 0, -1}, {1963514642053272u, 18441607682519536980u, 5971698194757101u, 18444140516021857272u}},
{{0, -1, 0, -1}, {1944709653013933u, 18441705596066040446u, 5801759257068304u, 18444238831849118793u}},
{{0, -1, 0, -1}, {1926040159554878u, 18441801872024272706u, 5636264746070894u, 18444333658359153297u}},
{{0, -1, 0, -1}, {1907505320360443u, 18441896534890577542u, 5475107099911120u, 18444425112340752823u}},
{{0, -1, 0, -1}, {1889104572154203u, 18441989607450082843u, 5318183494615175u, 18444513305589949950u}},
{{0, -1, 0, -1}, {1870837608459794u, 18442081110953248732u, 5165395394573785u, 18444598345304409146u}},
{{0, -1, 0, -1}, {1852703796525856u, 18442171068060567407u, 5016643564304586u, 18444680336952542810u}},
{{0, -1, 0, -1}, {1834702222550340u, 18442259502539530471u, 4871828669324656u, 18444759383938713153u}},
{{0, -1, 0, -1}, {1816831764277368u, 18442346438853136004u, 4730852004980731u, 18444835587228213937u}},
{{0, -1, 0, -1}, {1799092139764418u, 18442431897077949443u, 4593623668522225u, 18444909041019650593u}},
{{0, -1, 0, -1}, {1781482876261366u, 18442515898016166667u, 4460054083321637u, 18444979837474964558u}},
{{0, -1, 0, -1}, {1764002817086264u, 18442598465451527302u, 4330050537908925u, 18445048068532452652u}},
{{0, -1, 0, -1}, {1746651655514121u, 18442679618864463756u, 4203528686782647u, 18445113819901383249u}},
{{0, -1, 0, -1}, {1729428950999850u, 18442759378164043177u, 4080404936743915u, 18445177175187953974u}},
{{0, -1, 0, -1}, {1712334157788986u, 18442837763524467752u, 3960596721539163u, 18445238215784348298u}},
{{0, -1, 0, -1}, {1695366275459132u, 18442914796946330970u, 3844020150786413u, 18445297022090644082u}},
{{0, -1, 0, -1}, {1678524695269356u, 18442990498361854821u, 3730595954112863u, 18445353670532980729u}},
{{0, -1, 0, -1}, {1661808849581930u, 18443064887291537067u, 3620246846667750u, 18445408234997466434u}},
{{0, -1, 0, -1}, {1645218176451801u, 18443137982995807942u, 3512897286405934u, 18445460786997801269u}},
{{0, -1, 0, -1}, {1628752210323353u, 18443209804098585543u, 3408473966415611u, 18445511395501911554u}},
{{0, -1, 0, -1}, {1612409890640513u, 18443280371569583753u, 3306901501803783u, 18445560129047903162u}},
{{0, -1, 0, -1}, {1596190981695513u, 18443349702561699420u, 3208111319024679u, 18445607051506269192u}},
{{0, -1, 0, -1}, {1580094795844194u, 18443417815973550825u, 3112033553064740u, 18445652226048594293u}},
{{0, -1, 0, -1}, {1564120542408983u, 18443484730887545358u, 3018599348761472u, 18445695714052323864u}},
{{0, -1, 0, -1}, {1548267730531628u, 18443550464900520063u, 2927743140236015u, 18445737574097809280u}},
{{0, -1, 0, -1}, {1532535600532457u, 18443615036502695742u, 2839399308674454u, 18445777863565779921u}},
{{0, -1, 0, -1}, {1516923751185727u, 18443678462492138168u, 2753505711226474u, 18445816637063174755u}},
{{0, -1, 0, -1}, {1501431425394380u, 18443740760909475492u, 2669999638695714u, 18445853948309400830u}},
{{0, -1, 0, -1}, {1486058067099019u, 18443801948756181856u, 2588820908668978u, 18445889848768105907u}},
{{0, -1, 0, -1}, {1470803187089957u, 18443862042570990377u, 2509911021122224u, 18445924388085194865u}},
{{0, -1, 0, -1}, {1455665987230157u, 18443921059896281857u, 2433211229701001u, 18445957614962254255u}},
{{0, -1, 0, -1}, {1440645915499916u, 18443979017090325685u, 2358665394015592u, 18445989575944362088u}},
{{0, -1, 0, -1}, {1425742357703560u, 18444035930549644390u, 2286218342775920u, 18446020316176657831u}},
{{0, -1, 0, -1}, {1410954755182291u, 18444091816254692930u, 2215816437537865u, 18446049879197018652u}},
{{0, -1, 0, -1}, {1396282418434179u, 18444146690478255734u, 2147406654492067u, 18446078307357630168u}},
{{0, -1, 0, -1}, {1381724822383731u, 18444200568670954929u, 2080937966389396u, 18446105641278192776u}},
{{0, -1, 0, -1}, {1367281360974221u, 18444253466394519359u, 2016360139951452u, 18446131920385449830u}},
{{0, -1, 0, -1}, {1352951374577296u, 18444305399202851820u, 1953623884646052u, 18446157182874033773u}},
{{0, -1, 0, -1}, {1338734431461829u, 18444356381635064145u, 1892682033826208u, 18446181465267579300u}},
{{0, -1, 0, -1}, {1324629836776745u, 18444406428990493326u, 1833487387236133u, 18446204803314332838u}},
{{0, -1, 0, -1}, {1310636907615497u, 18444455556320744642u, 1775993922953342u, 18446227231522491717u}},
{{0, -1, 0, -1}, {1296755062352658u, 18444503778125515616u, 1720157123241594u, 18446248783065720953u}},
{{0, -1, 0, -1}, {1282983814983965u, 18444551108392633937u, 1665933886354534u, 18446269489853442320u}},
{{0, -1, 0, -1}, {1269322534546605u, 18444597561431482118u, 1613281546974453u, 18446289382933620366u}},
{{0, -1, 0, -1}, {1255770605756415u, 18444643151308912518u, 1562158519053082u, 18446308492267221659u}},
{{0, -1, 0, -1}, {1242327488417330u, 18444687891659373039u, 1512524480313018u, 18446326846688275215u}},
{{0, -1, 0, -1}, {1228992607484999u, 18444731796058448478u, 1464339932794174u, 18446344474093382383u}},
{{0, -1, 0, -1}, {1215765366505012u, 18444774877975945621u, 1417566241205392u, 18446361401449647300u}},
{{0, -1, 0, -1}, {1202645178609614u, 18444817150673250030u, 1372165730244749u, 18446377654781288213u}},
{{0, -1, 0, -1}, {1189631460990784u, 18444858627225528197u, 1328101640237458u, 18446393259209150809u}},
{{0, -1, 0, -1}, {1176723626662390u, 18444899320548637745u, 1285338082453853u, 18446408238988000786u}},
{{0, -1, 0, -1}, {1163921127667385u, 18444939243267184460u, 1243840158134927u, 18446422617487024583u}},
{{0, -1, 0, -1}, {1151223363494556u, 18444978408002986005u, 1203573640879031u, 18446436417320874417u}},
{{0, -1, 0, -1}, {1138629768697348u, 18445016827102160259u, 1164505245503174u, 18446449660275934546u}},
{{0, -1, 0, -1}, {1129132413913330u, 18445045514732248216u, 1135620633010487u, 18446459354616639475u}},
};
static constexpr table_ref INV_K32_TABLE{INV_K32_KNOTS, INV_K32_PIECES, 69, 48};
static constexpr table_ref const* const INV_BY_K[7] = {
&INV_K8_TABLE,
&INV_K12_TABLE,
&INV_K16_TABLE,
&INV_K20_TABLE,
&INV_K24_TABLE,
&INV_K28_TABLE,
&INV_K32_TABLE,
};
// rsqrt k=8 via chebfun: 1 pieces, lgErr=-10.760401, horner_ulp=0.6157, guard=0.999023
static constexpr knot RSQRT_K8_KNOTS[] = {
{1, 1},
{1, 0},
};
static constexpr cubic_bits RSQRT_K8_PIECES[] = {
{{0, -1, 0, -1}, {43874731u, 18446744073647789801u, 51129941u, 18446744073693076303u}},
};
static constexpr table_ref RSQRT_K8_TABLE{RSQRT_K8_KNOTS, RSQRT_K8_PIECES, 1, 24};
// rsqrt k=12 via chebfun: 2 pieces, lgErr=-13.001402, horner_ulp=0.9913, guard=0.999023
static constexpr knot RSQRT_K12_KNOTS[] = {
{1, 1},
{3660870144168558592, 62},
{1, 0},
};
static constexpr cubic_bits RSQRT_K12_PIECES[] = {
{{0, -1, 0, -1}, {741533269u, 18446744072534916818u, 1106515895u, 18446744073299531479u}},
{{0, -1, 0, -1}, {622458083u, 18446744073011270808u, 468960757u, 18446744073584847317u}},
};
static constexpr table_ref RSQRT_K12_TABLE{RSQRT_K12_KNOTS, RSQRT_K12_PIECES, 2, 28};
// rsqrt k=16 via mathematica: 3 pieces, lgErr=-17.001416, horner_ulp=0.9459, guard=0.999023
static constexpr knot RSQRT_K16_KNOTS[] = {
{1, 1},
{2894589705245471744, 62},
{3657953738574867690, 62},
{1, 0},
};
static constexpr cubic_bits RSQRT_K16_PIECES[] = {
{{0, -1, 0, -1}, {12559648671u, 18446744051300985460u, 23936797730u, 18446744063584777528u}},
{{0, -1, 0, -1}, {11191546106u, 18446744057856603676u, 13442799579u, 18446744069196383458u}},
{{0, -1, 0, -1}, {9961319677u, 18446744062530488111u, 7510583890u, 18446744071711650902u}},
};
static constexpr table_ref RSQRT_K16_TABLE{RSQRT_K16_KNOTS, RSQRT_K16_PIECES, 3, 32};
// rsqrt k=20 via chebfun: 6 pieces, lgErr=-21.001409, horner_ulp=0.9932, guard=0.999023
static constexpr knot RSQRT_K20_KNOTS[] = {
{1, 1},
{2581345438762270720, 62},
{2894437341739352064, 62},
{3250904300084162048, 62},
{3657527805056815104, 62},
{4122271418365184000, 62},
{1, 0},
};
static constexpr cubic_bits RSQRT_K20_PIECES[] = {
{{0, -1, 0, -1}, {206704208566u, 18446743683031315801u, 442802281444u, 18446743874656129569u}},
{{0, -1, 0, -1}, {195284358714u, 18446743744275374666u, 333260569321u, 18446743940000212037u}},
{{0, -1, 0, -1}, {184344322489u, 18446743796600720507u, 249791763456u, 18446743984407493118u}},
{{0, -1, 0, -1}, {173870458201u, 18446743841204162710u, 186440451824u, 18446744014417613737u}},
{{0, -1, 0, -1}, {163849336746u, 18446743879135910345u, 138552909192u, 18446744034581510351u}},
{{0, -1, 0, -1}, {154621002247u, 18446743910186577961u, 103708069815u, 18446744047622906038u}},
};
static constexpr table_ref RSQRT_K20_TABLE{RSQRT_K20_KNOTS, RSQRT_K20_PIECES, 6, 36};
// rsqrt k=24 via chebfun: 12 pieces, lgErr=-25.001388, horner_ulp=0.9918, guard=0.999023
static constexpr knot RSQRT_K24_KNOTS[] = {
{1, 1},
{2439209371616411648, 62},
{2581316922763116544, 62},
{2732806571771051008, 62},
{2894371519090617344, 62},
{3066762867625802752, 62},
{3250792075747656704, 62},
{3447338805140762112, 62},
{3657355307122542592, 62},
{3881875833837961216, 62},
{4122022340678692864, 62},
{4379011998985038848, 62},
{1, 0},
};
static constexpr cubic_bits RSQRT_K24_PIECES[] = {
{{0, -1, 0, -1}, {3354077306724u, 18446737551713706233u, 7608201516519u, 18446740552225232337u}},
{{0, -1, 0, -1}, {3260771623147u, 18446738081019006004u, 6607186224506u, 18446741183344528044u}},
{{0, -1, 0, -1}, {3169426226080u, 18446738570677754019u, 5732126864945u, 18446741704681598143u}},
{{0, -1, 0, -1}, {3080013595868u, 18446739023407598164u, 4967908688536u, 18446742134746037941u}},
{{0, -1, 0, -1}, {2992506037392u, 18446739441759158943u, 4301138672780u, 18446742489028388484u}},
{{0, -1, 0, -1}, {2906876212134u, 18446739828122568495u, 3719964054682u, 18446742780473616937u}},
{{0, -1, 0, -1}, {2823097216181u, 18446740184736342830u, 3213904431376u, 18446743019885562677u}},
{{0, -1, 0, -1}, {2741142331199u, 18446740513697112828u, 2773699504177u, 18446743216270039400u}},
{{0, -1, 0, -1}, {2660984938769u, 18446740816967997230u, 2391174072071u, 18446743377124204386u}},
{{0, -1, 0, -1}, {2582598378321u, 18446741096386621272u, 2059117173986u, 18446743508680918305u}},
{{0, -1, 0, -1}, {2505956394740u, 18446741353670701488u, 1771176189188u, 18446743616114087115u}},
{{0, -1, 0, -1}, {2436584738126u, 18446741573292765772u, 1539380718504u, 18446743697672491515u}},
};
static constexpr table_ref RSQRT_K24_TABLE{RSQRT_K24_KNOTS, RSQRT_K24_PIECES, 12, 40};
// rsqrt k=28 via mathematica: 24 pieces, lgErr=-29.001387, horner_ulp=0.9992, guard=0.999023
static constexpr knot RSQRT_K28_KNOTS[] = {
{1, 1},
{2371468461272314880, 62},
{2439203021465094030, 62},
{2509121463702861080, 62},
{2581302114891883974, 62},
{2655828331194877797, 62},
{2732783863838927075, 62},
{2812256955344850517, 62},
{2894339728886962459, 62},
{2979128250224424546, 62},
{3066721300340958873, 62},
{3157221933245381745, 62},
{3250739067810944788, 62},
{3347383148762963011, 62},
{3447272161613391986, 62},
{3550527610833319393, 62},
{3657275475490815791, 62},
{3767647371011811922, 62},
{3881780741579142568, 62},
{3999818709814989185, 62},
{4121910165001348672, 62},
{4248210135495776089, 62},
{4378880747847373337, 62},
{4514090544142490849, 62},
{1, 0},
};
static constexpr cubic_bits RSQRT_K28_PIECES[] = {
{{0, -1, 0, -1}, {54043028234392u, 18446637494474616033u, 126107965727431u, 18446684863356468511u}},
{{0, -1, 0, -1}, {53288702918490u, 18446641895346121339u, 117549188197481u, 18446690411885062724u}},
{{0, -1, 0, -1}, {52542301612531u, 18446646129064302433u, 109544127189818u, 18446695457341824525u}},
{{0, -1, 0, -1}, {51803773782204u, 18446650201392847424u, 102058779143735u, 18446700043768267146u}},
{{0, -1, 0, -1}, {51073056267436u, 18446654117985168544u, 95060994555693u, 18446704211561050016u}},
{{0, -1, 0, -1}, {50350091387083u, 18446657884286399015u, 88520563706586u, 18446707997652643452u}},
{{0, -1, 0, -1}, {49634830271603u, 18446661505526367858u, 82409123668758u, 18446711435791099550u}},
{{0, -1, 0, -1}, {48927217058906u, 18446664986806906988u, 76699916821166u, 18446714556880417429u}},
{{0, -1, 0, -1}, {48227193848125u, 18446668333078078612u, 71367751593678u, 18446717389184225274u}},
{{0, -1, 0, -1}, {47534706941545u, 18446671549112662878u, 66388962400783u, 18446719958518712380u}},
{{0, -1, 0, -1}, {46849706244235u, 18446674639516156327u, 61741313075426u, 18446722288462849934u}},
{{0, -1, 0, -1}, {46172134437725u, 18446677608780002810u, 57403844325440u, 18446724400580125703u}},
{{0, -1, 0, -1}, {45501938880904u, 18446680461230944844u, 53356883121733u, 18446726314545655996u}},
{{0, -1, 0, -1}, {44839067030751u, 18446683201057028102u, 49581937096478u, 18446728048321007621u}},
{{0, -1, 0, -1}, {44183460876026u, 18446685832333170006u, 46061599773001u, 18446729618309882562u}},
{{0, -1, 0, -1}, {43535068939585u, 18446688358975904120u, 42779554013126u, 18446731039460098638u}},
{{0, -1, 0, -1}, {42893840164811u, 18446690784773682871u, 39720473796686u, 18446732325403378031u}},
{{0, -1, 0, -1}, {42259721330644u, 18446693113399995980u, 36869956059598u, 18446733488571496385u}},
{{0, -1, 0, -1}, {41632658691247u, 18446695348409927292u, 34214476837407u, 18446734540294258528u}},
{{0, -1, 0, -1}, {41012599602128u, 18446697493237801589u, 31741347364324u, 18446735490890949059u}},
{{0, -1, 0, -1}, {40399492540366u, 18446699551201062680u, 29438664758926u, 18446736349757527074u}},
{{0, -1, 0, -1}, {39793285158322u, 18446701525510347991u, 27295258751757u, 18446737125448938862u}},
{{0, -1, 0, -1}, {39193925128547u, 18446703419269591763u, 25300652536121u, 18446737825750315672u}},
{{0, -1, 0, -1}, {38689435965392u, 18446704968443589602u, 23714887060936u, 18446738366838523810u}},
};
static constexpr table_ref RSQRT_K28_TABLE{RSQRT_K28_KNOTS, RSQRT_K28_PIECES, 24, 44};
// rsqrt k=32 via mathematica: 48 pieces, lgErr=-33.001388, horner_ulp=0.9975, guard=0.999023
static constexpr knot RSQRT_K32_KNOTS[] = {
{1, 1},
{2338397350547468288, 62},
{2371468829129304917, 62},
{2405066532255360622, 62},
{2439200975342858232, 62},
{2473881948162868511, 62},
{2509118498354468573, 62},
{2544920886395071415, 62},
{2581298526906611547, 62},
{2618263772936456363, 62},
{2655824216436802209, 62},
{2693992032269738882, 62},
{2732778245365975522, 62},
{2772194459187030866, 62},
{2812250996746033102, 62},
{2852960227319488840, 62},
{2894333021341866210, 62},
{2936381912877342974, 62},
{2979119260761805828, 62},
{3022558599743460168, 62},
{3066711394908143587, 62},
{3111591288050278442, 62},
{3157210879133474547, 62},
{3203585567432413167, 62},
{3250727753676902092, 62},
{3298651782375335932, 62},
{3347372103127806282, 62},
{3396902760873101597, 62},
{3447260204596960115, 62},
{3498459115366721270, 62},
{3550514879317823697, 62},
{3603443510514856534, 62},
{3657261334620819506, 62},
{3711985283067778400, 62},
{3767632715742682524, 62},
{3824220001454001987, 62},
{3881764993022363839, 62},
{3940286574460733432, 62},
{3999802366375177827, 62},
{4060331681165317510, 62},
{4121893128270664299, 62},
{4184506596590782689, 62},
{4248192301354081970, 62},
{4312970503385139177, 62},
{4378862197551472089, 62},
{4445888502148578924, 62},
{4514071339926902894, 62},
{4583432825562516166, 62},
{1, 0},
};
static constexpr cubic_bits RSQRT_K32_PIECES[] = {
{{0, -1, 0, -1}, {867724048891566u, 18445020751331457085u, 2053520841020772u, 18445773054984756668u}},
{{0, -1, 0, -1}, {861657586308379u, 18445056643716109624u, 1982734182603033u, 18445819590316795394u}},
{{0, -1, 0, -1}, {855623143466944u, 18445091848758676764u, 1914271345902242u, 18445863970309438881u}},
{{0, -1, 0, -1}, {849620505275307u, 18445126379043321354u, 1848058770198933u, 18445906292012833231u}},
{{0, -1, 0, -1}, {843649434273766u, 18445160247058244271u, 1784024923037054u, 18445946648354761682u}},
{{0, -1, 0, -1}, {837709858036670u, 18445193464151171403u, 1722102186586505u, 18445985127110223268u}},
{{0, -1, 0, -1}, {831801694921815u, 18445226041552559338u, 1662224808962620u, 18446021812359606236u}},
{{0, -1, 0, -1}, {825924861208836u, 18445257990333372327u, 1604328942055679u, 18446056784580786568u}},
{{0, -1, 0, -1}, {820079139597744u, 18445289322109360117u, 1548351339619087u, 18446090121539002005u}},
{{0, -1, 0, -1}, {814264488723907u, 18445320047363289646u, 1494232344016948u, 18446121896599404737u}},
{{0, -1, 0, -1}, {808480912208742u, 18445350176199516789u, 1441914402169437u, 18446152179771713005u}},
{{0, -1, 0, -1}, {802728177841632u, 18445379719786541664u, 1391339556869659u, 18446181039240846831u}},
{{0, -1, 0, -1}, {797006137141424u, 18445408688670321777u, 1342452371973984u, 18446208539750799587u}},
{{0, -1, 0, -1}, {791314724832543u, 18445437092808592948u, 1295199778468941u, 18446234742818851237u}},
{{0, -1, 0, -1}, {785653852096084u, 18445464942126505051u, 1249530073051727u, 18446259707402854111u}},
{{0, -1, 0, -1}, {780023420449529u, 18445492246440509748u, 1205393019415978u, 18446283489924271991u}},
{{0, -1, 0, -1}, {774423352526394u, 18445519015313783951u, 1162740038164869u, 18446306144252815863u}},
{{0, -1, 0, -1}, {768853501680564u, 18445545258486308792u, 1121523489545587u, 18446327722165182811u}},
{{0, -1, 0, -1}, {763313692675561u, 18445570985667150998u, 1081696989994905u, 18446348273243035270u}},
{{0, -1, 0, -1}, {757803841085398u, 18445596205983215434u, 1043216225401544u, 18446367844530871341u}},
{{0, -1, 0, -1}, {752323887472116u, 18445620928309108105u, 1006038370375346u, 18446386480925135066u}},
{{0, -1, 0, -1}, {746873730251864u, 18445645161570796995u, 970121599396923u, 18446404225486570797u}},
{{0, -1, 0, -1}, {741453197913313u, 18445668914857026478u, 935424909067219u, 18446421119583566919u}},
{{0, -1, 0, -1}, {736062164128939u, 18445692196902688055u, 901908859845462u, 18446437202585048358u}},
{{0, -1, 0, -1}, {730700596715104u, 18445715015901934949u, 869535779071686u, 18446452511840904840u}},
{{0, -1, 0, -1}, {725368375650218u, 18445737380294767516u, 838268599641974u, 18446467083296173489u}},
{{0, -1, 0, -1}, {720065428931654u, 18445759298184808226u, 808071664498311u, 18446480951161981457u}},
{{0, -1, 0, -1}, {714791609534735u, 18445780777854039116u, 778909981684362u, 18446494148314347182u}},
{{0, -1, 0, -1}, {709546770686516u, 18445801827440515714u, 750749656912744u, 18446506706139175395u}},
{{0, -1, 0, -1}, {704330854485746u, 18445822454594544243u, 723558311092611u, 18446518654402358786u}},
{{0, -1, 0, -1}, {699143764913198u, 18445842666996913612u, 697304350878876u, 18446530021626148017u}},
{{0, -1, 0, -1}, {693985391176009u, 18445862472260513155u, 671957082447990u, 18446540835079611318u}},
{{0, -1, 0, -1}, {688855611262857u, 18445881877914718697u, 647486710346638u, 18446551120820687770u}},
{{0, -1, 0, -1}, {683754288376340u, 18445900891417195674u, 623864301458759u, 18446560903751534070u}},
{{0, -1, 0, -1}, {678681344246657u, 18445919519884280660u, 601062092697498u, 18446570207532448914u}},
{{0, -1, 0, -1}, {673636708871125u, 18445937770290026048u, 579053207682368u, 18446579054742381435u}},
{{0, -1, 0, -1}, {668620232636003u, 18445955649780158168u, 557811262201620u, 18446587467071178205u}},
{{0, -1, 0, -1}, {663631809821974u, 18445973165221871434u, 537310890488930u, 18446595465140824948u}},
{{0, -1, 0, -1}, {658671349551413u, 18445990323317936251u, 517527576947371u, 18446603068610051518u}},
{{0, -1, 0, -1}, {653738750580629u, 18446007130696404014u, 498437530449026u, 18446610296255291028u}},
{{0, -1, 0, -1}, {648833920706249u, 18446023593845666469u, 480017737951454u, 18446617165981067364u}},
{{0, -1, 0, -1}, {643956736157265u, 18446039719251025557u, 462245793054391u, 18446623694913001105u}},
{{0, -1, 0, -1}, {639107092059428u, 18446055513225455785u, 445100067235258u, 18446629899361725603u}},
{{0, -1, 0, -1}, {634284886568649u, 18446070981966552786u, 428559624682413u, 18446635794882537319u}},
{{0, -1, 0, -1}, {629490018064289u, 18446086131567411120u, 412604191740947u, 18446641396312471679u}},
{{0, -1, 0, -1}, {624722383776989u, 18446100968022621760u, 397214132411188u, 18446646717803898885u}},
{{0, -1, 0, -1}, {619981877899875u, 18446115497235056151u, 382370424398125u, 18446651772856470233u}},
{{0, -1, 0, -1}, {616673444553348u, 18446125502757863703u, 372283992680315u, 18446655162200715662u}},
};
static constexpr table_ref RSQRT_K32_TABLE{RSQRT_K32_KNOTS, RSQRT_K32_PIECES, 48, 48};
static constexpr table_ref const* const RSQRT_BY_K[7] = {
&RSQRT_K8_TABLE,
&RSQRT_K12_TABLE,
&RSQRT_K16_TABLE,
&RSQRT_K20_TABLE,
&RSQRT_K24_TABLE,
&RSQRT_K28_TABLE,
&RSQRT_K32_TABLE,
};
// invsq k=8 via mathematica: 2 pieces, lgErr=-9.001520, horner_ulp=0.9273, guard=0.999023
static constexpr knot INVSQ_K8_KNOTS[] = {
{1, 1},
{3321961078669970432, 62},
{1, 0},
};
static constexpr cubic_bits INVSQ_K8_PIECES[] = {
{{0, -1, 0, -1}, {471895716u, 18446744072139852064u, 1947177748u, 18446744072855437644u}},
{{0, -1, 0, -1}, {235393096u, 18446744073155644340u, 486590772u, 18446744073558241708u}},
};
static constexpr table_ref INVSQ_K8_TABLE{INVSQ_K8_KNOTS, INVSQ_K8_PIECES, 2, 24};
// invsq k=12 via mathematica: 4 pieces, lgErr=-13.001416, horner_ulp=0.9911, guard=0.999023
static constexpr knot INVSQ_K12_KNOTS[] = {
{1, 1},
{2745042929798040576, 62},
{3322994972215222108, 62},
{4104939064446745456, 62},
{1, 0},
};
static constexpr cubic_bits INVSQ_K12_PIECES[] = {
{{0, -1, 0, -1}, {9046032577u, 18446744040560435784u, 45495341023u, 18446744051536744988u}},
{{0, -1, 0, -1}, {6281021068u, 18446744054537694860u, 21911327413u, 18446744064819137667u}},
{{0, -1, 0, -1}, {4203711082u, 18446744063217831135u, 9801298551u, 18446744070460005234u}},
{{0, -1, 0, -1}, {3019777298u, 18446744067309188609u, 5084173542u, 18446744072274397076u}},
};
static constexpr table_ref INVSQ_K12_TABLE{INVSQ_K12_KNOTS, INVSQ_K12_PIECES, 4, 28};
// invsq k=16 via mathematica: 8 pieces, lgErr=-17.001397, horner_ulp=0.9675, guard=0.999023
static constexpr knot INVSQ_K16_KNOTS[] = {
{1, 1},
{2511207593004551168, 62},
{2745299550407564598, 62},
{3013736480218623488, 62},
{3323581207619034287, 62},
{3683809441607852557, 62},
{4105966679764995813, 62},
{4605105133246224642, 62},
{1, 0},
};
static constexpr cubic_bits INVSQ_K16_PIECES[] = {
{{0, -1, 0, -1}, {157859985451u, 18446743468702326036u, 869257831348u, 18446743629781599215u}},
{{0, -1, 0, -1}, {132599469081u, 18446743607965718119u, 613253400135u, 18446743786699811486u}},
{{0, -1, 0, -1}, {110497629256u, 18446743719432309343u, 425801637674u, 18446743891814245838u}},
{{0, -1, 0, -1}, {91279903838u, 18446743807727181508u, 290528332335u, 18446743960922711064u}},
{{0, -1, 0, -1}, {74684081098u, 18446743876873488143u, 194455818152u, 18446744005435885675u}},
{{0, -1, 0, -1}, {60460395261u, 18446743930346577005u, 127415212694u, 18446744033465636035u}},
{{0, -1, 0, -1}, {48371516727u, 18446743971126094586u, 81537622744u, 18446744050678789605u}},
{{0, -1, 0, -1}, {43011058500u, 18446743987625994262u, 64608775704u, 18446744056468242062u}},
};
static constexpr table_ref INVSQ_K16_TABLE{INVSQ_K16_KNOTS, INVSQ_K16_PIECES, 8, 32};
// invsq k=20 via mathematica: 15 pieces, lgErr=-21.001384, horner_ulp=0.9931, guard=0.999023
static constexpr knot INVSQ_K20_KNOTS[] = {
{1, 1},
{2405269647717664768, 62},
{2511268974719221849, 62},
{2624437033767161081, 62},
{2745431516816084702, 62},
{2874992716360084090, 62},
{3013949248038776487, 62},
{3163231275372247382, 62},
{3323888448334686181, 62},
{3497106118142815824, 62},
{3684228186130590186, 62},
{3886783565077256361, 62},
{4106517113764341065, 62},
{4345428023776219138, 62},
{4605814215120781169, 62},
{1, 0},
};
static constexpr cubic_bits INVSQ_K20_PIECES[] = {
{{0, -1, 0, -1}, {2635605365826u, 18446733751747132073u, 15158044663192u, 18446736159649970465u}},
{{0, -1, 0, -1}, {2420027900778u, 18446734991946863994u, 12779608155444u, 18446737680208441175u}},
{{0, -1, 0, -1}, {2217949744075u, 18446736105424015657u, 10734311277304u, 18446738932612547000u}},
{{0, -1, 0, -1}, {2028795498232u, 18446737102753568668u, 8981335404840u, 18446739959748229218u}},
{{0, -1, 0, -1}, {1852003938086u, 18446737993826630901u, 7484129909874u, 18446740798369338372u}},
{{0, -1, 0, -1}, {1687023390902u, 18446738787903122802u, 6210010820930u, 18446741479884865874u}},
{{0, -1, 0, -1}, {1533316279439u, 18446739493616962709u, 5129862754832u, 18446742031019745809u}},
{{0, -1, 0, -1}, {1390357348144u, 18446740119013520762u, 4217806330246u, 18446742474434267638u}},
{{0, -1, 0, -1}, {1257633673698u, 18446740671576772208u, 3450904411918u, 18446742829265490376u}},
{{0, -1, 0, -1}, {1134645237833u, 18446741158253733882u, 2808891311288u, 18446743111606220932u}},
{{0, -1, 0, -1}, {1020904329848u, 18446741585483181168u, 2273914671759u, 18446743334931328631u}},
{{0, -1, 0, -1}, {915935644667u, 18446741959220584451u, 1830300624515u, 18446743510471239325u}},
{{0, -1, 0, -1}, {819276284285u, 18446742284962843180u, 1464335910669u, 18446743647540217654u}},
{{0, -1, 0, -1}, {730475906025u, 18446742567771910615u, 1164067232876u, 18446743753823471893u}},
{{0, -1, 0, -1}, {688070960308u, 18446742696690740052u, 1033422126062u, 18446743797954753546u}},
};
static constexpr table_ref INVSQ_K20_TABLE{INVSQ_K20_KNOTS, INVSQ_K20_PIECES, 15, 36};
// invsq k=24 via chebfun: 29 pieces, lgErr=-25.001383, horner_ulp=0.9979, guard=0.999023
static constexpr knot INVSQ_K24_KNOTS[] = {
{1, 1},
{2354784470789259264, 62},
{2405300977134469120, 62},
{2457460224644290048, 62},
{2511333479433567232, 62},
{2566998371627190272, 62},
{2624535484297723904, 62},
{2684028753762816000, 62},
{2745567323012081664, 62},
{2809246793518815232, 62},
{2875168164648823808, 62},
{2943437919887780864, 62},
{3014168884488523776, 62},
{3087479981661505024, 62},
{3163498943020566528, 62},
{3242360186811909120, 62},
{3324207067400261632, 62},
{3409192848318487552, 62},
{3497480285856464896, 62},
{3589241993133271040, 62},
{3684663142546064896, 62},
{3783941026421422080, 62},
{3887285803350784512, 62},
{3994922866924370432, 62},
{4107093421902487552, 62},
{4224055781976243200, 62},
{4346086505003824640, 62},
{4473482765444085760, 62},
{4606563679417309184, 62},
{1, 0},
};
static constexpr cubic_bits INVSQ_K24_PIECES[] = {
{{0, -1, 0, -1}, {43068281984149u, 18446573601170115657u, 253031505094546u, 18446610538973060116u}},
{{0, -1, 0, -1}, {41287469299502u, 18446584064400849955u, 232538758261339u, 18446623917902280167u}},
{{0, -1, 0, -1}, {39562465831899u, 18446593986868078275u, 213513246072721u, 18446636078082830133u}},
{{0, -1, 0, -1}, {37892113349810u, 18446603391053358386u, 195864193823258u, 18446647119091751596u}},
{{0, -1, 0, -1}, {36275230678680u, 18446612298926300712u, 179505189500152u, 18446657133540883653u}},
{{0, -1, 0, -1}, {34710637210922u, 18446620731812214588u, 164354288027995u, 18446666207321150817u}},
{{0, -1, 0, -1}, {33197203166054u, 18446628710139023137u, 150334292389720u, 18446674419750894223u}},
{{0, -1, 0, -1}, {31733819339847u, 18446636253629113828u, 137372223207781u, 18446681844200803982u}},
{{0, -1, 0, -1}, {30319367053878u, 18446643381468113568u, 125398875099953u, 18446688548624972005u}},
{{0, -1, 0, -1}, {28952729220614u, 18446650112252611744u, 114348772804464u, 18446694595838101678u}},
{{0, -1, 0, -1}, {27632811476416u, 18446656463898147421u, 104160179385774u, 18446700043759085498u}},
{{0, -1, 0, -1}, {26358537824025u, 18446662453679603278u, 94774881180470u, 18446704945766900920u}},
{{0, -1, 0, -1}, {25128851266907u, 18446668098245580907u, 86138023759920u, 18446709351011348037u}},
{{0, -1, 0, -1}, {23942700829928u, 18446673413693484283u, 78197863320257u, 18446713304750437497u}},
{{0, -1, 0, -1}, {22799045612569u, 18446678415561809525u, 70905656572660u, 18446716848599925414u}},
{{0, -1, 0, -1}, {21696863304324u, 18446683118806866427u, 64215571673550u, 18446720020762939222u}},
{{0, -1, 0, -1}, {20635135637684u, 18446687537879056090u, 58084460550350u, 18446722856313564894u}},
{{0, -1, 0, -1}, {19612855728843u, 18446691686702212415u, 52471778486931u, 18446725387396511810u}},
{{0, -1, 0, -1}, {18629036850362u, 18446695578651966362u, 47339502286887u, 18446727643419578627u}},
{{0, -1, 0, -1}, {17682703197674u, 18446699226607809950u, 42651952448106u, 18446729651278790096u}},
{{0, -1, 0, -1}, {16772887677162u, 18446702642973069170u, 38375667697879u, 18446731435547650580u}},
{{0, -1, 0, -1}, {15898640508853u, 18446705839654667343u, 34479333220869u, 18446733018634647422u}},
{{0, -1, 0, -1}, {15059023688819u, 18446708828097402288u, 30933642884939u, 18446734420959796327u}},
{{0, -1, 0, -1}, {14253109180348u, 18446711619301947060u, 27711188497043u, 18446735661110077133u}},
{{0, -1, 0, -1}, {13479981791675u, 18446714223826212721u, 24786372380148u, 18446736755977495528u}},
{{0, -1, 0, -1}, {12738740953448u, 18446716651791720529u, 22135316406289u, 18446737720891229419u}},
{{0, -1, 0, -1}, {12028498132689u, 18446718912904496981u, 19735758561872u, 18446738569746884959u}},
{{0, -1, 0, -1}, {11348377224346u, 18446721016465238908u, 17566965814301u, 18446739315122372667u}},
{{0, -1, 0, -1}, {11008156969463u, 18446722044345241790u, 16531815852354u, 18446739662612667401u}},
};
static constexpr table_ref INVSQ_K24_TABLE{INVSQ_K24_KNOTS, INVSQ_K24_PIECES, 29, 40};
// invsq k=28 via mathematica: 57 pieces, lgErr=-29.001373, horner_ulp=0.9973, guard=0.999023
static constexpr knot INVSQ_K28_KNOTS[] = {
{1, 1},
{2330118027994170368, 62},
{2354778384072015635, 62},
{2379832574975835694, 62},
{2405288738323462035, 62},
{2431154643454231411, 62},
{2457441792654403186, 62},
{2484157140614757211, 62},
{2511311253302739609, 62},
{2538912208057916646, 62},
{2566971513586971170, 62},
{2595498164557302875, 62},
{2624502502050243087, 62},
{2653996115422917015, 62},
{2683989901783318918, 62},
{2714494048915987203, 62},
{2745521578445143055, 62},
{2777084645593506905, 62},
{2809194517342784752, 62},
{2841864927098787268, 62},
{2875108546746895001, 62},
{2908940208515398130, 62},
{2943371903694784299, 62},
{2978419084595494932, 62},
{3014095752303037477, 62},
{3050417398141029772, 62},
{3087399297433611489, 62},
{3125057775629345166, 62},
{3163409940140453561, 62},
{3202472057794179788, 62},
{3242263302119108246, 62},
{3282800151250484887, 62},
{3324102458906796644, 62},
{3366189207200916651, 62},
{3409080466044692170, 62},
{3452796793231611186, 62},
{3497359675772472167, 62},
{3542790753565329246, 62},
{3589112966385875478, 62},
{3636349446101825561, 62},
{3684525022457655633, 62},
{3733663766239725075, 62},
{3783792197133194933, 62},
{3834937546543052150, 62},
{3887126415458115965, 62},
{3940388049950565386, 62},
{3994752461905864198, 62},
{4050249441709539571, 62},
{4106911180373756110, 62},
{4164770364816332197, 62},
{4223861008324507901, 62},
{4284218527648465389, 62},
{4345879021200320660, 62},
{4408880339805210890, 62},
{4473261734752244117, 62},
{4539063788648481652, 62},
{4606328617084007387, 62},
{1, 0},
};
static constexpr cubic_bits INVSQ_K28_PIECES[] = {
{{0, -1, 0, -1}, {696363822511987u, 18443973170121965946u, 4134622964212885u, 18444550481504532106u}},
{{0, -1, 0, -1}, {681892553120507u, 18444059094024814992u, 3964562992392529u, 18444662675845100286u}},
{{0, -1, 0, -1}, {667647943609750u, 18444142786388013260u, 3800654341696758u, 18444769679516877226u}},
{{0, -1, 0, -1}, {653627614382992u, 18444224293816083674u, 3642705316580162u, 18444871707075051169u}},
{{0, -1, 0, -1}, {639829509285384u, 18444303660401132170u, 3490532617363053u, 18444968963118715347u}},
{{0, -1, 0, -1}, {626250809281161u, 18444380933979584698u, 3343949254106729u, 18445061650191455504u}},
{{0, -1, 0, -1}, {612889069869972u, 18444456159518076425u, 3202777288296578u, 18445149960716852124u}},
{{0, -1, 0, -1}, {599742230846236u, 18444529379199651956u, 3066847325285493u, 18445234077650692132u}},
{{0, -1, 0, -1}, {586808058351233u, 18444600635581913664u, 2935992486959181u, 18445314178421756252u}},
{{0, -1, 0, -1}, {574084236421570u, 18444669971066782075u, 2810049366197169u, 18445390434464336820u}},
{{0, -1, 0, -1}, {561568371180104u, 18444737427843155815u, 2688858125581127u, 18445463011265458992u}},
{{0, -1, 0, -1}, {549258463982980u, 18444803045371043809u, 2572266886529632u, 18445532065917041819u}},
{{0, -1, 0, -1}, {537152081762743u, 18444866864846161450u, 2460123654854388u, 18445597752080786392u}},
{{0, -1, 0, -1}, {525246829624111u, 18444928926624364487u, 2352280930699574u, 18445660217333635152u}},
{{0, -1, 0, -1}, {513540727710876u, 18444989268307486570u, 2248598879077920u, 18445719601516903996u}},
{{0, -1, 0, -1}, {502031506326974u, 18445047928442709457u, 2148938795976569u, 18445776040671446781u}},
{{0, -1, 0, -1}, {490716675127518u, 18445104946088719197u, 2053163923273541u, 18445829666619030403u}},
{{0, -1, 0, -1}, {479594210923702u, 18445160357353261244u, 1961145194564801u, 18445880603871948407u}},
{{0, -1, 0, -1}, {468661939612591u, 18445214198559320801u, 1872755769592549u, 18445928972858483924u}},
{{0, -1, 0, -1}, {457917584696575u, 18445266505965016908u, 1787871504280410u, 18445974889740096836u}},
{{0, -1, 0, -1}, {447358846480170u, 18445317315364969199u, 1706371559112524u, 18446018466182759557u}},
{{0, -1, 0, -1}, {436983669395035u, 18445366660817612598u, 1628140359083153u, 18446059808430311731u}},
{{0, -1, 0, -1}, {426790033389869u, 18445414575699899687u, 1553065764623293u, 18446099018429165895u}},
{{0, -1, 0, -1}, {416775746665989u, 18445461093669328947u, 1481037529812766u, 18446136194722809541u}},
{{0, -1, 0, -1}, {406938753608458u, 18445506247220479879u, 1411949503777138u, 18446171431402855078u}},
{{0, -1, 0, -1}, {397276953029694u, 18445550068542107547u, 1345698230270764u, 18446204818937156848u}},
{{0, -1, 0, -1}, {387788269784708u, 18445592589190997435u, 1282183390519402u, 18446236444037965834u}},
{{0, -1, 0, -1}, {378470534773657u, 18445633840629461838u, 1221306948699222u, 18446266390177531526u}},
{{0, -1, 0, -1}, {369321726071135u, 18445673853154820048u, 1162974684800021u, 18446294736919806251u}},
{{0, -1, 0, -1}, {360339717548094u, 18445712657024373810u, 1107094466185779u, 18446321560864455606u}},
{{0, -1, 0, -1}, {351522494972707u, 18445750281509895168u, 1053577577395817u, 18446346935082454799u}},
{{0, -1, 0, -1}, {342868104859165u, 18445786755150732159u, 1002338261516147u, 18446370929437680581u}},
{{0, -1, 0, -1}, {334374458270020u, 18445822106579305527u, 953292515787705u, 18446393611226748083u}},
{{0, -1, 0, -1}, {326039586773890u, 18445856363446725243u, 906359548491123u, 18446415044574311122u}},
{{0, -1, 0, -1}, {317861499714038u, 18445889553031768387u, 861460867771461u, 18446435290936502630u}},
{{0, -1, 0, -1}, {309838209490458u, 18445921702138168588u, 818520376204144u, 18446454409128518597u}},
{{0, -1, 0, -1}, {301967765522131u, 18445952836964708971u, 777464492019202u, 18446472455342740964u}},
{{0, -1, 0, -1}, {294248224955556u, 18445982983232246927u, 738221923685004u, 18446489483320569695u}},
{{0, -1, 0, -1}, {286677653032958u, 18446012166186595482u, 700723618410814u, 18446505544441174263u}},
{{0, -1, 0, -1}, {279254099641172u, 18446040410693277576u, 664902593302903u, 18446520687858302982u}},
{{0, -1, 0, -1}, {271975676166308u, 18446067740948915979u, 630694255830026u, 18446534960426998160u}},
{{0, -1, 0, -1}, {264840501519718u, 18446094180700103933u, 598036069517516u, 18446548406909864523u}},
{{0, -1, 0, -1}, {257846604538480u, 18446119753601206009u, 566867077877192u, 18446561070227220428u}},
{{0, -1, 0, -1}, {250992148820766u, 18446144482390104023u, 537128873061200u, 18446572991117154682u}},
{{0, -1, 0, -1}, {244275296399278u, 18446168389407257622u, 508764900690686u, 18446584208480503223u}},
{{0, -1, 0, -1}, {237694127884820u, 18446191496875325661u, 481720097138146u, 18446594759572746013u}},
{{0, -1, 0, -1}, {231246830811948u, 18446213826235273640u, 455941633327379u, 18446604679762003952u}},
{{0, -1, 0, -1}, {224931598077647u, 18446235398520275638u, 431378421590717u, 18446614002776674148u}},
{{0, -1, 0, -1}, {218746593346870u, 18446256234474567295u, 407980945192170u, 18446622760816209855u}},
{{0, -1, 0, -1}, {212690019782176u, 18446276354323502558u, 385701480797180u, 18446630984512968136u}},
{{0, -1, 0, -1}, {206760075128088u, 18446295777931655762u, 364493880069876u, 18446638703059567323u}},
{{0, -1, 0, -1}, {200954989778995u, 18446314524682327923u, 344313664030220u, 18446645944217715362u}},
{{0, -1, 0, -1}, {195273012816547u, 18446332613532457186u, 325117921369806u, 18446652734398604753u}},
{{0, -1, 0, -1}, {189712384077221u, 18446350063106501591u, 306865172416345u, 18446659098751480742u}},
{{0, -1, 0, -1}, {184271360705993u, 18446366891615754685u, 289515420226609u, 18446665061184064388u}},
{{0, -1, 0, -1}, {178948216097294u, 18446383116868373350u, 273030103247642u, 18446670644417276363u}},
{{0, -1, 0, -1}, {176126490344077u, 18446391615950244394u, 264496977838873u, 18446673500186720302u}},
};
static constexpr table_ref INVSQ_K28_TABLE{INVSQ_K28_KNOTS, INVSQ_K28_PIECES, 57, 44};
// invsq k=32 via mathematica: 113 pieces, lgErr=-33.001399, horner_ulp=0.9989, guard=0.999023
static constexpr knot INVSQ_K32_KNOTS[] = {
{1, 1},
{2317933240140830720, 62},
{2330119213438652888, 62},
{2342400413745861501, 62},
{2354778474174031155, 62},
{2367254999907773279, 62},
{2379831567852247801, 62},
{2392509726275968723, 62},
{2405288890168457697, 62},
{2418170561919465230, 62},
{2431156214392173283, 62},
{2444247290555419446, 62},
{2457443148565891889, 62},
{2470747225238271628, 62},
{2484158842651594691, 62},
{2497679333661253712, 62},
{2511312002736070015, 62},
{2525056115822012382, 62},
{2538912909810438316, 62},
{2552883588864179930, 62},
{2566971274129231518, 62},
{2581175152806627072, 62},
{2595498251295643804, 62},
{2609939715653663688, 62},
{2624502475473012656, 62},
{2639187515747859153, 62},
{2653995785706122692, 62},
{2668930051275069562, 62},
{2683989335798968357, 62},
{2699176302644289076, 62},
{2714493548303852655, 62},
{2729941806776398668, 62},
{2745521773299229263, 62},
{2761235868779020540, 62},
{2777084694289034692, 62},
{2793070545105170325, 62},
{2809195644768717107, 62},
{2825460440508149280, 62},
{2841867025403258394, 62},
{2858417418155021766, 62},
{2875111905835578371, 62},
{2891954011968437921, 62},
{2908943902316203852, 62},
{2926083304913912561, 62},
{2943375459889939974, 62},
{2960821919183011664, 62},
{2978422595572750814, 62},
{2996181976017213594, 62},
{3014099824178698730, 62},
{3032178866677104919, 62},
{3050421709502829020, 62},
{3068829364802043903, 62},
{3087404210304741894, 62},
{3106148498386317482, 62},
{3125064354366707365, 62},
{3144152375087081642, 62},
{3163415826671859387, 62},
{3182857805977052599, 62},
{3202478549977421272, 62},
{3222282173395184626, 62},
{3242269964323216797, 62},
{3262444357937330416, 62},
{3282807608651706215, 62},
{3303361787652955240, 62},
{3324110008543566755, 62},
{3345053948296537222, 62},
{3366196280839132005, 62},
{3387540613142424056, 62},
{3409087978692631692, 62},
{3430841464040904296, 62},
{3452803869116548328, 62},
{3474977703168371352, 62},
{3497366243607908622, 62},
{3519972425523109466, 62},
{3542797817198368380, 62},
{3565846671998226792, 62},
{3589120846282382355, 62},
{3612623740124764125, 62},
{3636358295083489013, 62},
{3660326987613017900, 62},
{3684533591367864382, 62},
{3708981307670132614, 62},
{3733673594744935080, 62},
{3758613273827115862, 62},
{3783803309756839632, 62},
{3809247494138702257, 62},
{3834949546362559717, 62},
{3860912310760663118, 62},
{3887139817620230336, 62},
{3913635043858237391, 62},
{3940402459420662262, 62},
{3967445241987732526, 62},
{3994767612345377319, 62},
{4022373373131570047, 62},
{4050266261307763271, 62},
{4078450189302754220, 62},
{4106929371829026135, 62},
{4135707881107792392, 62},
{4164790046139851754, 62},
{4194179820977210138, 62},
{4223881991159002516, 62},
{4253900743468861217, 62},
{4284240518021037291, 62},
{4314906135988218381, 62},
{4345902183769111143, 62},
{4377233426439983690, 62},
{4408904826704964657, 62},
{4440921195860270247, 62},
{4473287685948848824, 62},
{4506009308932394996, 62},
{4539091262872441014, 62},
{4572538923961680426, 62},
{4606357649158571284, 62},
{1, 0},
};
static constexpr cubic_bits INVSQ_K32_PIECES[] = {
{{0, -1, 0, -1}, {11200302134997388u, 18402059876005301005u, 66851162533309700u, 18411183321634434714u}},
{{0, -1, 0, -1}, {11083612640301078u, 18402756362781766351u, 65465449719736405u, 18412102315964486394u}},
{{0, -1, 0, -1}, {10967840673771435u, 18403443759372280613u, 64104974671279312u, 18412999854352419080u}},
{{0, -1, 0, -1}, {10852985511957710u, 18404122136922880060u, 62769389269247356u, 18413876352709267962u}},
{{0, -1, 0, -1}, {10739036623438987u, 18404791623856667293u, 61458236288103883u, 18414732293802925329u}},
{{0, -1, 0, -1}, {10625984212471670u, 18405452342925802244u, 60171074596495704u, 18415568144333365875u}},
{{0, -1, 0, -1}, {10513819183190260u, 18406104411539181623u, 58907478215230668u, 18416384355825475366u}},
{{0, -1, 0, -1}, {10402542196195158u, 18406747889621012728u, 57667136310195121u, 18417181300792272741u}},
{{0, -1, 0, -1}, {10292153979086680u, 18407382836768579309u, 56449740804511258u, 18417959346429592923u}},
{{0, -1, 0, -1}, {10182646375692892u, 18408009363260852431u, 55254889484547464u, 18418718916001429619u}},
{{0, -1, 0, -1}, {10074011824008511u, 18408627574933068007u, 54082192818713659u, 18419460419912288853u}},
{{0, -1, 0, -1}, {9966251648284836u, 18409237526441668164u, 52931361699007200u, 18420184200870278207u}},
{{0, -1, 0, -1}, {9859359040996398u, 18409839318252991277u, 51802023160012664u, 18420890650651568164u}},
{{0, -1, 0, -1}, {9753327482680205u, 18410433048241374578u, 50693813069835420u, 18421580150998884523u}},
{{0, -1, 0, -1}, {9648158944730463u, 18411018766323380804u, 49606459702573714u, 18422253022373442900u}},
{{0, -1, 0, -1}, {9543839930470713u, 18411596608026384909u, 48539535495288897u, 18422909677797411386u}},
{{0, -1, 0, -1}, {9440365305858238u, 18412166661179302336u, 47492705574020824u, 18423550468476290631u}},
{{0, -1, 0, -1}, {9337737818960797u, 18412728969915332610u, 46465717848175915u, 18424175691498258756u}},
{{0, -1, 0, -1}, {9235952820321174u, 18413283618807182030u, 45458248567220415u, 18424785684376656542u}},
{{0, -1, 0, -1}, {9134999094155898u, 18413830727305929513u, 44469914283102724u, 18425380816718452638u}},
{{0, -1, 0, -1}, {9034872988349414u, 18414370372752886332u, 43500411625952407u, 18425961405693909253u}},
{{0, -1, 0, -1}, {8935571359810537u, 18414902629336074579u, 42549445581212946u, 18426527760091003017u}},
{{0, -1, 0, -1}, {8837091149716653u, 18415427570288618403u, 41616725677616756u, 18427080182560179396u}},
{{0, -1, 0, -1}, {8739429758077124u, 18415945266054077834u, 40701968932096734u, 18427618968101619401u}},
{{0, -1, 0, -1}, {8642578478354382u, 18416455818753718757u, 39804839515210098u, 18428144439309811208u}},
{{0, -1, 0, -1}, {8546535430212284u, 18416959293751042928u, 38925069427475912u, 18428656875490487959u}},
{{0, -1, 0, -1}, {8451293062755893u, 18417455785613988954u, 38062342404391896u, 18429156580820064693u}},
{{0, -1, 0, -1}, {8356850107126264u, 18417945355446252938u, 37216403412746308u, 18429643820618354010u}},
{{0, -1, 0, -1}, {8263205620008195u, 18418428062521278499u, 36387002645124939u, 18430118854428618822u}},
{{0, -1, 0, -1}, {8170347723734402u, 18418904021793683377u, 35573797595787686u, 18430581991627087591u}},
{{0, -1, 0, -1}, {8078270869993096u, 18419373314596489019u, 34776506997430590u, 18431033503025339862u}},
{{0, -1, 0, -1}, {7986975291715338u, 18419835992356863878u, 33994902886047530u, 18431473626340292986u}},
{{0, -1, 0, -1}, {7896456229016637u, 18420292131564423937u, 33228717097718752u, 18431902619249269326u}},
{{0, -1, 0, -1}, {7806709303250016u, 18420741806168005352u, 32477688496714655u, 18432320732497296339u}},
{{0, -1, 0, -1}, {7717730653354255u, 18421185087003753117u, 31741563712727362u, 18432728209650680115u}},
{{0, -1, 0, -1}, {7629512076251855u, 18421622065836256068u, 31020057467610542u, 18433125308960533610u}},
{{0, -1, 0, -1}, {7542050691491188u, 18422052807284812786u, 30312932249124325u, 18433512259391148591u}},
{{0, -1, 0, -1}, {7455344034840707u, 18422477373569662224u, 29619956691300750u, 18433889283984382316u}},
{{0, -1, 0, -1}, {7369385566882328u, 18422895846339980944u, 28940870193772325u, 18434256619009776870u}},
{{0, -1, 0, -1}, {7284173604416417u, 18423308282998856454u, 28275454085768760u, 18434614475350560115u}},
{{0, -1, 0, -1}, {7199702710348855u, 18423714758738944180u, 27623463190918051u, 18434963075678930437u}},
{{0, -1, 0, -1}, {7115967888996107u, 18424115345936305130u, 26984659529335011u, 18435302636122909894u}},
{{0, -1, 0, -1}, {7032968702869286u, 18424510094760875618u, 26358842718363122u, 18435633350421941300u}},
{{0, -1, 0, -1}, {6950697298039031u, 18424899090234273774u, 25745759323318635u, 18435955437967156999u}},
{{0, -1, 0, -1}, {6869146577636477u, 18425282412877679141u, 25145165969009440u, 18436269110106280863u}},
{{0, -1, 0, -1}, {6788317384822402u, 18425660105375530554u, 24556880861616278u, 18436574543648669519u}},
{{0, -1, 0, -1}, {6708203810038201u, 18426032241752473072u, 23980675198886570u, 18436871937716865793u}},
{{0, -1, 0, -1}, {6628800435742463u, 18426398893007748869u, 23416327471296447u, 18437161485185042395u}},
{{0, -1, 0, -1}, {6550105944724475u, 18426760110761511228u, 22863648125332618u, 18437443360323672320u}},
{{0, -1, 0, -1}, {6472112873114344u, 18427115974375936319u, 22322407308528574u, 18437717755764072529u}},
{{0, -1, 0, -1}, {6394817689688394u, 18427466544549602767u, 21792406058709987u, 18437984846129312197u}},
{{0, -1, 0, -1}, {6318217446219029u, 18427811878932847801u, 21273452022149856u, 18438244800647322812u}},
{{0, -1, 0, -1}, {6242306728487165u, 18428152045807802863u, 20765338972254301u, 18438497793402149858u}},
{{0, -1, 0, -1}, {6167080844038948u, 18428487109608056995u, 20267868706684324u, 18438743992328905189u}},
{{0, -1, 0, -1}, {6092538480610631u, 18428817119279053586u, 19780868001287339u, 18438983551017877686u}},
{{0, -1, 0, -1}, {6018676113785283u, 18429142133290922642u, 19304151299858831u, 18439216627292860314u}},
{{0, -1, 0, -1}, {5945485598212796u, 18429462229813108154u, 18837506396098302u, 18439443389941689507u}},
{{0, -1, 0, -1}, {5872964761824918u, 18429777460192280331u, 18380762501034675u, 18439663985551285079u}},
{{0, -1, 0, -1}, {5801109642499416u, 18430087883225507009u, 17933739785620098u, 18439878563296433000u}},
{{0, -1, 0, -1}, {5729914487552119u, 18430393564869781957u, 17496250202062290u, 18440087274377950470u}},
{{0, -1, 0, -1}, {5659376752473692u, 18430694556786759053u, 17068128153729099u, 18440290257438142305u}},
{{0, -1, 0, -1}, {5589492256867076u, 18430990917225255427u, 16649200464597881u, 18440487652983291977u}},
{{0, -1, 0, -1}, {5520257572946461u, 18431282700777558021u, 16239301002159141u, 18440679596451732244u}},
{{0, -1, 0, -1}, {5451667955947488u, 18431569967124806070u, 15838258335912408u, 18440866224046158160u}},
{{0, -1, 0, -1}, {5383719465408903u, 18431852772051665492u, 15445908400091763u, 18441047666812003254u}},
{{0, -1, 0, -1}, {5316409002147796u, 18432131167418563233u, 15062094332427120u, 18441224050831453957u}},
{{0, -1, 0, -1}, {5249730531686109u, 18432405216735756442u, 14686645043953228u, 18441395507078279761u}},
{{0, -1, 0, -1}, {5183680783176343u, 18432674971572250866u, 14319407746985678u, 18441562156493771803u}},
{{0, -1, 0, -1}, {5118257377762141u, 18432940479514137708u, 13960236666342383u, 18441724115342701236u}},
{{0, -1, 0, -1}, {5053455342055316u, 18433201798271469612u, 13608973995487829u, 18441881503805556653u}},
{{0, -1, 0, -1}, {4989270742009518u, 18433458980840351752u, 13265470069507705u, 18442034436860722449u}},
{{0, -1, 0, -1}, {4925699107934441u, 18433712081891675167u, 12929574703371315u, 18442183028223289101u}},
{{0, -1, 0, -1}, {4862735547306004u, 18433961157253031239u, 12601137948463392u, 18442327390003804147u}},
{{0, -1, 0, -1}, {4800377693710378u, 18434206252304522044u, 12280025289643313u, 18442467626098525596u}},
{{0, -1, 0, -1}, {4738621465925507u, 18434447418822711450u, 11966095325785744u, 18442603842069489773u}},
{{0, -1, 0, -1}, {4677462523619453u, 18434684709108984299u, 11659207639305051u, 18442736141652334548u}},
{{0, -1, 0, -1}, {4616897812334723u, 18434918170048469648u, 11359230388850586u, 18442864623544844955u}},
{{0, -1, 0, -1}, {4556922973239454u, 18435147853143472039u, 11066027334182257u, 18442989387021466705u}},
{{0, -1, 0, -1}, {4497534957733533u, 18435373804442354415u, 10779470747823042u, 18443110526436290327u}},
{{0, -1, 0, -1}, {4438729792872689u, 18435596073127189301u, 10499430394711845u, 18443228135957585199u}},
{{0, -1, 0, -1}, {4380502779444497u, 18435814710649423496u, 10225774748554382u, 18443342309023461121u}},
{{0, -1, 0, -1}, {4322849790383905u, 18436029765821588861u, 9958377154846682u, 18443453135783448886u}},
{{0, -1, 0, -1}, {4265767286432963u, 18436241284827954231u, 9697115709835141u, 18443560703214311322u}},
{{0, -1, 0, -1}, {4209252398140422u, 18436449311001727017u, 9441873416089418u, 18443665095124942014u}},
{{0, -1, 0, -1}, {4153301260090285u, 18436653890978221655u, 9192530588838890u, 18443766395298642998u}},
{{0, -1, 0, -1}, {4097909333179018u, 18436855073404061311u, 8948966549056119u, 18443864686774854852u}},
{{0, -1, 0, -1}, {4043073264606552u, 18437052902169856150u, 8711067810866593u, 18443960048566479462u}},
{{0, -1, 0, -1}, {3988789494501193u, 18437247421538264855u, 8478721773072460u, 18444052558264383666u}},
{{0, -1, 0, -1}, {3935054438177170u, 18437438675464511287u, 8251817545199414u, 18444142291720302259u}},
{{0, -1, 0, -1}, {3881864210282521u, 18437626708576645635u, 8030244768461733u, 18444229323537104775u}},
{{0, -1, 0, -1}, {3829214865263537u, 18437811565288613956u, 7813894686458304u, 18444313726655612705u}},
{{0, -1, 0, -1}, {3777102857942231u, 18437993288204447380u, 7602661969198633u, 18444395571677560722u}},
{{0, -1, 0, -1}, {3725524178411236u, 18438171921145930706u, 7396441163030086u, 18444474928270078386u}},
{{0, -1, 0, -1}, {3674475419974836u, 18438347505441925132u, 7195130970732515u, 18444551863536698072u}},
{{0, -1, 0, -1}, {3623953192837413u, 18438520081997004858u, 6998631802506454u, 18444626442999298752u}},
{{0, -1, 0, -1}, {3573953803148555u, 18438689692379467534u, 6806844530326508u, 18444698731089187602u}},
{{0, -1, 0, -1}, {3524473556542306u, 18438856377766973834u, 6619671691571987u, 18444768790704726678u}},
{{0, -1, 0, -1}, {3475508803809754u, 18439020178797245031u, 6437017634506867u, 18444836683180787143u}},
{{0, -1, 0, -1}, {3427056126864883u, 18439181134957563387u, 6258789169352741u, 18444902468073071136u}},
{{0, -1, 0, -1}, {3379111864441912u, 18439339286175152794u, 6084893774473514u, 18444966203847271791u}},
{{0, -1, 0, -1}, {3331672306304179u, 18439494672152264140u, 5915240338216701u, 18445027947617846129u}},
{{0, -1, 0, -1}, {3284734156108281u, 18439647330865664660u, 5749740763777053u, 18445087754590680528u}},
{{0, -1, 0, -1}, {3238293751624704u, 18439797301123758638u, 5588307158254850u, 18445145679107095634u}},
{{0, -1, 0, -1}, {3192347463167264u, 18439944621251925472u, 5430853262584175u, 18445201774139284874u}},
{{0, -1, 0, -1}, {3146891844320543u, 18440089328621191497u, 5277294926542808u, 18445256091145169877u}},
{{0, -1, 0, -1}, {3101923310086641u, 18440231460683617877u, 5127548983037003u, 18445308680489659830u}},
{{0, -1, 0, -1}, {3057438382070391u, 18440371054190895183u, 4981534062963308u, 18445359591174637141u}},
{{0, -1, 0, -1}, {3013433587459263u, 18440508145522582983u, 4839170224852747u, 18445408870990560274u}},
{{0, -1, 0, -1}, {2969905451552581u, 18440642770709897388u, 4700378914752405u, 18445456566548430608u}},
{{0, -1, 0, -1}, {2926850604605742u, 18440774965111122151u, 4565083280054426u, 18445502723191623964u}},
{{0, -1, 0, -1}, {2884265571901273u, 18440904764061828693u, 4433207483688294u, 18445547385249077117u}},
{{0, -1, 0, -1}, {2842146915274988u, 18441032202437691966u, 4304677139879992u, 18445590595902605165u}},
{{0, -1, 0, -1}, {2818006080522913u, 18441104802881331258u, 4231898298969585u, 18445614915134990113u}},
};
static constexpr table_ref INVSQ_K32_TABLE{INVSQ_K32_KNOTS, INVSQ_K32_PIECES, 113, 48};
static constexpr table_ref const* const INVSQ_BY_K[7] = {
&INVSQ_K8_TABLE,
&INVSQ_K12_TABLE,
&INVSQ_K16_TABLE,
&INVSQ_K20_TABLE,
&INVSQ_K24_TABLE,
&INVSQ_K28_TABLE,
&INVSQ_K32_TABLE,
};