diff --git a/src/cuda/common.cu b/src/cuda/common.cu index 19b0cbd1a..6e7064b25 100644 --- a/src/cuda/common.cu +++ b/src/cuda/common.cu @@ -260,6 +260,8 @@ void cufinufft_setup_binsize(int type, int ns, int dim, cufinufft_opts *opts) { throw std::runtime_error(cudaGetErrorString(err)); } // use 1/6 of the shared memory for the binsize + // From experiments on multiple GPUs this gives the best tradeoff. + // It is within 90% of the maximum performance for all GPUs tested. shared_mem_per_block /= 6; const int bin_size = shared_mem_per_block / sizeof(cuda_complex) - ((ns + 1) / 2) * 2; diff --git a/src/ker_horner_allw_loop.inc b/src/ker_horner_allw_loop.inc deleted file mode 100644 index 953c4618b..000000000 --- a/src/ker_horner_allw_loop.inc +++ /dev/null @@ -1,207 +0,0 @@ -// Code generated by gen_all_horner_C_code.m in finufft/devel -// Authors: Alex Barnett & Ludvig af Klinteberg. -// (C) The Simons Foundation, Inc. - if (w==2) { - constexpr FLT c0[] = {4.5147043243215343E+01, 4.5147043243215350E+01}; - constexpr FLT c1[] = {5.7408070938221307E+01, -5.7408070938221300E+01}; - constexpr FLT c2[] = {-1.8395117920046544E+00, -1.8395117920046602E+00}; - constexpr FLT c3[] = {-2.0382426253182064E+01, 2.0382426253182086E+01}; - constexpr FLT c4[] = {-2.0940804433577389E+00, -2.0940804433577398E+00}; - for (int i=0; i<2; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i])))); - } else if (w==3) { - constexpr FLT c0[] = {1.5653991189315130E+02, 8.8006872410780375E+02, 1.5653991189967169E+02}; - constexpr FLT c1[] = {3.1653018869611083E+02, 2.7828437114531882E-14, -3.1653018868907077E+02}; - constexpr FLT c2[] = {1.7742692790454484E+02, -3.3149255274727801E+02, 1.7742692791117128E+02}; - constexpr FLT c3[] = {-1.5357716116473071E+01, 1.0675641863333163E-13, 1.5357716122720211E+01}; - constexpr FLT c4[] = {-3.7757583061523640E+01, 5.3222970968867450E+01, -3.7757583054647341E+01}; - constexpr FLT c5[] = {-3.9654011076088449E+00, 4.9521033695040343E-14, 3.9654011139270429E+00}; - for (int i=0; i<3; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i]))))); - } else if (w==4) { - constexpr FLT c0[] = {5.4284366850213223E+02, 1.0073871433088407E+04, 1.0073871433088407E+04, 5.4284366850213269E+02}; - constexpr FLT c1[] = {1.4650917259256942E+03, 6.1905285583602899E+03, -6.1905285583602899E+03, -1.4650917259256942E+03}; - constexpr FLT c2[] = {1.4186910680718349E+03, -1.3995339862725573E+03, -1.3995339862725571E+03, 1.4186910680718345E+03}; - constexpr FLT c3[] = {5.1133995502497481E+02, -1.4191608683682980E+03, 1.4191608683682985E+03, -5.1133995502497402E+02}; - constexpr FLT c4[] = {-4.8293622641173705E+01, 3.9393732546135901E+01, 3.9393732546136945E+01, -4.8293622641173727E+01}; - constexpr FLT c5[] = {-7.8386867802392203E+01, 1.4918904800408794E+02, -1.4918904800408947E+02, 7.8386867802392203E+01}; - constexpr FLT c6[] = {-1.0039212571700403E+01, 5.0626747735617119E+00, 5.0626747735622777E+00, -1.0039212571700599E+01}; - for (int i=0; i<4; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i])))))); - } else if (w==5) { - constexpr FLT c0[] = {9.9223677575398506E+02, 3.7794697666613349E+04, 9.8715771010760567E+04, 3.7794697666613327E+04, 9.9223677575398540E+02}; - constexpr FLT c1[] = {3.0430174925083834E+03, 3.7938404259811425E+04, -4.1880997701304513E-12, -3.7938404259811403E+04, -3.0430174925083829E+03}; - constexpr FLT c2[] = {3.6092689177271232E+03, 7.7501368899498630E+03, -2.2704627332475000E+04, 7.7501368899498721E+03, 3.6092689177271213E+03}; - constexpr FLT c3[] = {1.9990077310495410E+03, -3.8875294641277214E+03, 1.6137850891850780E-11, 3.8875294641277346E+03, -1.9990077310495410E+03}; - constexpr FLT c4[] = {4.0071733590403909E+02, -1.5861137916762543E+03, 2.3839858699098786E+03, -1.5861137916762577E+03, 4.0071733590403909E+02}; - constexpr FLT c5[] = {-9.1301168206167233E+01, 1.2316471075215087E+02, 1.9401736511657983E-12, -1.2316471075215495E+02, 9.1301168206166977E+01}; - constexpr FLT c6[] = {-5.5339722671222894E+01, 1.1960590540262304E+02, -1.5249941358312140E+02, 1.1960590540262024E+02, -5.5339722671224088E+01}; - constexpr FLT c7[] = {-3.3762488150349581E+00, 2.2839981873006558E+00, 8.2819625836083788E-12, -2.2839981872910400E+00, 3.3762488150351579E+00}; - for (int i=0; i<5; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i]))))))); - } else if (w==6) { - constexpr FLT c0[] = {2.0553833234911899E+03, 1.5499537739913145E+05, 8.1177907023291232E+05, 8.1177907023291232E+05, 1.5499537739913145E+05, 2.0553833235005700E+03}; - constexpr FLT c1[] = {7.1269776034442684E+03, 2.0581923258843319E+05, 3.1559612614917679E+05, -3.1559612614917639E+05, -2.0581923258843317E+05, -7.1269776034341394E+03}; - constexpr FLT c2[] = {1.0023404568475091E+04, 9.0916650498360206E+04, -1.0095927514054631E+05, -1.0095927514054631E+05, 9.0916650498360163E+04, 1.0023404568484637E+04}; - constexpr FLT c3[] = {7.2536109410387444E+03, 4.8347162752603444E+03, -5.0512736602018485E+04, 5.0512736602018602E+04, -4.8347162752602972E+03, -7.2536109410297577E+03}; - constexpr FLT c4[] = {2.7021878300949775E+03, -7.8773465553972374E+03, 5.2105876478343516E+03, 5.2105876478343944E+03, -7.8773465553972464E+03, 2.7021878301048723E+03}; - constexpr FLT c5[] = {3.2120291706547630E+02, -1.8229189469936912E+03, 3.7928113414428476E+03, -3.7928113414427171E+03, 1.8229189469937239E+03, -3.2120291705638328E+02}; - constexpr FLT c6[] = {-1.2051267090537345E+02, 2.2400507411399769E+02, -1.2506575852547746E+02, -1.2506575852531816E+02, 2.2400507411399730E+02, -1.2051267089640162E+02}; - constexpr FLT c7[] = {-4.5977202613346755E+01, 1.1536880606857032E+02, -1.7819720186492938E+02, 1.7819720186504426E+02, -1.1536880606851560E+02, 4.5977202622148354E+01}; - constexpr FLT c8[] = {-1.5631081288822022E+00, 7.1037430590520445E-01, -6.9838401262032682E-02, -6.9838401199524530E-02, 7.1037430591562767E-01, -1.5631081203751171E+00}; - for (int i=0; i<6; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i])))))))); - } else if (w==7) { - constexpr FLT c0[] = {3.9948351830487582E+03, 5.4715865608590841E+05, 5.0196413492771825E+06, 9.8206709220713321E+06, 5.0196413492771871E+06, 5.4715865608590853E+05, 3.9948351830642619E+03}; - constexpr FLT c1[] = {1.5290160332974698E+04, 8.7628248584320419E+05, 3.4421061790934466E+06, 6.5103105025927563E-10, -3.4421061790934466E+06, -8.7628248584320443E+05, -1.5290160332958061E+04}; - constexpr FLT c2[] = {2.4458227486779258E+04, 5.3904618484139442E+05, 2.4315566181017563E+05, -1.6133959371974308E+06, 2.4315566181017424E+05, 5.3904618484139396E+05, 2.4458227486795091E+04}; - constexpr FLT c3[] = {2.1166189345881652E+04, 1.3382732160223150E+05, -3.3113450969689601E+05, 2.5683270626620309E-10, 3.3113450969689793E+05, -1.3382732160223130E+05, -2.1166189345866896E+04}; - constexpr FLT c4[] = {1.0542795672344870E+04, -7.0739172265096349E+03, -6.5563293056048627E+04, 1.2429734005960199E+05, -6.5563293056048671E+04, -7.0739172265096395E+03, 1.0542795672361222E+04}; - constexpr FLT c5[] = {2.7903491906228451E+03, -1.0975382873972989E+04, 1.3656979541145318E+04, 4.9801640867456605E-10, -1.3656979541144143E+04, 1.0975382873973054E+04, -2.7903491906078325E+03}; - constexpr FLT c6[] = {1.6069721418054232E+02, -1.5518707872249406E+03, 4.3634273936649897E+03, -5.9891976420600004E+03, 4.3634273936636964E+03, -1.5518707872250636E+03, 1.6069721419532380E+02}; - constexpr FLT c7[] = {-1.2289277373866669E+02, 2.8583630927761948E+02, -2.8318194617245649E+02, -3.5832266061541795E-11, 2.8318194617438041E+02, -2.8583630927744588E+02, 1.2289277375319726E+02}; - constexpr FLT c8[] = {-3.2270164914244575E+01, 9.1892112257588494E+01, -1.6710678096380749E+02, 2.0317049305436126E+02, -1.6710678096299210E+02, 9.1892112257580479E+01, -3.2270164900216493E+01}; - constexpr FLT c9[] = {-1.4761409684320093E-01, -9.1862771282699351E-01, 1.2845147740384601E+00, -5.0335941641611417E-10, -1.2845147731561353E+00, 9.1862771293147938E-01, 1.4761410890830065E-01}; - for (int i=0; i<7; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i]))))))))); - } else if (w==8) { - constexpr FLT c0[] = {7.3898000697448142E+03, 1.7297637497600052E+06, 2.5578341605285820E+07, 8.4789650417103425E+07, 8.4789650417103410E+07, 2.5578341605285831E+07, 1.7297637497600054E+06, 7.3898000697448097E+03}; - constexpr FLT c1[] = {3.0719636811267621E+04, 3.1853145713323932E+06, 2.3797981861403704E+07, 2.4569731244678468E+07, -2.4569731244678475E+07, -2.3797981861403704E+07, -3.1853145713323941E+06, -3.0719636811267595E+04}; - constexpr FLT c2[] = {5.4488498478251728E+04, 2.4101183255475122E+06, 6.4554051283428418E+06, -8.9200440393090658E+06, -8.9200440393090583E+06, 6.4554051283428296E+06, 2.4101183255475126E+06, 5.4488498478251728E+04}; - constexpr FLT c3[] = {5.3926359802542138E+04, 9.0469037926849385E+05, -6.0897036277695757E+05, -3.0743852105799988E+06, 3.0743852105800197E+06, 6.0897036277696723E+05, -9.0469037926849280E+05, -5.3926359802542152E+04}; - constexpr FLT c4[] = {3.2444118016247576E+04, 1.3079802224392162E+05, -5.8652889370128687E+05, 4.2333306008153327E+05, 4.2333306008153543E+05, -5.8652889370128710E+05, 1.3079802224392179E+05, 3.2444118016247601E+04}; - constexpr FLT c5[] = {1.1864306345505300E+04, -2.2700360645707835E+04, -5.0713607251411129E+04, 1.8308704458211461E+05, -1.8308704458211147E+05, 5.0713607251410089E+04, 2.2700360645707704E+04, -1.1864306345505296E+04}; - constexpr FLT c6[] = {2.2812256770903396E+03, -1.1569135767377908E+04, 2.0942387020802456E+04, -1.1661592834947036E+04, -1.1661592834946512E+04, 2.0942387020804370E+04, -1.1569135767377549E+04, 2.2812256770903291E+03}; - constexpr FLT c7[] = {8.5503535636977634E+00, -9.7513976461196773E+02, 3.8242995179186414E+03, -6.9201295567263214E+03, 6.9201295567309990E+03, -3.8242995179140653E+03, 9.7513976461263269E+02, -8.5503535636935535E+00}; - constexpr FLT c8[] = {-1.0230637348345098E+02, 2.8246898554249236E+02, -3.8638201738252542E+02, 1.9106407992706994E+02, 1.9106407993520349E+02, -3.8638201738414602E+02, 2.8246898554297724E+02, -1.0230637348344338E+02}; - constexpr FLT c9[] = {-1.9200143062942033E+01, 6.1692257626381128E+01, -1.2981109187954436E+02, 1.8681284209765820E+02, -1.8681284209914423E+02, 1.2981109187880136E+02, -6.1692257626381128E+01, 1.9200143062947838E+01}; - constexpr FLT c10[] = {3.7894993761363543E-01, -1.7334408835887836E+00, 2.5271184092462979E+00, -1.2600963912775105E+00, -1.2600963880718390E+00, 2.5271184126204269E+00, -1.7334408829982433E+00, 3.7894993761427903E-01}; - for (int i=0; i<8; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i] + z*(c10[i])))))))))); - } else if (w==9) { - constexpr FLT c0[] = {1.3136365370186153E+04, 5.0196413492771843E+06, 1.1303327711722577E+08, 5.8225443924996734E+08, 9.7700272582690716E+08, 5.8225443924996805E+08, 1.1303327711722578E+08, 5.0196413492772263E+06, 1.3136365370186144E+04}; - constexpr FLT c1[] = {5.8623313038274369E+04, 1.0326318537280345E+07, 1.2898448324824868E+08, 3.0522863709830379E+08, 7.2435840302079811E-08, -3.0522863709830397E+08, -1.2898448324824865E+08, -1.0326318537280394E+07, -5.8623313038274347E+04}; - constexpr FLT c2[] = {1.1335001341875960E+05, 9.0726133144784812E+06, 5.3501544534038134E+07, -2.6789524644140172E+05, -1.2483923718899371E+08, -2.6789524644173466E+05, 5.3501544534038089E+07, 9.0726133144785147E+06, 1.1335001341875963E+05}; - constexpr FLT c3[] = {1.2489113703229754E+05, 4.3035547171861976E+06, 6.3021978510599164E+06, -2.6014941986658975E+07, 5.3074599277157087E-08, 2.6014941986659400E+07, -6.3021978510598680E+06, -4.3035547171862088E+06, -1.2489113703229751E+05}; - constexpr FLT c4[] = {8.6425493435991244E+04, 1.0891182836653311E+06, -2.0713033564200432E+06, -2.8994941183505901E+06, 7.5905338661206560E+06, -2.8994941183505324E+06, -2.0713033564200350E+06, 1.0891182836653385E+06, 8.6425493435991288E+04}; - constexpr FLT c5[] = {3.8657354724013800E+04, 7.9936390113329253E+04, -7.0458265546791849E+05, 1.0151095605715540E+06, 7.5990350518026299E-08, -1.0151095605718379E+06, 7.0458265546793933E+05, -7.9936390113333939E+04, -3.8657354724013821E+04}; - constexpr FLT c6[] = {1.0779131453134645E+04, -3.3466718311300116E+04, -1.3245366618985940E+04, 1.8238470515354761E+05, -2.9285656292981049E+05, 1.8238470515352563E+05, -1.3245366618989963E+04, -3.3466718311299133E+04, 1.0779131453134627E+04}; - constexpr FLT c7[] = {1.4992527030548656E+03, -9.7024371533879767E+03, 2.3216330734078529E+04, -2.3465262819038293E+04, -4.5678067266366728E-08, 2.3465262819229152E+04, -2.3216330734050898E+04, 9.7024371533899721E+03, -1.4992527030548690E+03}; - constexpr FLT c8[] = {-7.9857427421152821E+01, -4.0585588534976301E+02, 2.6054813773370911E+03, -6.1806593581469824E+03, 8.0679596873459095E+03, -6.1806593581737125E+03, 2.6054813773390433E+03, -4.0585588535087578E+02, -7.9857427421118601E+01}; - constexpr FLT c9[] = {-7.1572272057928345E+01, 2.2785637019390455E+02, -3.9109820766111051E+02, 3.3597424707310040E+02, -1.3908671051550088E-08, -3.3597424727519922E+02, 3.9109820767448468E+02, -2.2785637019111829E+02, 7.1572272057948652E+01}; - constexpr FLT c10[] = {-9.8886360697883688E+00, 3.5359026950204516E+01, -8.5251867695464611E+01, 1.4285748013461193E+02, -1.6935269664190733E+02, 1.4285748014610570E+02, -8.5251867686017064E+01, 3.5359026947336602E+01, -9.8886360697963340E+00}; - for (int i=0; i<9; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i] + z*(c10[i])))))))))); - } else if (w==10) { - constexpr FLT c0[] = {2.2594586605749224E+04, 1.3595989066786611E+07, 4.4723032442444932E+08, 3.3781755837397552E+09, 8.6836783895849857E+09, 8.6836783895849838E+09, 3.3781755837397523E+09, 4.4723032442444944E+08, 1.3595989066786496E+07, 2.2594586605749344E+04}; - constexpr FLT c1[] = {1.0729981697645644E+05, 3.0651490267742995E+07, 5.9387966085130477E+08, 2.4434902657508349E+09, 2.0073077861288934E+09, -2.0073077861288950E+09, -2.4434902657508330E+09, -5.9387966085130477E+08, -3.0651490267742828E+07, -1.0729981697645634E+05}; - constexpr FLT c2[] = {2.2340399734184612E+05, 3.0258214643190462E+07, 3.1512411458738238E+08, 4.3618276932319850E+08, -7.8178848450497270E+08, -7.8178848450497031E+08, 4.3618276932319820E+08, 3.1512411458738214E+08, 3.0258214643190324E+07, 2.2340399734184553E+05}; - constexpr FLT c3[] = {2.6917433004353492E+05, 1.6875651476661246E+07, 7.4664745481963649E+07, -9.5882157211117968E+07, -2.0622994435532477E+08, 2.0622994435532823E+08, 9.5882157211118430E+07, -7.4664745481963366E+07, -1.6875651476661157E+07, -2.6917433004353428E+05}; - constexpr FLT c4[] = {2.0818422772177897E+05, 5.6084730690362593E+06, 1.4435118192351859E+06, -4.0063869969544269E+07, 3.2803674392747816E+07, 3.2803674392746560E+07, -4.0063869969546124E+07, 1.4435118192352206E+06, 5.6084730690362155E+06, 2.0818422772177868E+05}; - constexpr FLT c5[] = {1.0781139496011086E+05, 9.9202615851199278E+05, -3.3266265543961083E+06, -4.8557049011452327E+05, 1.0176155522772400E+07, -1.0176155522773268E+07, 4.8557049011599307E+05, 3.3266265543962419E+06, -9.9202615851196356E+05, -1.0781139496011072E+05}; - constexpr FLT c6[] = {3.7380102688153638E+04, 1.2716675000361241E+04, -6.2163527451762755E+05, 1.4157962667184302E+06, -8.4419693137719855E+05, -8.4419693137682532E+05, 1.4157962667184921E+06, -6.2163527451772091E+05, 1.2716675000342160E+04, 3.7380102688153478E+04}; - constexpr FLT c7[] = {8.1238936393894573E+03, -3.4872365530440075E+04, 2.3913680325287874E+04, 1.2428850301835715E+05, -3.2158255329711520E+05, 3.2158255329964001E+05, -1.2428850301842803E+05, -2.3913680325138281E+04, 3.4872365530466821E+04, -8.1238936393894610E+03}; - constexpr FLT c8[] = {7.8515926628982811E+02, -6.6607899119346384E+03, 2.0167398338412942E+04, -2.8951401344643764E+04, 1.4622828141516249E+04, 1.4622828142773422E+04, -2.8951401346273171E+04, 2.0167398338466974E+04, -6.6607899119428766E+03, 7.8515926628979298E+02}; - constexpr FLT c9[] = {-1.0147176570538747E+02, -3.5304284178326540E+01, 1.3576976855470537E+03, -4.3921059355373945E+03, 7.3232085265656797E+03, -7.3232085282537992E+03, 4.3921059362506849E+03, -1.3576976853984515E+03, 3.5304284186128150E+01, 1.0147176570552679E+02}; - constexpr FLT c10[] = {-4.3161545259359876E+01, 1.5498490982726668E+02, -3.1771250761814974E+02, 3.7215448796966825E+02, -1.7181762811175784E+02, -1.7181762918070896E+02, 3.7215448823960344E+02, -3.1771250765054128E+02, 1.5498490982861634E+02, -4.3161545259484186E+01}; - constexpr FLT c11[] = {-4.2916172038642904E+00, 1.7402146073587435E+01, -4.7947588063038118E+01, 9.2697697961204668E+01, -1.2821427624698006E+02, 1.2821427667135228E+02, -9.2697698383138089E+01, 4.7947588092305367E+01, -1.7402146072063207E+01, 4.2916172038214455E+00}; - for (int i=0; i<10; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i] + z*(c10[i] + z*(c11[i]))))))))))); - } else if (w==11) { - constexpr FLT c0[] = {3.7794653219809712E+04, 3.4782300224660814E+07, 1.6188020733727572E+09, 1.7196758809615025E+10, 6.3754384857724686E+10, 9.7196447559193588E+10, 6.3754384857724686E+10, 1.7196758809615013E+10, 1.6188020733727574E+09, 3.4782300224660836E+07, 3.7794653219808912E+04}; - constexpr FLT c1[] = {1.8969206922085886E+05, 8.4769319065313712E+07, 2.4230555767723413E+09, 1.5439732722639107E+10, 2.7112836839612331E+10, 7.5382856415600940E-06, -2.7112836839612324E+10, -1.5439732722639109E+10, -2.4230555767723413E+09, -8.4769319065313712E+07, -1.8969206922085691E+05}; - constexpr FLT c2[] = {4.2138380313901440E+05, 9.2050522922791913E+07, 1.5259983101266618E+09, 4.7070559561237240E+09, -1.2448027572952247E+09, -1.0161446790279316E+10, -1.2448027572952359E+09, 4.7070559561237249E+09, 1.5259983101266608E+09, 9.2050522922791883E+07, 4.2138380313901132E+05}; - constexpr FLT c3[] = {5.4814313598122029E+05, 5.8085130777589604E+07, 4.9484006166551131E+08, 1.6222124676641059E+08, -2.0440440381345210E+09, 1.6029666825264191E-05, 2.0440440381345406E+09, -1.6222124676640612E+08, -4.9484006166551065E+08, -5.8085130777589574E+07, -5.4814313598121749E+05}; - constexpr FLT c4[] = {4.6495183529254969E+05, 2.3067199578027170E+07, 6.9832590192482471E+07, -2.2024799260683393E+08, -1.2820270942588173E+08, 5.1017181199129957E+08, -1.2820270942587103E+08, -2.2024799260683718E+08, 6.9832590192482680E+07, 2.3067199578027181E+07, 4.6495183529254753E+05}; - constexpr FLT c5[] = {2.7021781043532956E+05, 5.6764510325100170E+06, -5.5650761736746123E+06, -3.9907385617899098E+07, 7.2453390663685441E+07, 1.3807321808330796E-06, -7.2453390663686499E+07, 3.9907385617896959E+07, 5.5650761736744791E+06, -5.6764510325100273E+06, -2.7021781043532840E+05}; - constexpr FLT c6[] = {1.0933249308680632E+05, 6.9586821127988759E+05, -3.6860240321936086E+06, 2.7428169457744057E+06, 8.3392008440658972E+06, -1.6402201025049815E+07, 8.3392008440622678E+06, 2.7428169457778567E+06, -3.6860240321934861E+06, 6.9586821127989655E+05, 1.0933249308680571E+05}; - constexpr FLT c7[] = {3.0203516161820731E+04, -3.6879059542738614E+04, -4.1141031216769724E+05, 1.4111389975281695E+06, -1.5914376635274226E+06, 6.7631682826831895E-06, 1.5914376635404355E+06, -1.4111389975219201E+06, 4.1141031216798135E+05, 3.6879059542753101E+04, -3.0203516161820640E+04}; - constexpr FLT c8[] = {5.1670143574923986E+03, -2.8613147115359603E+04, 4.3560195427027051E+04, 4.8438679581734432E+04, -2.5856630639957223E+05, 3.7994883866286115E+05, -2.5856630639708077E+05, 4.8438679579228658E+04, 4.3560195427174098E+04, -2.8613147115353891E+04, 5.1670143574923814E+03}; - constexpr FLT c9[] = {3.0888018539742438E+02, -3.7949446187486474E+03, 1.4313303205130735E+04, -2.6681600236165083E+04, 2.3856005159699442E+04, -1.9072153968212169E-06, -2.3856005160079862E+04, 2.6681600234262976E+04, -1.4313303204940523E+04, 3.7949446187568205E+03, -3.0888018539723868E+02}; - constexpr FLT c10[] = {-8.3747489794178762E+01, 1.1948077481430271E+02, 4.8528498043145930E+02, -2.5024391100070475E+03, 5.3511195380863319E+03, -6.7655484103934950E+03, 5.3511195323636521E+03, -2.5024391101798296E+03, 4.8528498086337265E+02, 1.1948077483184566E+02, -8.3747489794339316E+01}; - constexpr FLT c11[] = {-2.2640047135393669E+01, 9.0840898559070766E+01, -2.1597187557069051E+02, 3.1511228970473707E+02, -2.4856618213020064E+02, -2.0962600056762836E-06, 2.4856618232531096E+02, -3.1511228707801843E+02, 2.1597187541459934E+02, -9.0840898577362736E+01, 2.2640047135479467E+01}; - constexpr FLT c12[] = {-1.6306382885603201E+00, 7.3325946574893264E+00, -2.3241017691629008E+01, 5.1715493346619120E+01, -8.2673008978082819E+01, 9.6489716906321945E+01, -8.2673008978083388E+01, 5.1715493276466965E+01, -2.3241017744243891E+01, 7.3325946602297218E+00, -1.6306382886202573E+00}; - for (int i=0; i<11; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i] + z*(c10[i] + z*(c11[i] + z*(c12[i])))))))))))); - } else if (w==12) { - constexpr FLT c0[] = {6.1722991679853279E+04, 8.4789650417103827E+07, 5.4431675199498749E+09, 7.8788892335272308E+10, 4.0355760945670074E+11, 8.8071481911347998E+11, 8.8071481911348035E+11, 4.0355760945670081E+11, 7.8788892335272507E+10, 5.4431675199498901E+09, 8.4789650417103752E+07, 6.1722991679871782E+04}; - constexpr FLT c1[] = {3.2561466099406185E+05, 2.2112758120210630E+08, 8.9911609880089836E+09, 8.3059508064200958E+10, 2.3965569143469873E+11, 1.6939286803305209E+11, -1.6939286803305209E+11, -2.3965569143469867E+11, -8.3059508064201111E+10, -8.9911609880090008E+09, -2.2112758120210621E+08, -3.2561466099404270E+05}; - constexpr FLT c2[] = {7.6621098001581512E+05, 2.6026568260310283E+08, 6.4524338253008652E+09, 3.3729904113826836E+10, 2.8555202212474079E+10, -6.8998572040731476E+10, -6.8998572040731461E+10, 2.8555202212474102E+10, 3.3729904113826820E+10, 6.4524338253008747E+09, 2.6026568260310283E+08, 7.6621098001583782E+05}; - constexpr FLT c3[] = {1.0657807616803222E+06, 1.8144472126891005E+08, 2.5524827004349880E+09, 5.2112383911371851E+09, -1.0268350564014641E+10, -1.4763245309081160E+10, 1.4763245309081381E+10, 1.0268350564014679E+10, -5.2112383911371050E+09, -2.5524827004349866E+09, -1.8144472126890993E+08, -1.0657807616803094E+06}; - constexpr FLT c4[] = {9.7829638830158766E+05, 8.2222351241520002E+07, 5.5676911894064677E+08, -4.8739037675425845E+08, -2.7153428193078089E+09, 2.5627633609246616E+09, 2.5627633609247270E+09, -2.7153428193078089E+09, -4.8739037675429344E+08, 5.5676911894064772E+08, 8.2222351241519988E+07, 9.7829638830161223E+05}; - constexpr FLT c5[] = {6.2536876825113979E+05, 2.4702814073680259E+07, 4.1488431554846764E+07, -2.9274790542417943E+08, 1.0742154109192364E+08, 6.2185168968026125E+08, -6.2185168968025279E+08, -1.0742154109186378E+08, 2.9274790542422217E+08, -4.1488431554844894E+07, -2.4702814073680248E+07, -6.2536876825112430E+05}; - constexpr FLT c6[] = {2.8527714307528501E+05, 4.6266378435690925E+06, -1.0665598090789001E+07, -2.6048960239884529E+07, 9.1597254427304730E+07, -5.9794495983325504E+07, -5.9794495983230442E+07, 9.1597254427350238E+07, -2.6048960239922173E+07, -1.0665598090794679E+07, 4.6266378435690831E+06, 2.8527714307530370E+05}; - constexpr FLT c7[] = {9.2873647411234633E+04, 3.6630046787437343E+05, -3.1271047224703613E+06, 4.8612412939389814E+06, 3.3820440907783178E+06, -1.6880127953644276E+07, 1.6880127953794900E+07, -3.3820440907782884E+06, -4.8612412938910574E+06, 3.1271047224760642E+06, -3.6630046787425788E+05, -9.2873647411217215E+04}; - constexpr FLT c8[] = {2.0817947751046311E+04, -5.5660303410283603E+04, -1.9519783923352187E+05, 1.0804817251249440E+06, -1.8264985852847320E+06, 9.7602844964054180E+05, 9.7602844964026869E+05, -1.8264985852578641E+06, 1.0804817251242315E+06, -1.9519783923298802E+05, -5.5660303410281354E+04, 2.0817947751063894E+04}; - constexpr FLT c9[] = {2.7986023314783351E+03, -1.9404411093657811E+04, 4.3922625001185028E+04, -7.6450317330166517E+03, -1.5273911976404343E+05, 3.3223441450907954E+05, -3.3223441450755787E+05, 1.5273911981578072E+05, 7.6450317512768770E+03, -4.3922624998712294E+04, 1.9404411093676386E+04, -2.7986023314643107E+03}; - constexpr FLT c10[] = {6.7849020474217255E+01, -1.7921351307610907E+03, 8.4980694701237535E+03, -1.9742624848712727E+04, 2.4620674811515193E+04, -1.1676544936917096E+04, -1.1676544845699163E+04, 2.4620674862652242E+04, -1.9742624819688928E+04, 8.4980694644226842E+03, -1.7921351307503089E+03, 6.7849020488654887E+01}; - constexpr FLT c11[] = {-5.4577020998540995E+01, 1.3637112871144197E+02, 4.5513617165591533E+01, -1.1174001347694452E+03, 3.2018768920645603E+03, -5.0580352089258022E+03, 5.0580351705274497E+03, -3.2018769484133886E+03, 1.1174001005075061E+03, -4.5513609907370189E+01, -1.3637112869192950E+02, 5.4577021011650153E+01}; - constexpr FLT c12[] = {-1.0538365872663764E+01, 4.6577222493036992E+01, -1.2606964247581806E+02, 2.1881090265912360E+02, -2.3273404104747246E+02, 1.0274271612440927E+02, 1.0274271612440242E+02, -2.3273400063947102E+02, 2.1881092482740195E+02, -1.2606964693052080E+02, 4.6577222495229805E+01, -1.0538365860486415E+01}; - constexpr FLT c13[] = {-4.6087004138254672E-01, 2.5969759057927089E+00, -9.6946928123584506E+00, 2.4990051638288470E+01, -4.6013914134428035E+01, 6.2056955095902744E+01, -6.2056967309552682E+01, 4.6013924603270830E+01, -2.4990037679831403E+01, 9.6946951024178141E+00, -2.5969758989770559E+00, 4.6087004739949022E-01}; - for (int i=0; i<12; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i] + z*(c10[i] + z*(c11[i] + z*(c12[i] + z*(c13[i]))))))))))))); - } else if (w==13) { - constexpr FLT c0[] = {9.8715725867495858E+04, 1.9828875496808127E+08, 1.7196758809615005E+10, 3.3083776881353601E+11, 2.2668873993375454E+12, 6.7734720591167598E+12, 9.6695220682534863E+12, 6.7734720591167490E+12, 2.2668873993375454E+12, 3.3083776881353540E+11, 1.7196758809615013E+10, 1.9828875496807912E+08, 9.8715725867495596E+04}; - constexpr FLT c1[] = {5.4491110456935561E+05, 5.4903670125539398E+08, 3.0879465445278194E+10, 3.9588436413399976E+11, 1.6860562536749780E+12, 2.4256447893117891E+12, 5.2271652473787576E-04, -2.4256447893117861E+12, -1.6860562536749771E+12, -3.9588436413399896E+11, -3.0879465445278202E+10, -5.4903670125538874E+08, -5.4491110456935479E+05}; - constexpr FLT c2[] = {1.3504711883426080E+06, 6.9286979077463174E+08, 2.4618123595484570E+10, 1.9493985627722617E+11, 3.9422703517046405E+11, -1.8678883613919846E+11, -8.5538079834550037E+11, -1.8678883613919666E+11, 3.9422703517046375E+11, 1.9493985627722595E+11, 2.4618123595484570E+10, 6.9286979077462602E+08, 1.3504711883426073E+06}; - constexpr FLT c3[] = {1.9937206140846505E+06, 5.2512029493766004E+08, 1.1253303793811764E+10, 4.6205527735932259E+10, -1.1607472377982828E+10, -1.6305241755642276E+11, 1.6137900538478137E-04, 1.6305241755642496E+11, 1.1607472377982767E+10, -4.6205527735932159E+10, -1.1253303793811754E+10, -5.2512029493765628E+08, -1.9937206140846501E+06}; - constexpr FLT c4[] = {1.9607419630386413E+06, 2.6425362558103913E+08, 3.1171259341747184E+09, 2.9839860297840395E+09, -1.9585031917561905E+10, -5.0666917387060509E+09, 3.6568794485482040E+10, -5.0666917387052479E+09, -1.9585031917561382E+10, 2.9839860297839293E+09, 3.1171259341747251E+09, 2.6425362558103746E+08, 1.9607419630386424E+06}; - constexpr FLT c5[] = {1.3593773865640303E+06, 9.1556445104158297E+07, 4.7074012944133645E+08, -1.1192579335656993E+09, -2.1090780087868536E+09, 5.2270306737954664E+09, 5.5914317801530834E-04, -5.2270306737946453E+09, 2.1090780087878797E+09, 1.1192579335657849E+09, -4.7074012944133860E+08, -9.1556445104157880E+07, -1.3593773865640303E+06}; - constexpr FLT c6[] = {6.8417206432039291E+05, 2.1561705510027312E+07, 7.5785249893027432E+06, -2.7456096030220407E+08, 3.4589095671070045E+08, 4.0256106808935356E+08, -1.0074306926604354E+09, 4.0256106809054130E+08, 3.4589095671009880E+08, -2.7456096030236250E+08, 7.5785249893008731E+06, 2.1561705510027334E+07, 6.8417206432039256E+05}; - constexpr FLT c7[] = {2.5248269397037590E+05, 3.0985559672617475E+06, -1.1816517087615140E+07, -8.2958498769974122E+06, 8.0546642347458601E+07, -1.0594657799513456E+08, 2.0249720264016184E-04, 1.0594657799514198E+08, -8.0546642347324282E+07, 8.2958498771580132E+06, 1.1816517087620620E+07, -3.0985559672620827E+06, -2.5248269397037590E+05}; - constexpr FLT c8[] = {6.7530100970876185E+04, 1.2373362326675311E+05, -2.1245597183288219E+06, 5.1047323238642653E+06, -1.4139444406972022E+06, -1.1818267556148527E+07, 2.0121548578311723E+07, -1.1818267556689126E+07, -1.4139444399964837E+06, 5.1047323237335468E+06, -2.1245597183262822E+06, 1.2373362326715943E+05, 6.7530100970876825E+04}; - constexpr FLT c9[] = {1.2421368748960511E+04, -5.0576243646858849E+04, -4.8878193436522284E+04, 6.5307896871419600E+05, -1.5497610128521242E+06, 1.5137725913425679E+06, 9.4288709689637382E-06, -1.5137725926086102E+06, 1.5497610130712469E+06, -6.5307896859246108E+05, 4.8878193441087336E+04, 5.0576243646517250E+04, -1.2421368748960882E+04}; - constexpr FLT c10[] = {1.2904654687548632E+03, -1.1169946054771519E+04, 3.3275109715936509E+04, -3.1765222282529230E+04, -5.9810982046625119E+04, 2.2355863065128919E+05, -3.1083591717381903E+05, 2.2355863453495159E+05, -5.9810982317515191E+04, -3.1765222420737289E+04, 3.3275109716627514E+04, -1.1169946054393644E+04, 1.2904654687550840E+03}; - constexpr FLT c11[] = {-1.9043622268214964E+01, -6.8296542209517031E+02, 4.2702512258593224E+03, -1.2165497344048174E+04, 1.9423733117203814E+04, -1.6010024763745962E+04, 3.4546242756821764E-04, 1.6010021562009399E+04, -1.9423732921465795E+04, 1.2165497485154361E+04, -4.2702512258593424E+03, 6.8296542155861471E+02, 1.9043622268233225E+01}; - constexpr FLT c12[] = {-3.0093984466084923E+01, 9.8972865759901183E+01, -9.7437038386122609E+01, -3.5079929976821143E+02, 1.5699249129925884E+03, -3.1287450613413444E+03, 3.8692192717886201E+03, -3.1287461388880197E+03, 1.5699252721748373E+03, -3.5079941874733129E+02, -9.7437038807041006E+01, 9.8972866294818274E+01, -3.0093984465708520E+01}; - constexpr FLT c13[] = {-4.3050286012574066E+00, 2.1108975856232256E+01, -6.4297196943170974E+01, 1.2922884719917388E+02, -1.6991815434264092E+02, 1.2654996803592717E+02, -1.3650372630766216E-04, -1.2655097304483594E+02, 1.6991801475807023E+02, -1.2922895886683040E+02, 6.4297199778482565E+01, -2.1108976173160116E+01, 4.3050286010444170E+00}; - constexpr FLT c14[] = {-1.0957333734356203E-01, 7.2949328697697935E-01, -3.4300803257592030E+00, 1.0470037850609911E+01, -2.2292132783546631E+01, 3.4570970759468082E+01, -3.9923502981338281E+01, 3.4573363471454584E+01, -2.2292171023236033E+01, 1.0470076090299283E+01, -3.4300793014818574E+00, 7.2949361239845723E-01, -1.0957333723937021E-01}; - for (int i=0; i<13; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i] + z*(c10[i] + z*(c11[i] + z*(c12[i] + z*(c13[i] + z*(c14[i])))))))))))))); - } else if (w==14) { - constexpr FLT c0[] = {1.5499533202966311E+05, 4.4723032442444772E+08, 5.1495083701694801E+10, 1.2904576022918081E+12, 1.1534950432785514E+13, 4.5650102198520523E+13, 8.8830582190032719E+13, 8.8830582190032734E+13, 4.5650102198520523E+13, 1.1534950432785541E+13, 1.2904576022918088E+12, 5.1495083701695160E+10, 4.4723032442444867E+08, 1.5499533202970124E+05}; - constexpr FLT c1[] = {8.9188339002980455E+05, 1.3065352538728638E+09, 9.9400185225815598E+10, 1.7136059013402412E+12, 1.0144146621675834E+13, 2.3034036018490723E+13, 1.4630967270448885E+13, -1.4630967270448867E+13, -2.3034036018490715E+13, -1.0144146621675846E+13, -1.7136059013402415E+12, -9.9400185225815979E+10, -1.3065352538728662E+09, -8.9188339002979419E+05}; - constexpr FLT c2[] = {2.3170473769379673E+06, 1.7532505043698251E+09, 8.6523535958354309E+10, 9.7455289065487476E+11, 3.2977972139362329E+12, 1.7874626001697834E+12, -6.1480918082633936E+12, -6.1480918082634014E+12, 1.7874626001697737E+12, 3.2977972139362251E+12, 9.7455289065487329E+11, 8.6523535958354599E+10, 1.7532505043698282E+09, 2.3170473769380408E+06}; - constexpr FLT c3[] = {3.6089249230396431E+06, 1.4278058213962200E+09, 4.4296625537022446E+10, 2.9466624630419830E+11, 3.1903621584503467E+11, -9.8834691411254578E+11, -1.1072264714919094E+12, 1.1072264714919380E+12, 9.8834691411255481E+11, -3.1903621584503326E+11, -2.9466624630419788E+11, -4.4296625537022636E+10, -1.4278058213962224E+09, -3.6089249230396668E+06}; - constexpr FLT c4[] = {3.7733555140851745E+06, 7.8376718099107444E+08, 1.4443117772349586E+10, 4.3197433307418678E+10, -7.6585042240583893E+10, -1.8569640140762125E+11, 2.0385335192658521E+11, 2.0385335192658505E+11, -1.8569640140762244E+11, -7.6585042240577591E+10, 4.3197433307418831E+10, 1.4443117772349697E+10, 7.8376718099107611E+08, 3.7733555140852574E+06}; - constexpr FLT c5[] = {2.8079157920112340E+06, 3.0340753492383713E+08, 2.9498136661747241E+09, -6.2820200387946582E+08, -2.2372008390623741E+10, 1.5217518660587065E+10, 4.0682590266890762E+10, -4.0682590266874344E+10, -1.5217518660581593E+10, 2.2372008390624836E+10, 6.2820200387926054E+08, -2.9498136661747794E+09, -3.0340753492383808E+08, -2.8079157920112382E+06}; - constexpr FLT c6[] = {1.5361613559533129E+06, 8.3513615594416931E+07, 3.0077547202709264E+08, -1.3749596754065564E+09, -6.6733027297578251E+08, 5.9590333632812872E+09, -4.3025685566868906E+09, -4.3025685566947279E+09, 5.9590333632843285E+09, -6.6733027297604084E+08, -1.3749596754066198E+09, 3.0077547202708143E+08, 8.3513615594416305E+07, 1.5361613559533581E+06}; - constexpr FLT c7[] = {6.2759409419593017E+05, 1.5741723594963871E+07, -1.5632610223386128E+07, -1.9294824907063219E+08, 4.4643806532504034E+08, 1.5178998384579189E+07, -9.6771139891231704E+08, 9.6771139892423606E+08, -1.5178998381071322E+07, -4.4643806533015347E+08, 1.9294824907069016E+08, 1.5632610223408137E+07, -1.5741723594963046E+07, -6.2759409419590794E+05}; - constexpr FLT c8[] = {1.9151404903933618E+05, 1.7156606891565623E+06, -9.7733523156695794E+06, 4.2982266232611798E+06, 5.1660907884888940E+07, -1.1279400211171694E+08, 6.4701089576848499E+07, 6.4701089570801638E+07, -1.1279400210612530E+08, 5.1660907893511616E+07, 4.2982266235306170E+06, -9.7733523156822342E+06, 1.7156606891565854E+06, 1.9151404903936735E+05}; - constexpr FLT c9[] = {4.2715272622844263E+04, -2.2565910611002505E+03, -1.1769776156928577E+06, 4.0078399906352242E+06, -3.8951858073074366E+06, -5.0944610789569877E+06, 1.6765992441849992E+07, -1.6765992434448514E+07, 5.0944610797360903E+06, 3.8951858063335577E+06, -4.0078399906595708E+06, 1.1769776157202481E+06, 2.2565910608803192E+03, -4.2715272622819932E+04}; - constexpr FLT c10[] = {6.4806786522801558E+03, -3.5474227032715331E+04, 1.8237100734263218E+04, 3.0934714642964909E+05, -1.0394703930801603E+06, 1.4743920316337310E+06, -7.3356881642929500E+05, -7.3356882324020052E+05, 1.4743920364765557E+06, -1.0394703915764539E+06, 3.0934714676135289E+05, 1.8237100683125096E+04, -3.5474227032952876E+04, 6.4806786523017845E+03}; - constexpr FLT c11[] = {4.9913632908494827E+02, -5.5416668522806276E+03, 2.0614058722611946E+04, -3.2285139157855901E+04, -5.3099566255893524E+03, 1.1559000150525174E+05, -2.2569743273246771E+05, 2.2569743457059452E+05, -1.1559000428242185E+05, 5.3099542679931265E+03, 3.2285138893125553E+04, -2.0614058670789782E+04, 5.5416668532562171E+03, -4.9913632906264002E+02}; - constexpr FLT c12[] = {-3.3076333188696488E+01, -1.8970588558436827E+02, 1.8160423493169353E+03, -6.3715703265863249E+03, 1.2525624646166696E+04, -1.4199807314837786E+04, 6.4441944019082612E+03, 6.4441857815347785E+03, -1.4199805590763088E+04, 1.2525627375951648E+04, -6.3715703355659844E+03, 1.8160422864600705E+03, -1.8970588672434647E+02, -3.3076333168693779E+01}; - constexpr FLT c13[] = {-1.4394533628062636E+01, 5.7000699174526638E+01, -1.0101142144442984E+02, -3.2954074617159108E+01, 6.1417869930814436E+02, -1.6177306801656998E+03, 2.4593354137960296E+03, -2.4593361954696252E+03, 1.6177288934831954E+03, -6.1417959264939657E+02, 3.2954074617159108E+01, 1.0101142929606195E+02, -5.7000698932570963E+01, 1.4394533639244566E+01}; - constexpr FLT c14[] = {-1.5925952284527973E+00, 8.5113930275160214E+00, -2.8993510636695618E+01, 6.6373557362227814E+01, -1.0329536491693236E+02, 1.0280181071020283E+02, -4.3891122033571499E+01, -4.3893656778687756E+01, 1.0280325289276884E+02, -1.0329444716438918E+02, 6.6373666618482872E+01, -2.8993528390837142E+01, 8.5113926647511526E+00, -1.5925952190335899E+00}; - constexpr FLT c15[] = {1.5984868634272537E-02, 1.2876168577716327E-01, -9.8358742969178536E-01, 3.7710928871122080E+00, -9.4315137784350505E+00, 1.6840408563519507E+01, -2.2308532530501328E+01, 2.2310146222863779E+01, -1.6843058416240989E+01, 9.4311230950209399E+00, -3.7712287769953385E+00, 9.8360653920659347E-01, -1.2876103884046056E-01, -1.5984859595043394E-02}; - for (int i=0; i<14; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i] + z*(c10[i] + z*(c11[i] + z*(c12[i] + z*(c13[i] + z*(c14[i] + z*(c15[i]))))))))))))))); - } else if (w==15) { - constexpr FLT c0[] = {2.3939707792242090E+05, 9.7700272582690299E+08, 1.4715933396485275E+11, 4.7242424833337236E+12, 5.3987426629953617E+13, 2.7580474290566103E+14, 7.0693378336533425E+14, 9.6196578554477850E+14, 7.0693378336533425E+14, 2.7580474290566153E+14, 5.3987426629953828E+13, 4.7242424833337285E+12, 1.4715933396485275E+11, 9.7700272582690418E+08, 2.3939707792242119E+05}; - constexpr FLT c1[] = {1.4314487885226035E+06, 2.9961416925358462E+09, 3.0273361232748425E+11, 6.8507333793903604E+12, 5.4192702756911016E+13, 1.7551587948105316E+14, 2.1874615668430153E+14, 5.4722295550654096E-02, -2.1874615668430156E+14, -1.7551587948105334E+14, -5.4192702756911172E+13, -6.8507333793903730E+12, -3.0273361232748438E+11, -2.9961416925358448E+09, -1.4314487885226023E+06}; - constexpr FLT c2[] = {3.8829497354762922E+06, 4.2473082696966453E+09, 2.8414312556015533E+11, 4.3688281331121431E+12, 2.1823119508000547E+13, 3.2228098609392133E+13, -2.1833085454691801E+13, -7.3750710225100750E+13, -2.1833085454691875E+13, 3.2228098609392070E+13, 2.1823119508000590E+13, 4.3688281331121470E+12, 2.8414312556015527E+11, 4.2473082696966438E+09, 3.8829497354762908E+06}; - constexpr FLT c3[] = {6.3495763451755792E+06, 3.6841035003733959E+09, 1.5965774278321054E+11, 1.5630338683778213E+12, 3.8749058615819409E+12, -2.7319740087722651E+12, -1.3233342822865350E+13, 1.2682483963161023E-01, 1.3233342822865453E+13, 2.7319740087724204E+12, -3.8749058615819307E+12, -1.5630338683778201E+12, -1.5965774278321042E+11, -3.6841035003733950E+09, -6.3495763451755783E+06}; - constexpr FLT c4[] = {7.0146619045520453E+06, 2.1782897863065763E+09, 5.8897780310148117E+10, 3.1953009601770477E+11, 4.0651527030195397E+08, -1.6379148273275671E+12, -1.1568753137013023E+11, 2.7451653250461045E+12, -1.1568753137006947E+11, -1.6379148273276748E+12, 4.0651527030228132E+08, 3.1953009601770502E+11, 5.8897780310148155E+10, 2.1782897863065772E+09, 7.0146619045520453E+06}; - constexpr FLT c5[] = {5.5580012413990172E+06, 9.2345162185944211E+08, 1.4522950934020031E+10, 2.7025952371212032E+10, -1.2304576967641461E+11, -1.0116752717201025E+11, 3.8517418245450385E+11, 1.3143739157465117E-02, -3.8517418245443384E+11, 1.0116752717219414E+11, 1.2304576967643431E+11, -2.7025952371216137E+10, -1.4522950934020092E+10, -9.2345162185944176E+08, -5.5580012413990181E+06}; - constexpr FLT c6[] = {3.2693972344231815E+06, 2.8610260147425276E+08, 2.2348528403751349E+09, -3.4574515574230409E+09, -1.7480626463581440E+10, 3.1608597465590984E+10, 1.9879262560063576E+10, -6.6148013553869423E+10, 1.9879262560078850E+10, 3.1608597465530212E+10, -1.7480626463573368E+10, -3.4574515574202504E+09, 2.2348528403750744E+09, 2.8610260147425228E+08, 3.2693972344231787E+06}; - constexpr FLT c7[] = {1.4553539959296281E+06, 6.4136842048384696E+07, 1.3622336582072574E+08, -1.2131510424637468E+09, 6.4322366984755766E+08, 4.5078753872548027E+09, -7.1689413747004452E+09, 3.2111361580040181E-03, 7.1689413747369127E+09, -4.5078753874649162E+09, -6.4322366984639454E+08, 1.2131510424612916E+09, -1.3622336582064471E+08, -6.4136842048384838E+07, -1.4553539959296265E+06}; - constexpr FLT c8[] = {4.9358776531681791E+05, 9.7772970960583091E+06, -2.3511574237971250E+07, -1.0142613816625430E+08, 3.9421144217985487E+08, -2.8449115594571364E+08, -5.7549243248595941E+08, 1.1608781630719392E+09, -5.7549243238966489E+08, -2.8449115596289498E+08, 3.9421144214631909E+08, -1.0142613816300942E+08, -2.3511574237913735E+07, 9.7772970960591603E+06, 4.9358776531681628E+05}; - constexpr FLT c9[] = {1.2660319987326709E+05, 7.7519511328105081E+05, -6.5244610661542164E+06, 9.0878257490973976E+06, 2.3116605621149909E+07, -8.7079594477661625E+07, 9.5542733670714021E+07, -3.4623017322338634E-02, -9.5542733658248380E+07, 8.7079594589852452E+07, -2.3116605559600774E+07, -9.0878257518242579E+06, 6.5244610661450867E+06, -7.7519511328086059E+05, -1.2660319987326671E+05}; - constexpr FLT c10[] = {2.3793325531461589E+04, -4.2305332802771904E+04, -5.2884156975031609E+05, 2.5307340145554747E+06, -4.0404175204335153E+06, -1.7519988538994591E+05, 1.0146438798034744E+07, -1.5828545528861172E+07, 1.0146438794496680E+07, -1.7520001842407117E+05, -4.0404175643064296E+06, 2.5307340160591919E+06, -5.2884156977243477E+05, -4.2305332802771285E+04, 2.3793325531458995E+04}; - constexpr FLT c11[] = {2.9741655196857741E+03, -2.0687056403629973E+04, 3.3295507834673197E+04, 1.0661145690364030E+05, -5.6644238449031080E+05, 1.0874811673184116E+06, -9.6561276275880623E+05, -7.6207036577648435E-02, 9.6561275636531680E+05, -1.0874812580259521E+06, 5.6644242612787138E+05, -1.0661145858193116E+05, -3.3295507822185595E+04, 2.0687056403005630E+04, -2.9741655196852739E+03}; - constexpr FLT c12[] = {1.5389176594840404E+02, -2.3864418517811582E+03, 1.0846266965476148E+04, -2.2940053899336592E+04, 1.4780105833703366E+04, 4.2663634529139046E+04, -1.3047650082135458E+05, 1.7468394417865420E+05, -1.3047642955960588E+05, 4.2663569014305380E+04, 1.4780038020101238E+04, -2.2940052498526344E+04, 1.0846266965476338E+04, -2.3864418513602504E+03, 1.5389176594853458E+02}; - constexpr FLT c13[] = {-2.3857631312306911E+01, -1.9651606200276817E+01, 6.4183084244784663E+02, -2.8648428291977302E+03, 6.8249248253356263E+03, -9.7944434082514545E+03, 7.6177566999585488E+03, -4.8285923071218206E-02, -7.6177709934185850E+03, 9.7944219680614005E+03, -6.8249060651693289E+03, 2.8648407633460843E+03, -6.4183085466149657E+02, 1.9651606115081155E+01, 2.3857631312306911E+01}; - constexpr FLT c14[] = {-6.1348505726741482E+00, 2.7872916302350376E+01, -6.5819898558168433E+01, 5.1367134246654771E+01, 1.7214275703496423E+02, -6.9657243183240860E+02, 1.3192259272931558E+03, -1.6054145588281010E+03, 1.3192138654025996E+03, -6.9662907027505264E+02, 1.7212038135392731E+02, 5.1368095701697484E+01, -6.5819904020980715E+01, 2.7872916473063263E+01, -6.1348505738411490E+00}; - constexpr FLT c15[] = {-4.9671584422774523E-01, 3.0617550953446120E+00, -1.1650665638577927E+01, 3.0081331929557447E+01, -5.4030564936801589E+01, 6.6075844179663960E+01, -4.7176211285519123E+01, -3.4313439732287163E-02, 4.7173085818207042E+01, -6.6061100127341888E+01, 5.4056655794367416E+01, -3.0081722612971500E+01, 1.1650665638577902E+01, -3.0617553939307713E+00, 4.9671584448693240E-01}; - constexpr FLT c16[] = {4.3460783761337983E-03, -1.3199934226522787E-02, -1.9412503880258877E-01, 1.1325756464362078E+00, -3.4439944517155450E+00, 7.1653575841078521E+00, -1.1108195405465501E+01, 1.2348789868125033E+01, -1.1088023137785596E+01, 7.0939141360622937E+00, -3.4847592426682690E+00, 1.1324705825441117E+00, -1.9413837699275374E-01, -1.3199908576142469E-02, 4.3460782759542488E-03}; - for (int i=0; i<15; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i] + z*(c10[i] + z*(c11[i] + z*(c12[i] + z*(c13[i] + z*(c14[i] + z*(c15[i] + z*(c16[i])))))))))))))))); - } else if (w==16) { - constexpr FLT c0[] = {3.6434551345571154E+05, 2.0744705928579516E+09, 4.0355760945670056E+11, 1.6364575388763043E+13, 2.3514830376056566E+14, 1.5192201717462540E+15, 4.9956173084674150E+15, 8.9287666945127440E+15, 8.9287666945127440E+15, 4.9956173084674160E+15, 1.5192201717462542E+15, 2.3514830376056566E+14, 1.6364575388763049E+13, 4.0355760945670068E+11, 2.0744705928579512E+09, 3.6434551345570991E+05}; - constexpr FLT c1[] = {2.2576246485480345E+06, 6.6499571180086479E+09, 8.7873753526056311E+11, 2.5606844387131062E+13, 2.6313738449330162E+14, 1.1495095100701470E+15, 2.1932582707747572E+15, 1.2860244365132608E+15, -1.2860244365132600E+15, -2.1932582707747580E+15, -1.1495095100701462E+15, -2.6313738449330162E+14, -2.5606844387131066E+13, -8.7873753526056299E+11, -6.6499571180086479E+09, -2.2576246485480345E+06}; - constexpr FLT c2[] = {6.3730995546265058E+06, 9.9060026035198078E+09, 8.8097248605449023E+11, 1.7953384130753688E+13, 1.2398425545001667E+14, 3.0749346493041262E+14, 1.0259777520247212E+14, -5.5291976457534244E+14, -5.5291976457534294E+14, 1.0259777520247097E+14, 3.0749346493041212E+14, 1.2398425545001659E+14, 1.7953384130753672E+13, 8.8097248605448987E+11, 9.9060026035198078E+09, 6.3730995546265077E+06}; - constexpr FLT c3[] = {1.0896915393078227E+07, 9.0890343524593887E+09, 5.3565169504010052E+11, 7.3004206720038770E+12, 2.9692333044160145E+13, 1.6051737468109752E+13, -9.1273329108089609E+13, -8.5999306918501562E+13, 8.5999306918502812E+13, 9.1273329108090391E+13, -1.6051737468109348E+13, -2.9692333044160059E+13, -7.3004206720038691E+12, -5.3565169504010046E+11, -9.0890343524593925E+09, -1.0896915393078225E+07}; - constexpr FLT c4[] = {1.2655725616100591E+07, 5.7342804054544220E+09, 2.1822836608899585E+11, 1.8300700858999712E+12, 2.7770431049857900E+12, -8.5034969223848574E+12, -1.2846668467422469E+13, 1.6519076896573322E+13, 1.6519076896573414E+13, -1.2846668467422033E+13, -8.5034969223850078E+12, 2.7770431049858350E+12, 1.8300700858999753E+12, 2.1822836608899594E+11, 5.7342804054544239E+09, 1.2655725616100593E+07}; - constexpr FLT c5[] = {1.0609303958036318E+07, 2.6255609052371716E+09, 6.1673589426039268E+10, 2.6044432099085120E+11, -3.5431628074578119E+11, -1.6077602129631777E+12, 1.5534405614726155E+12, 2.8019935380863682E+12, -2.8019935380852476E+12, -1.5534405614728257E+12, 1.6077602129636682E+12, 3.5431628074579871E+11, -2.6044432099085229E+11, -6.1673589426039368E+10, -2.6255609052371745E+09, -1.0609303958036322E+07}; - constexpr FLT c6[] = {6.6544809363384582E+06, 8.9490403680928528E+08, 1.1882638725190987E+10, 8.1552898137820768E+09, -1.2575562817884897E+11, 2.7074695075942204E+10, 3.9453789461929230E+11, -3.1679644857371918E+11, -3.1679644857384814E+11, 3.9453789461920764E+11, 2.7074695075779831E+10, -1.2575562817882477E+11, 8.1552898137801113E+09, 1.1882638725190844E+10, 8.9490403680928373E+08, 6.6544809363384526E+06}; - constexpr FLT c7[] = {3.1906872142825029E+06, 2.2785946180651915E+08, 1.3744578972811413E+09, -4.3997172592843504E+09, -9.2011130753862667E+09, 3.4690551711764793E+10, -9.4227043392778511E+09, -5.9308465069355759E+10, 5.9308465069781982E+10, 9.4227043396369877E+09, -3.4690551711565643E+10, 9.2011130754329739E+09, 4.3997172592904301E+09, -1.3744578972811375E+09, -2.2785946180652067E+08, -3.1906872142825001E+06}; - constexpr FLT c8[] = {1.1821527096621764E+06, 4.2281234059839748E+07, 2.8723226058752719E+07, -8.3553955857505906E+08, 1.2447304828865275E+09, 2.1955280942222519E+09, -7.0514195727878428E+09, 4.3745141232918625E+09, 4.3745141237316084E+09, -7.0514195722924280E+09, 2.1955280943332024E+09, 1.2447304828901291E+09, -8.3553955857124400E+08, 2.8723226058927339E+07, 4.2281234059842363E+07, 1.1821527096621776E+06}; - constexpr FLT c9[] = {3.3854610744279926E+05, 5.2176984975088174E+06, -2.0677283565109752E+07, -3.5831818967739724E+07, 2.6599346107970935E+08, -3.7992777963644773E+08, -1.3426914477301279E+08, 9.1752051236703849E+08, -9.1752051203046608E+08, 1.3426914449876857E+08, 3.7992777988576066E+08, -2.6599346104854524E+08, 3.5831818969687484E+07, 2.0677283565073233E+07, -5.2176984975085324E+06, -3.3854610744279926E+05}; - constexpr FLT c10[] = {7.3893334077310792E+04, 2.6983804209766653E+05, -3.6415998560216571E+06, 8.4025485866871737E+06, 4.9278860835956605E+06, -5.1437033778820507E+07, 8.7603898248918146E+07, -4.6199497914231867E+07, -4.6199497948197275E+07, 8.7603898697554156E+07, -5.1437033767498761E+07, 4.9278861543586710E+06, 8.4025485891638417E+06, -3.6415998559774463E+06, 2.6983804209732520E+05, 7.3893334077308697E+04}; - constexpr FLT c11[] = {1.1778892113376965E+04, -4.0077190108567142E+04, -1.8372552169915423E+05, 1.3262878389569877E+06, -2.9738540196046322E+06, 1.9493506557541618E+06, 4.1881949490808225E+06, -1.1066749801915919E+07, 1.1066748877418302E+07, -4.1881948928182255E+06, -1.9493507634843190E+06, 2.9738539997848324E+06, -1.3262878392766670E+06, 1.8372552166918706E+05, 4.0077190106849979E+04, -1.1778892113376709E+04}; - constexpr FLT c12[] = {1.2019749667900676E+03, -1.0378455845063749E+04, 2.6333352662141660E+04, 1.7117059675298591E+04, -2.5133289742429825E+05, 6.4713895872015413E+05, -8.1634975674778735E+05, 3.8623909535608569E+05, 3.8623887467451266E+05, -8.1634966479713970E+05, 6.4713897711029404E+05, -2.5133289282677229E+05, 1.7117063267120848E+04, 2.6333352680101594E+04, -1.0378455843660833E+04, 1.2019749667921026E+03}; - constexpr FLT c13[] = {3.1189837631121321E+01, -8.9083493701244504E+02, 4.9454293991649774E+03, -1.3124692742151998E+04, 1.5834795298841136E+04, 6.9608292767098355E+03, -5.9790200829217545E+04, 1.0841735230501879E+05, -1.0841732371809872E+05, 5.9789914960016831E+04, -6.9607435159496199E+03, -1.5834797085523640E+04, 1.3124692295481371E+04, -4.9454294410403490E+03, 8.9083493766674769E+02, -3.1189837632399257E+01}; - constexpr FLT c14[] = {-1.2975319072478742E+01, 1.8283699094028595E+01, 1.7684019694555272E+02, -1.1059902320249000E+03, 3.1998244780238201E+03, -5.5987981589200417E+03, 5.9247600879368474E+03, -2.5988290685215188E+03, -2.5988178806809206E+03, 5.9249852432272892E+03, -5.5987701893187350E+03, 3.1998552445852642E+03, -1.1059895327848767E+03, 1.7684022972243278E+02, 1.8283699179384410E+01, -1.2975319072812146E+01}; - constexpr FLT c15[] = {-2.3155118729306223E+00, 1.1938503369059017E+01, -3.4150537494399323E+01, 4.8897188710734866E+01, 1.5839596560322873E+01, -2.4289147960969117E+02, 6.0143231605823757E+02, -8.8772403477020873E+02, 8.8712611928432557E+02, -6.0139861536721287E+02, 2.4281211991792659E+02, -1.5853729108169823E+01, -4.8898479664625256E+01, 3.4150529001281690E+01, -1.1938504563403686E+01, 2.3155118727038264E+00}; - constexpr FLT c16[] = {-1.5401723836370515E-01, 9.8067787978090881E-01, -4.1900810719931050E+00, 1.2149798852514468E+01, -2.4780790340446881E+01, 3.6014221907804398E+01, -3.4588714991383583E+01, 1.3071629460227753E+01, 1.2883354961750646E+01, -3.4615611348253751E+01, 3.5973877372428277E+01, -2.4777428295844171E+01, 1.2151059619254390E+01, -4.1901237542037384E+00, 9.8067813628521039E-01, -1.5401723766235165E-01}; - constexpr FLT c17[] = {1.1808834947531816E-02, -2.5444032491006262E-02, -1.4707353726716647E-04, 2.5840423001794482E-01, -1.0910598687678679E+00, 2.6514321899473572E+00, -4.5034457705829842E+00, 6.8479728528821520E+00, -6.8634402190500978E+00, 4.4285511554539836E+00, -2.6424773990080204E+00, 1.0878035811535636E+00, -2.5882398584322625E-01, 1.3196868749378181E-04, 2.5444131865017927E-02, -1.1808835384234016E-02}; - for (int i=0; i<16; i++) ker[i] = c0[i] + z*(c1[i] + z*(c2[i] + z*(c3[i] + z*(c4[i] + z*(c5[i] + z*(c6[i] + z*(c7[i] + z*(c8[i] + z*(c9[i] + z*(c10[i] + z*(c11[i] + z*(c12[i] + z*(c13[i] + z*(c14[i] + z*(c15[i] + z*(c16[i] + z*(c17[i]))))))))))))))))); - } else - printf("width not implemented!\n");