#include #include "point.h" static double **coefTh1[40]; static double allCoefTh1[] = { 1.00088825943439219, 0.00350107303029312819, 0.00335010385761378912, -0.000188574853838318111, 1.80723526491795172e-05, -1.52300302879811959e-06, 1.3129822585088852e-07, -1.12937155928579476e-08, 9.72321031784848601e-10, -8.37416203363771493e-11, 7.21448163414644855e-12, -6.21683137860164987e-13, // piece[0][0] [0,0.0625) 12 terms 1.00756753171781299, 0.00970094640359244094, 0.00287934019102495213, -0.000129236599618845049, 1.20903753378213849e-05, -9.26915138187676703e-07, 7.37033611209207105e-08, -5.83357757825111023e-09, 4.62306355554221893e-10, -3.66499820781233703e-11, 2.90641428215566319e-12, -2.3053997651445757e-13, // piece[0][1] [0.0625,0.125) 12 terms 1.02002981347114385, 0.0151160486929011444, 0.00255589828249223449, -8.88512327073214371e-05, 8.38546078437613817e-06, -5.85290111535721182e-07, 4.32528500444972434e-08, -3.16949541550342358e-09, 2.32687035458907836e-10, -1.70874582768814512e-11, 1.25525418593527551e-12, -9.22348551879609083e-14, // piece[0][2] [0.125,0.1875) 12 terms 1.03762074968462636, 0.0199921460022982958, 0.00233439263322172833, -6.03964341235711189e-05, 6.01124190894104949e-06, -3.81176455729835385e-07, 2.63727699228456351e-08, -1.79833054954992328e-09, 1.22976677537832355e-10, -8.41097530989072206e-12, 5.75480922673267777e-13, -3.9384754552118075e-14, // piece[0][3] [0.1875,0.25) 12 terms 1.05989254664101962, 0.0245020276135001804, 0.00218582000880160809, -3.96924739400777134e-05, 4.44566726256720343e-06, -2.54749120643877666e-07, 1.66261447555007528e-08, -1.05939460756047093e-09, 6.78060730159330861e-11, -4.33962358019622712e-12, 2.77852472024172447e-13, // piece[0][4] [0.25,0.3125) 11 terms 1.08654490833800099, 0.0287711919798240359, 0.00209109799817309245, -2.41583887630629996e-05, 3.38848764504761745e-06, -1.73926576350088395e-07, 1.07954926461445996e-08, -6.44910638506968624e-10, 3.87992884478786685e-11, -2.33318994972962871e-12, 1.40372888227574276e-13, // piece[0][5] [0.3125,0.375) 11 terms 1.11738626467548419, 0.0328936576768730088, 0.00203736388952570216, -1.2148373638968931e-05, 2.66066417102275463e-06, -1.20786127769174014e-07, 7.19750816142557751e-09, -4.04098252634702952e-10, 2.29407086368956504e-11, -1.30089672188894238e-12, 7.38127447914128273e-14, // piece[0][6] [0.375,0.4375) 11 terms 1.15230768456140686, 0.0369420195899262879, 0.00201577496752979035, -2.58258788879900804e-06, 2.15200887938194115e-06, -8.49495376340929582e-08, 4.91564883732868957e-09, -2.59762225050252025e-10, 1.39653806472240792e-11, -7.49169656722782623e-13, 4.02193640620783792e-14, // piece[0][7] [0.4375,0.5) 11 terms 1.19126496825945694, 0.0409740328300665507, 0.00202015840724801415, 5.26589717614509482e-06, 1.79279521379981606e-06, -6.02137634337859139e-08, 3.43295935966514131e-09, -1.70813448005705326e-10, 8.72667300550160948e-12, -4.44105730567590608e-13, 2.26242458745239184e-14, // piece[0][8] [0.5,0.5625) 11 terms 1.23426616124584787, 0.045037036916221726, 0.0020461588690502794, 1.18980750391455163e-05, 1.53780162388618342e-06, -4.27651416389211423e-08, 2.4485752561501875e-09, -1.14611512889946224e-10, 5.5832422956260879e-12, -2.70211964536666079e-13, // piece[0][9] [0.5625,0.625) 10 terms 1.28136275248193066, 0.049171000191756388, 0.00209068672144123403, 1.76668816574827894e-05, 1.35705247691823928e-06, -3.0198887307263794e-08, 1.78241076717065143e-09, -7.8289039267722863e-11, 3.64945371197070789e-12, -1.6832724771845922e-13, // piece[0][10] [0.625,0.6875) 10 terms 1.33264343483798564, 0.0534106616692784919, 0.00215155288095013157, 2.28262018988038529e-05, 1.23028986108770376e-06, -2.09635254498780207e-08, 1.32391470348719564e-09, -5.43261951125679678e-11, 2.43264726283801412e-12, -1.07126961565043691e-13, // piece[0][11] [0.6875,0.75) 10 terms 1.38822968618836717, 0.0577870699604393009, 0.00222722237288865707, 2.75624307308986122e-05, 1.14358725416706674e-06, -1.40370540572112548e-08, 1.00365207668865033e-09, -3.82159183012859533e-11, 1.65109969437394998e-12, -6.95211766772293181e-14, // piece[0][12] [0.75,0.8125) 10 terms 1.44827267146964678, 0.0623287119291679459, 0.00231664511416656074, 3.20152316468112072e-05, 1.08722660443552517e-06, -8.73328614554360638e-09, 7.77096520889803501e-10, -2.71940790285933697e-11, 1.13961581511005387e-12, -4.59286341321312413e-14, // piece[0][13] [0.8125,0.875) 10 terms 1.5129511229889443, 0.0670623575733705068, 0.00241913795158008732, 3.62914555132213488e-05, 1.05433918302985807e-06, -4.58331382824893791e-09, 6.15148592512570743e-10, -1.95294872475868482e-11, 7.99082986093695793e-13, -3.08424061421661017e-14, // piece[0][14] [0.875,0.9375) 10 terms 1.58246996032166587, 0.0720137058435451061, 0.00253430135850503, 4.04746408418995107e-05, 1.04001859866795251e-06, -1.26139583077902923e-09, 4.98458544365371405e-10, -1.41167842796401839e-11, 5.68772703733334446e-13, -2.10242798173384631e-14, // piece[0][15] [0.9375,1) 10 terms 1.69633456002226013, 0.159807687450696928, 0.0109218827644016782, 0.000373741911366385, 1.67343478506258597e-05, 8.49014787741797366e-08, 2.43745201445725437e-08, -1.11587740776264862e-09, 8.98369551388854376e-11, -6.21394678079168353e-12, 4.43547665679947713e-13, // piece[1][0] [1,1.125) 11 terms 1.86745471474073454, 0.182840179715259038, 0.0121447080948658657, 0.000441981309629684016, 1.74910067265646101e-05, 2.12061902763811694e-07, 1.86372660265580618e-08, -5.76514261539156225e-10, 4.96086313519699278e-11, -3.11233251027927225e-12, 2.08717359775181724e-13, // piece[1][1] [1.125,1.25) 11 terms 2.06289930503656205, 0.208526672329099799, 0.0135779874210192643, 0.000514421062485083988, 1.88138173685141038e-05, 3.14211499491492764e-07, 1.57674748739820023e-08, -2.70567204886352245e-10, 2.90969615760705783e-11, -1.61974237482491931e-12, 1.03243335438556261e-13, // piece[1][2] [1.25,1.375) 11 terms 2.28553752940251664, 0.237302829615608529, 0.0152375072186155761, 0.000593125831386955818, 2.06137695903026287e-05, 4.04583131716159014e-07, 1.45712200081417461e-08, -8.55438613003413143e-11, 1.82802866585454409e-11, -8.66188716812030264e-13, 5.34409688236750282e-14, // piece[1][3] [1.375,1.5) 11 terms 2.53869202492399015, 0.269641786508482417, 0.0171448304164255778, 0.000679916128306087353, 2.2853440278619748e-05, 4.91140755960259522e-07, 1.44214455984479018e-08, 3.5035041609504709e-11, 1.24567837940335522e-11, -4.68518700039668787e-13, // piece[1][4] [1.5,1.625) 10 terms 2.82618191702673549, 0.30606515206077517, 0.0193268282411373886, 0.000776531613568737385, 2.55275104998069793e-05, 5.79050331650117927e-07, 1.49815416914940249e-08, 1.20834562021589564e-10, 9.31972746357268247e-12, -2.49414135555373565e-13, // piece[1][5] [1.625,1.75) 10 terms 3.15237655061451028, 0.347153499484973371, 0.0218156061614749146, 0.000884736521712294792, 2.86523386217268732e-05, 6.7197134875752382e-07, 1.60704681085564254e-08, 1.88131317057038787e-10, 7.69288198011966008e-12, -1.23116819352023646e-13, // piece[1][6] [1.75,1.875) 10 terms 3.52225973335881948, 0.393556988384545559, 0.024648694690988994, 0.00100639400519479563, 3.22603618642694107e-05, 7.72762449291079255e-07, 1.75942890966781384e-08, 2.46271559441743704e-10, 6.95661093084486902e-12, -4.647006727925234e-14, // piece[1][7] [1.875,2) 10 terms 4.17162074979924569, 0.94950425929138782, 0.118561763471149828, 0.00974862006039329231, 0.000618902597519358053, 3.02093755762488882e-05, 1.31909933334940936e-06, 4.19962844081521154e-08, 1.74921330974434273e-09, 1.11049992480767352e-11, 3.51155204753201808e-12, -2.00532981284016196e-13, // piece[2][0] [2,2.25) 12 terms 5.25008586745453787, 1.21850852637960005, 0.151843850931135393, 0.0125542753439178822, 0.000791330359666138914, 3.91060550317726176e-05, 1.6636449926108685e-06, 5.67584599268578171e-08, 1.98224713901201417e-09, 3.86475990122963117e-11, 2.26422685530946367e-12, // piece[2][1] [2.25,2.5) 11 terms 6.63382467895045558, 1.56323030139458163, 0.194671923267465824, 0.0161460312957017321, 0.00101394594433914099, 5.0396279850251408e-05, 2.1201609583211179e-06, 7.42672945328718751e-08, 2.42641539313627837e-09, 5.97194982003826642e-11, 2.05350081999857335e-12, // piece[2][2] [2.5,2.75) 11 terms 8.40893947404884301, 2.00533326779946863, 0.249731087829110382, 0.0207509215897222279, 0.00130050692152905065, 6.48207850582738205e-05, 2.71342455300125039e-06, 9.60790248321603629e-08, 3.05859709455915921e-09, 8.1158265419702881e-11, 2.28664429165888407e-12, // piece[2][3] [2.75,3) 11 terms 10.6861228916193891, 2.57259131816122411, 0.320477909673182848, 0.026658966762570617, 0.00166889980120084975, 8.3301092886356329e-05, 3.4789335484382794e-06, 1.23756713676000907e-07, 3.89850475943559134e-09, 1.06316012092707055e-10, 2.78297915302174635e-12, // piece[3][0] [3,3.25) 11 terms 13.6076068938083754, 3.30063791453616329, 0.411356115705072689, 0.0342417146424460334, 0.00214220764848982795, 0.000107006025430112712, 4.46393073983138439e-06, 1.5912565805486396e-07, 4.99053549382331315e-09, 1.37556236670556147e-10, 3.50256152900872368e-12, // piece[3][1] [3.25,3.5) 11 terms 17.3560964805540472, 4.2352070892569742, 0.528075011226492141, 0.0439757449614679233, 0.00275013356580870857, 0.000137428969895591371, 5.72987233876247556e-06, 2.04448764742674727e-07, 6.39959159793671368e-09, 1.77166572606015244e-10, 4.46292496132859085e-12, // piece[3][2] [3.5,3.75) 11 terms 22.1662478294371112, 5.43500788891944353, 0.677967764486859581, 0.0564726958887869779, 0.00353085347270260625, 0.00017648350052511762, 7.35606952980145291e-06, 2.62593685140695823e-07, 8.21247485023255952e-09, 2.27777792283180997e-10, 5.71300118374846437e-12, // piece[3][3] [3.75,4) 11 terms 32.0540860952870617, 15.8051858322840548, 3.94528391708071346, 0.657403848612676311, 0.0821905378738998355, 0.00821775292271599914, 0.000684916492747229886, 4.89139097021761143e-05, 3.05793434590421566e-06, 1.69803680170759202e-07, 8.49837069926534792e-09, 3.854827035876118e-10, 1.61404890445744108e-11, // piece[4][0] [4,4.5) 13 terms 52.5531050511022286, 26.0422941058509778, 6.50420929872188669, 1.08394044100641462, 0.135502407704877842, 0.0135494168722798663, 0.00112917831988014646, 8.06512485207698786e-05, 5.04105016685982205e-06, 2.8002729527600805e-07, 1.40042507841712155e-08, 6.36292927691533613e-10, 2.65357466251248162e-11, // piece[4][1] [4.5,5) 13 terms 86.3338158865726655, 42.9196733661747558, 10.7233224851192954, 1.7871582133881696, 0.223401282284675345, 0.0223395907017134437, 0.00186166999995480325, 0.000132974017029224931, 8.31103953790920885e-06, 4.61711709627740434e-07, 2.30866723892769053e-08, 1.04930039038415112e-09, 4.37286940614920472e-11, // piece[5][0] [5,5.5) 13 terms 142.01171426519096, 70.7452677840222464, 17.6795686607292311, 2.94655389579607396, 0.368323542212774802, 0.0368319984902905698, 0.0030693574691234792, 0.000219238362687523261, 1.37024833855469104e-05, 7.61243432749672242e-07, 3.80626032524657839e-08, 1.73008314517461611e-09, 7.20896148301763797e-11, // piece[5][1] [5.5,6) 13 terms 233.791563245867849, 116.621588639142516, 29.1485488412039295, 4.85806469481091163, 0.607260931749279309, 0.0607258566097950217, 0.00506050411930269745, 0.000361463648054747145, 2.25915276981555152e-05, 1.25508210124639197e-06, 6.27542868904765516e-08, 2.8524538978947873e-09, 1.18853303595622498e-10, // piece[6][0] [6,6.5) 13 terms 385.09319808949175, 192.258639374649789, 48.0577461154043704, 8.0096068791079631, 1.00120273353534306, 0.100120116103534398, 0.00834335374526304699, 0.000595953222880577687, 3.72471075477176096e-05, 2.06928223325238242e-06, 1.03464194868117485e-07, 4.70291242383160221e-09, 1.95955091154045203e-10, // piece[6][1] [6.5,7) 13 terms 634.529492040021523, 316.962913241701017, 79.2337719801021478, 13.2056173067728011, 1.65070339223326412, 0.165070235025584239, 0.0137558601018832865, 0.000982561022464204176, 6.14100843483745949e-05, 3.41167043329665898e-06, 1.70583564172978919e-07, 7.75379600896332809e-09, 3.23074992921365971e-10, // piece[7][0] [7,7.5) 13 terms 1045.76237161740892, 522.565410734934176, 130.634368714626675, 21.7723874330284168, 2.72154923162779383, 0.272154854421242653, 0.022679575994340867, 0.00161996943538404714, 0.000101248103470642499, 5.62489404125543127e-06, 2.81244726493410655e-07, 1.27838500928441737e-08, 5.32660484770158859e-10, // piece[7][1] [7.5,8) 13 terms 1723.75264929905688, 861.546562472516598, 215.379638784779218, 35.8966017207959851, 4.48707573692504091, 0.448707528559049329, 0.0373922972295373315, 0.00267087818626718376, 0.000166929895979784656, 9.27388270869217225e-06, 4.63694150881473318e-07, 2.10770062642991307e-08, 8.78208622063888694e-10, // piece[8][0] [8,8.5) 13 terms 2841.55147540751159, 1420.43195950953532, 355.10097653771021, 59.1834930398476047, 7.39793696793513877, 0.73979366730107099, 0.06164947437789077, 0.00440353375879892327, 0.000275220866260315227, 1.52900478511677585e-05, 7.64502402914291362e-07, 3.47501088636324155e-08, 1.44792121612688287e-09, // piece[8][1] [8.5,9) 13 terms 4684.47197944965046, 2341.87817691808732, 585.46252350241457, 97.5770852955261603, 12.1971358799989673, 1.21971356881486392, 0.101642798783047869, 0.00726019982967682914, 0.000453762493633113196, 2.52090272359875288e-05, 1.26045136893101438e-06, 5.72932438042689837e-08, 2.38721849945902583e-09, // piece[9][0] [9,9.5) 13 terms 7722.9159979048527, 3861.08613961089259, 965.264509446574948, 160.877416991543896, 20.1096772641614336, 2.01096771398818852, 0.167580643735760842, 0.011970045925966389, 0.00074812787324362261, 4.15626594962887559e-05, 2.07813297975984736e-06, 9.44605898242561843e-08, 3.93585791423892809e-09, // piece[9][1] [9.5,10) 13 terms 12732.445051488894, 6365.83661224575189, 1591.45212458613378, 265.242019967686133, 33.1552525858458011, 3.31552525056451053, 0.276293771468236915, 0.0197352693543166001, 0.00123345433655789325, 6.85252408328959693e-05, 3.42626204506290616e-06, 1.55739183750649959e-07, 6.48913265967061685e-09, // piece[10][0] [10,10.5) 13 terms 20991.7439207340249, 10495.4719878504275, 2623.86096656451082, 437.310160587343034, 54.6637701308746031, 5.46637700792983416, 0.455531417708372299, 0.0325379583840169281, 0.00203362240026755186, 0.000112979022178595756, 5.64895111127415729e-06, 2.56770504976601477e-07, 1.0698771043113868e-08, // piece[10][1] [10.5,11) 13 terms 34609.0074047694725, 17304.0896677579003, 4326.01538531956521, 721.002563898289736, 90.1253205239195125, 9.01253204908554828, 0.751044337669619644, 0.0536460241038171984, 0.00335287650732185799, 0.00018627091703440874, 9.31354585331383e-06, 4.23342993275845685e-07, 1.76392913882269636e-08, // piece[11][0] [11,11.5) 13 terms 57060.0611135826621, 28529.6024580911362, 7132.39358212808202, 1188.73226348426465, 148.591532958834989, 14.8591532937698947, 1.23826277463892254, 0.0884473410356310802, 0.00552795881527214095, 0.000307108823044818606, 1.53554411533141604e-05, 6.97974597838936578e-07, 2.90822749111850753e-08, // piece[11][1] [11.5,12) 13 terms 94075.5726648057171, 47037.3441683855344, 11759.3290092112857, 1959.88816807304374, 244.986021023920756, 24.4986021010444546, 2.04155017518839399, 0.145825012506998086, 0.00911406328204230828, 0.000506336848985331173, 2.53168424499833931e-05, 1.15076556588177991e-06, 4.79485652459349558e-08, // piece[12][0] [12,12.5) 13 terms 155103.815655705839, 77551.4515977318806, 19387.8558662380201, 3231.30931095833739, 403.913663879161447, 40.3913663870589303, 3.36594719898637118, 0.240424799923443927, 0.0150265499954452715, 0.000834808333069154648, 4.17404166539329165e-05, 1.89729166606994827e-06, 7.90538194201759672e-08, // piece[12][1] [12.5,13) 13 terms 255722.359737977473, 127860.70957226734, 31965.17035967642, 5327.52839322813816, 665.941049159441832, 66.5941049154000808, 5.54950874299131947, 0.396393481639573886, 0.0247745926026218533, 0.00137636625569396184, 6.88183127850109766e-05, 3.12810512657943525e-06, 1.30337713607882462e-07, // piece[13][0] [13,13.5) 13 terms 421614.275342489651, 210806.653307610017, 52701.6562933889654, 8783.60938219922718, 1097.95117277864347, 109.79511727751968, 9.14959310648625213, 0.653542364747315419, 0.0408463977968027206, 0.00226924432203989487, 0.000113462216102199563, 5.15737345918294845e-06, 2.14890560799563666e-07, // piece[13][1] [13.5,14) 13 terms 695123.786985700368, 347561.395062104915, 86890.3417319352448, 14481.7236219689257, 1810.21545274847313, 181.021545274629347, 15.0851287729024595, 1.07750919806337575, 0.0673443248790222271, 0.00374135138216486656, 0.000187067569108376706, 8.50307132310280207e-06, 3.54294638462800135e-07, // piece[14][0] [14,14.5) 13 terms 1146064.71831931896, 573031.846661679796, 143257.954631780303, 23876.325771950651, 2984.54072149531521, 298.454072149393937, 24.871172679126726, 1.7765123342226472, 0.111032020888954586, 0.00616844560493996948, 0.000308422280247084961, 1.40191945566822551e-05, 5.8413310652854895e-07, // piece[14][1] [14.5,15) 13 terms 1889540.60538690304, 944769.77612815972, 236192.436998369754, 39365.4061663869725, 4920.6757707993047, 492.067577079843716, 41.0056314233269887, 2.92897367309434697, 0.183060854568421638, 0.0101700474760221728, 0.000508502373801164478, 2.31137442636870645e-05, 9.63072677653707872e-07, // piece[15][0] [15,15.5) 13 terms 3115325.09639631491, 1557662.00756550464, 389415.494857686863, 64902.5824762761404, 8112.82280953510235, 811.282280953455711, 67.6068567461255299, 4.82906119615154594, 0.301816324759487498, 0.0167675735977485044, 0.000838378679887461084, 3.81081218130649671e-05, 1.58783840887775955e-06, // piece[15][1] [15.5,16) 13 terms 5136302.04176624957, 2568150.46618308034, 642037.609512068797, 107006.268252008333, 13375.783531501409, 1337.57835315010675, 111.464862762511544, 7.96177591160779219, 0.497610994475497059, 0.0276450552486382159, 0.00138225276243193382, 6.28296710196324279e-05, 2.61790295915138532e-06, // piece[16][0] [16,16.5) 13 terms 8468329.70094058663, 4234164.28170283884, 1058541.06339200097, 176423.510565331526, 22052.9388206666699, 2205.29388206664544, 183.77449017222213, 13.1267492980157563, 0.820421831125991097, 0.0455789906181102919, 0.00227894953090552934, 0.000103588615041159818, 4.31619229338168169e-06, // piece[16][1] [16.5,17) 13 terms 13961914.5589308105, 6980956.69663052727, 1745239.16712391842, 290873.194520651828, 36359.1493150816241, 3635.91493150814904, 302.992910959013443, 21.6423507827866075, 1.35264692392416697, 0.0751470513291201819, 0.0037573525664560182, 0.000170788753020727728, 7.11619804253033584e-06, // piece[17][0] [17,17.5) 13 terms 23019304.7484437563, 11509651.777319571, 2877412.93729617633, 479568.82288269524, 59946.1028603369996, 5994.61028603369141, 499.550857169474909, 35.6822040835338825, 2.23013775522086988, 0.123896541956714873, 0.00619482709783574989, 0.000281583049901624734, 1.17326270792343729e-05, // piece[17][1] [17.5,18) 13 terms 37952416.592672728, 18976207.6853666231, 4744051.91430793703, 790675.319051322411, 98834.4148814153596, 9883.4414881415305, 823.620124011794587, 58.8300088579853053, 3.67687555362408292, 0.204270864090226739, 0.0102135432045113404, 0.000464251963841424422, 1.93438318267260244e-05, // piece[18][0] [18,18.5) 13 terms 62572955.7097453624, 31286477.2298355028, 7821619.30042515602, 1303603.21673752577, 162950.40209219075, 16295.0402092190725, 1357.92001743492301, 96.9942869596373356, 6.06214293497733436, 0.336785718609851847, 0.0168392859304925951, 0.000765422087749663307, 3.1892586989569309e-05, // piece[18][1] [18.5,19) 13 terms 103165362.229915887, 51582680.4758533239, 12895670.1119296104, 2149278.35198826808, 268659.793998533569, 26865.9793998533532, 2238.83161665444641, 159.916544046746139, 9.99478400292163549, 0.555265777940090799, 0.0277632888970045406, 0.00126196767713657003, 5.25819865473570823e-05, // piece[19][0] [19,19.5) 13 terms 170090926.270375878, 85045462.482015878, 21261365.6134702489, 3543560.93557837466, 442945.11694729689, 44294.5116947296847, 3691.20930789414069, 263.657807706724327, 16.4786129816702704, 0.915478498981681654, 0.0457739249490840827, 0.00208063295223109455, 8.66930396762956198e-05, // piece[19][1] [19.5,20) 13 terms 280432527.239234209, 140216262.952377588, 35054065.7310606763, 5842344.28851011302, 730293.036063764128, 73029.3036063764157, 6085.77530053136798, 434.698235752240578, 27.1686397345150361, 1.5093688741397242, 0.0754684437069862157, 0.00343038380486300953, 0.000142932658535958721, // piece[20][0] [20,20.5) 13 terms 462355071.781445086, 231177535.209415615, 57794383.795320183, 9632397.29922002926, 1204049.66240250366, 120404.966240250375, 10033.7471866875312, 716.696227620537911, 44.7935142262836195, 2.48852856812686785, 0.124426428406343395, 0.0056557467457428812, 0.000235656114405953401, // piece[20][1] [20.5,21) 13 terms 762294640.569828033, 381147319.589539587, 95286829.8903511763, 15881138.3150585312, 1985142.2893823164, 198514.228938231623, 16542.8524115193031, 1181.63231510852165, 73.8520196942826033, 4.10288998301570018, 0.205144499150785004, 0.00932474996139931803, 0.000388531248391638269, // piece[21][0] [21,21.5) 13 terms 1256811387.53760743, 628405693.059361935, 157101423.257806748, 26183570.5429677926, 3272946.31787097408, 327294.631787097431, 27274.5526489247823, 1948.18233206605601, 121.7613957541285, 6.76452198634047175, 0.338226099317023632, 0.0153739136053192543, 0.000640579733554969, // piece[21][1] [21.5,22) 13 terms 2072131666.96256685, 1036065832.75777411, 259016458.182409823, 43169409.6970683038, 5396176.21213353798, 539617.621213353821, 44968.1351011128136, 3212.00965007948662, 200.750603129967914, 11.1528112849982186, 0.557640564249910931, 0.0253472983749959517, 0.00105613743229149792, // piece[22][0] [22,22.5) 13 terms 3416367554.06541777, 1708183776.29513216, 427045944.066749334, 71174324.0111248791, 8896790.50139060989, 889679.050139061059, 74139.9208449217549, 5295.70863178012587, 330.981789486257867, 18.3878771936809926, 0.919393859684049519, 0.0417906299856386151, 0.00174127624940160911, // piece[22][1] [22.5,23) 13 terms 5632637853.95209217, 2816318926.22440195, 704079731.549066782, 117346621.924844459, 14668327.7406055573, 1466832.77406055573, 122236.064505046321, 8731.14746464616474, 545.696716540385296, 30.3164842522436295, 1.51582421261218148, 0.0689011005732809712, 0.00287087919055337409, // piece[23][0] [23,23.5) 13 terms 9286649838.97795296, 4643324918.72326469, 1160831229.67378259, 193471871.612297088, 24183983.951537136, 2418398.39515371341, 201533.199596142804, 14395.2285425816281, 899.701783911351754, 49.9834324395195395, 2.49917162197597698, 0.113598710089817145, 0.00473327958707571439, // piece[23][1] [23.5,24) 13 terms 15311097122.0650368, 7655548560.25273895, 1913887140.05615091, 318981190.009358525, 39872648.7511698157, 3987264.8751169811, 332272.072926415072, 23733.7194947439348, 1483.35746842149592, 82.4087482456386624, 4.12043741228193294, 0.187292609649178793, 0.0078038587353824497, // piece[24][0] [24,24.5) 13 terms 25243731501.8840523, 12621865750.14818, 3155466437.53001118, 525911072.921668589, 65738884.1152085736, 6573888.41152085736, 547824.03429340478, 39130.2881638146282, 2445.64301023841426, 135.869056124356348, 6.79345280621781722, 0.308793309373537106, 0.0128663878905640461, // piece[24][1] [24.5,25) 13 terms 41619877077.9607925, 20809938538.1724815, 5202484634.53608704, 867080772.422681093, 108385096.552835137, 10838509.6552835144, 903209.137940292829, 64514.9384243066306, 4032.18365151916441, 224.010202862175817, 11.2005101431087901, 0.509114097414035904, 0.0212130873922514972, // piece[25][0] [25,25.5) 13 terms 68619576621.302063, 34309788309.829052, 8577447077.45022964, 1429574512.90837145, 178696814.113546431, 17869681.4113546424, 1489140.11761288694, 106367.151258063357, 6647.94695362895982, 369.330386312720009, 18.466519315635999, 0.839387241619818147, 0.0349744684008257561, // piece[25][1] [25.5,26) 13 terms 113134555560.903107, 56567277779.6155014, 14141819444.896843, 2356969907.48280716, 294621238.435350895, 29462123.843535088, 2455176.98696125718, 175369.784782946954, 10960.6115489341846, 608.922863829676885, 30.446143191483845, 1.383915599612902, 0.0576631499838709191, // piece[26][0] [26,26.5) 13 terms 186527348203.373322, 93263674100.8365479, 23315918525.2021027, 3885986420.86701679, 485748302.608377099, 48574830.2608377114, 4047902.5217364761, 289135.894409748318, 18070.9934006092699, 1003.94407781162602, 50.1972038905812994, 2.28169108593551373, 0.0950704619139797341, // piece[26][1] [26.5,27) 13 terms 307531606549.07959, 153765803273.675598, 38441450818.4118652, 6406908469.73531151, 800863558.716913939, 80086355.8716913909, 6673862.98930761591, 476704.499236258271, 29794.0312022661419, 1655.22395568145225, 82.7611977840726212, 3.76187262654875543, 0.156744692772864819, // piece[27][0] [27,27.5) 13 terms 507033901128.920715, 253516950563.582123, 63379237640.8884964, 10563206273.4814167, 1320400784.18517709, 132040078.418517694, 11003339.8682098091, 785952.847729271976, 49122.0529830794985, 2729.00294350441663, 136.450147175220849, 6.20227941705549224, 0.258428309043978843, // piece[27][1] [27.5,28) 13 terms 835957577756.169434, 417978788877.192444, 104494697219.291077, 17415782869.8818436, 2176972858.73523045, 217697285.873523057, 18141440.489460256, 1295817.17781858961, 80988.5736136618507, 4499.3652007589917, 224.968260037949591, 10.2258300017249812, 0.426076250071874219, // piece[28][0] [28,28.5) 13 terms 1378261039848.38672, 689130519923.286987, 172282629980.814728, 28713771663.46912, 3589221457.93364, 358922145.793363988, 29910178.8161136657, 2136441.34400811931, 133527.584000507457, 7418.19911113930266, 370.909955556965144, 16.8595434344075059, 0.702480976433646043, // piece[28][1] [28.5,29) 13 terms 2272368292974.12793, 1136184146486.14355, 284046036621.52887, 47341006103.5881424, 5917625762.9485178, 591762576.29485178, 49313548.0245709792, 3522396.28746935586, 220149.767966834741, 12230.5426648241519, 611.527133241207594, 27.7966878746003445, 1.15819532810834769, // piece[29][0] [29,29.5) 13 terms 3746501939489.78271, 1873250969743.95679, 468312742435.982178, 78052123739.330368, 9756515467.41629601, 975651546.741629481, 81304295.5618024617, 5807449.68298588973, 362965.605186618108, 20164.7558437010084, 1008.23779218505035, 45.8289905538659283, 1.90954127307774701, // piece[29][1] [29.5,30) 13 terms 6176937438354.86816, 3088468719176.48535, 772117179794.11438, 128686196632.352386, 16085774579.0440483, 1608577457.90440488, 134048121.49203375, 9574865.82085955329, 598429.113803722081, 33246.0618779845609, 1662.30309389922786, 75.559231540873995, 3.14830131420308312, // piece[30][0] [30,30.5) 13 terms 10184048142398.3945, 5092024071198.23438, 1273006017799.55151, 212167669633.258575, 26520958704.1573219, 2652095870.41573238, 221007989.201311022, 15786284.942950787, 986642.808934424189, 54813.4893852457899, 2740.67446926228968, 124.576112239194984, 5.19067134329979041, // piece[30][1] [30.5,31) 13 terms 16790656794205.1016, 8395328397101.57422, 2098832099275.38647, 349805349879.231079, 43725668734.9038849, 4372566873.49038887, 364380572.790865719, 26027183.7707761228, 1626698.98567350768, 90372.1658707504248, 4518.6082935375216, 205.391286069887343, 8.55797025291197144, // piece[31][0] [31,31.5) 13 terms 27683113005630.3008, 13841556502814.1602, 3460389125703.53271, 576731520950.588745, 72091440118.8235931, 7209144011.88236046, 600762000.990196705, 42911571.4992997646, 2681973.21870623529, 148998.512150346389, 7449.9256075173198, 338.632982159878168, 14.1097075899949242, // piece[31][1] [31.5,32) 13 terms 45641737251576.7422, 22820868625787.3633, 5705217156446.83398, 950869526074.47229, 118858690759.309052, 11885869075.9309044, 990489089.660908699, 70749220.6900649071, 4421826.29312905669, 245657.016284947604, 12282.8508142473802, 558.311400647608139, 23.2629750269836748, // piece[32][0] [32,32.5) 13 terms 75250503038379.6562, 37625251519188.8125, 9406312879797.19531, 1567718813299.53271, 195964851662.441589, 19596485166.2441597, 1633040430.52034664, 116645745.037167609, 7290359.06482297555, 405019.94804572087, 20250.9974022860442, 920.499881922092868, 38.3541617467538742, // piece[32][1] [32.5,33) 13 terms 124067104990259.844, 62033552495128.8906, 15508388123782.2148, 2584731353963.70264, 323091419245.46283, 32309141924.5462799, 2692428493.71219015, 192316320.979442149, 12019770.0612151343, 667765.003400840797, 33388.2501700420398, 1517.64773500191086, 63.2353222917462858, // piece[33][0] [33,33.5) 13 terms 204552074991626.062, 102276037495811.984, 25569009373952.9883, 4261501562325.49805, 532687695290.687256, 53268769529.0687256, 4439064127.4223938, 317076009.101599574, 19817250.5688499734, 1100958.36493610963, 55047.9182468054787, 2502.17810212752192, 104.257420921980085, // piece[33][1] [33.5,34) 13 terms 337249357004540.25, 168624678502269.062, 42156169625567.2578, 7026028270927.87695, 878253533865.984619, 87825353386.598465, 7318779448.88320541, 522769960.63451463, 32673122.5396571644, 1815173.47442539805, 90758.6737212699081, 4125.39426005772293, 171.891427502405122, // piece[34][0] [34,34.5) 13 terms 556030188423325.438, 278015094211661.625, 69503773552915.3984, 11583962258819.2324, 1447995282352.40405, 144799528235.240417, 12066627352.9367008, 861901953.781193018, 53868872.1113245636, 2992715.11729580909, 149635.755864790437, 6801.62526658138358, 283.401052774224354, // piece[34][1] [34.5,35) 13 terms 916738798804935.375, 458369399402466.562, 114592349850616.641, 19098724975102.7734, 2387340621887.84668, 238734062188.784668, 19894505182.3987236, 1421036084.45705152, 88814755.2785657197, 4934153.07103142887, 246707.653551571449, 11213.9842523441566, 467.249343847673231, // piece[35][0] [35,35.5) 13 terms 1511446757265780.75, 755723378632889.25, 188930844658222.312, 31488474109703.7188, 3936059263712.96484, 393605926371.296448, 32800493864.274704, 2342892418.87676477, 146430776.179797798, 8135043.12109987717, 406752.156054993859, 18488.7343661360865, 770.36393192233686, // piece[35][1] [35.5,36) 13 terms 2491954418234824.5, 1245977209117411.25, 311494302279352.812, 51915717046558.7969, 6489464630819.84961, 648946463081.984985, 54078871923.4987488, 3862776565.96419621, 241423535.372762263, 13412418.6318201255, 670620.931591006345, 30482.769617773014, 1270.11540074054233, // piece[36][0] [36,36.5) 13 terms 4108538254958917, 2054269127479457.5, 513567281869864.375, 85594546978310.7344, 10699318372288.8418, 1069931837228.88416, 89160986435.7403412, 6368641888.26716709, 398040118.016697943, 22113339.8898165524, 1105666.99449082767, 50257.5906586739875, 2094.06627744474918, // piece[36][1] [36.5,37) 13 terms 6773834412435952, 3386917206217974.5, 846729301554493.625, 141121550259082.281, 17640193782385.2852, 1764019378238.52856, 147001614853.210693, 10500115346.6579075, 656257209.166119218, 36458733.8425621763, 1822936.69212810905, 82860.7587330958631, 3452.53161387899399, // piece[37][0] [37,37.5) 13 terms 11168164879983656, 5584082439991827, 1396020609997956.75, 232670101666326.125, 29083762708290.7656, 2908376270829.07666, 242364689235.756378, 17311763516.8397408, 1081985219.8024838, 60110289.9890268818, 3005514.4994513439, 136614.295429606544, 5692.26230956693962, // piece[37][1] [37.5,38) 13 terms 18413190992315196, 9206595496157598, 2301648874039399.5, 383608145673233.25, 47951018209154.1562, 4795101820915.41504, 399591818409.61792, 28542272743.5441399, 1783892046.47150874, 99105113.6928615868, 4955255.68464307953, 225238.894756503607, 9384.95394818765089, // piece[38][0] [38,38.5) 13 terms 30358219650494064, 15179109825247030, 3794777456311757.5, 632462909385293, 79057863673161.625, 7905786367316.16211, 658815530609.680176, 47058252186.4057236, 2941140761.65035772, 163396708.980575442, 8169835.44902877137, 371356.156774035073, 15473.173198918128, // piece[38][1] [38.5,39) 13 terms 50052242478356168, 25026121239178084, 6256530309794521, 1042755051632420.12, 130344381454052.516, 13034438145405.252, 1086203178783.771, 77585941341.697937, 4849121333.85612106, 269395629.658673346, 13469781.4829336684, 612262.794678803068, 25510.9497782834624, // piece[39][0] [39,39.5) 13 terms 82522196820306320, 41261098410153160, 10315274602538290, 1719212433756381.5, 214901554219547.688, 21490155421954.7695, 1790846285162.89746, 127917591797.349823, 7994849487.33436394, 444158304.851909101, 22207915.2425954528, 1009450.69284524792, 42060.4455352186633, // piece[39][1] [39.5,40) 13 terms }; // coefTh1 static int *nTermsTh1[40]; static int allTermsTh1[] = { 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 12, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, }; // allTermsTh1 static int nPiecesTh1[40] = { 16, 8, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; // nPiecesTh1 static bool isInitTh1 = false; static int finishTh1 = 40; void InitTh1() { for (int iInt = 0, walkTerm = 0, walkCoef = 0; iInt < finishTh1; walkTerm += nPiecesTh1[iInt], ++iInt) { nTermsTh1[iInt] = &allTermsTh1[walkTerm]; coefTh1[iInt] = new double*[nPiecesTh1[iInt]]; for (int iPiece = 0; iPiece < nPiecesTh1[iInt]; walkCoef += nTermsTh1[iInt][iPiece], ++iPiece) { coefTh1[iInt][iPiece] = &allCoefTh1[walkCoef]; } } isInitTh1 = true; } double Th1(double x) { if (!isInitTh1) InitTh1(); // Transform the domain to approach pole at 1 slower. if (x < 0) return nan(""); x = -log(1-x); if (x < 0 || x >= finishTh1) return nan(""); int iInt = static_cast(x); x -= iInt; // The 0.5 adjusts the range to [-0.5,0.5) instead of [0,1), so c[0] is the middle value. // The number of pieces per int was adjusted manually. x *= nPiecesTh1[iInt]; int iPiece = static_cast(x); x = x - iPiece - 0.5; // start with the tiny terms and build up, to avoid rounding errors double *c = coefTh1[iInt][iPiece]; int iTerm = nTermsTh1[iInt][iPiece]-1; double y = c[iTerm]; while (iTerm--) y = y * x + c[iTerm]; return y; } #ifdef TESTFUNC #include #include "bigFloat.h" int main(int argc, char** argv) { double iterations = 137; for (int i=0; i %.18g\n", x, z); } } #endif /* TESTFUNC */ static double **coefTh1c[40]; static double allCoefTh1c[] = { 0.977789271469070909, -0.0420730795388624332, 0.00449554747866532951, -0.000384959160613044767, 3.33992694687933178e-05, -2.89442520332287692e-06, 2.50538991853442986e-07, -2.16709928537345231e-08, 1.87355119024981365e-09, -1.61917199353604629e-10, 1.39894386561881291e-11, -1.20841167166720394e-12, 1.04365404702559669e-13, // piece[0][0] [0,0.0625) 13 terms 0.939857515685036393, -0.0341163719156094211, 0.0035154715553593909, -0.00027596122187881916, 2.20400755163108753e-05, -1.75872531307433394e-06, 1.40162936316516613e-07, -1.11621573988260155e-08, 8.88463779869676594e-10, -7.06912971650126927e-11, 5.62298560227797416e-12, -4.47168359490218892e-13, // piece[0][1] [0.0625,0.125) 12 terms 0.909001065276870857, -0.0278331764293187379, 0.00280413169111353019, -0.000202931165760703475, 1.5012551890790412e-05, -1.11007080837446009e-06, 8.19695842832967455e-08, -6.04816166142130545e-09, 4.46031169651120964e-10, -3.28803425211413093e-11, 2.42313512623939497e-12, -1.7853284206930806e-13, // piece[0][2] [0.125,0.1875) 12 terms 0.883783068190817755, -0.0227787539157385116, 0.00227542673466240393, -0.000152531480498655696, 1.05075910386018032e-05, -7.23892429375015396e-07, 4.97964333991419562e-08, -3.42277546324715507e-09, 2.35139407429184162e-10, -1.6147194193945897e-11, 1.10849743557895311e-12, -7.60795500998630457e-14, // piece[0][3] [0.1875,0.25) 12 terms 0.863137039821539664, -0.0186468074206330645, 0.00187432003194167463, -0.000116851976147835465, 7.52991349233570364e-06, -4.85610942451327154e-07, 3.12664553241349247e-08, -2.01145102919042505e-09, 1.29331383350385136e-10, -8.31225815199974438e-12, 5.34067652232736897e-13, -3.43056672421603982e-14, // piece[0][4] [0.25,0.3125) 12 terms 0.846254774135775545, -0.01522085720253262, 0.00156451757570473591, -9.10269000797795947e-05, 5.50856250734502333e-06, -3.33937153920334312e-07, 2.02074697625326435e-08, -1.22174404640568415e-09, 7.38261239817545448e-11, -4.45920301592552934e-12, 2.69254575129135399e-13, // piece[0][5] [0.3125,0.375) 11 terms 0.832512601289567833, -0.0123444249414914921, 0.00132142825227481208, -7.19668437173389227e-05, 4.10388533788899524e-06, -2.3471550680320429e-07, 1.33976685992655055e-08, -7.64033240354222061e-10, 4.35467483669809576e-11, -2.48092720927837629e-12, 1.41295330467125143e-13, // piece[0][6] [0.375,0.4375) 11 terms 0.821421519601299832, -0.0099021516391221559, 0.00112798993435274603, -5.76549992834081169e-05, 3.10729457159955214e-06, -1.68215950657993914e-07, 9.08668470013397942e-09, -4.90349474632696348e-10, 2.64463777643775503e-11, -1.42573840242090706e-12, 7.68362416211312727e-14, // piece[0][7] [0.4375,0.5) 11 terms 0.812592650597296684, -0.00780749738260717169, 0.000972113239772848313, -4.67420392229391334e-05, 2.38703933248857213e-06, -1.22674214797298176e-07, 6.28938518518327416e-09, -3.22092792839573929e-10, 1.64859661941357714e-11, -8.4345199598993214e-13, 4.31376373471681825e-14, // piece[0][8] [0.5,0.5625) 11 terms 0.805712794763333018, -0.00599452662810770476, 0.00084507062584980011, -3.83052523850202452e-05, 1.85779191422284454e-06, -9.08749790709285948e-08, 4.43362772789117928e-09, -2.16040347468495981e-10, 1.05213531470807007e-11, -5.12178742213565353e-13, 2.49240849616877861e-14, // piece[0][9] [0.5625,0.625) 11 terms 0.800526804653245661, -0.00441229917151990218, 0.000740455115176016834, -3.17011744006564668e-05, 1.4630368440169047e-06, -6.82796347918310382e-08, 3.17764399329514841e-09, -1.47674979096201187e-10, 6.85914022210715868e-12, -3.18454819020402107e-13, 1.47799081741133735e-14, // piece[0][10] [0.625,0.6875) 11 terms 0.796824657216234078, -0.00302096363088097571, 0.000653491761396491071, -2.64730800882236087e-05, 1.16457761243260464e-06, -5.19675277091620403e-08, 2.31203887231084892e-09, -1.02696064561685034e-10, 4.55902650043292021e-12, -2.02306469540045413e-13, // piece[0][11] [0.6875,0.75) 10 terms 0.794431827090454235, -0.0017889876874436785, 0.000580572956247815751, -2.22915591737585834e-05, 9.36121597393778434e-07, -4.00200063137693915e-08, 1.70554117992942885e-09, -7.25485792072272626e-11, 3.08426104041913232e-12, -1.31068628511922851e-13, // piece[0][12] [0.75,0.8125) 10 terms 0.793202018537626841, -0.000691162317156627831, 0.0005189389497243193, -1.89155388839185819e-05, 7.59265962782343729e-07, -3.1152774128072204e-08, 1.27411927645818202e-09, -5.19955698284990829e-11, 2.12065318170013234e-12, -8.64583345180027257e-14, // piece[0][13] [0.8125,0.875) 10 terms 0.79301160896866052, 0.000292857562588238357, 0.000466454477406980854, -1.61662283390401374e-05, 6.20932283632458602e-07, -2.44912766417840588e-08, 9.62944729896654499e-10, -3.77631336404580307e-11, 1.48001757435603485e-12, -5.7984356584104706e-14, // piece[0][14] [0.875,0.9375) 10 terms 0.793755352147929583, 0.00117963462980289705, 0.000421450163920954689, -1.39093965171428218e-05, 5.11695106075248863e-07, -1.94305253318055475e-08, 7.35611410337030068e-10, -2.77647224847351818e-11, 1.04724087439667634e-12, -3.94874503407431629e-14, // piece[0][15] [0.9375,1) 10 terms 0.796428573584223698, 0.00471308836180385059, 0.00146064691001273261, -8.9850144831858463e-05, 6.20559913719868182e-06, -4.46290753518500194e-07, 3.20172164734636085e-08, -2.28811548916467675e-09, 1.63388471627300993e-10, -1.16640929874559586e-11, 8.32402010867154173e-13, -5.9385272310958271e-14, // piece[1][0] [1,1.125) 12 terms 0.802518247901194415, 0.00738759998645425933, 0.00122430356004655399, -6.89221346179818705e-05, 4.38444419947743757e-06, -2.9437246713219369e-07, 1.97463230457269287e-08, -1.31772251709313774e-09, 8.783508603803499e-11, -5.85387268420839905e-12, 3.90022589927809245e-13, -2.59773943266831561e-14, // piece[1][1] [1.125,1.25) 12 terms 0.811065337895757077, 0.0096456165246659939, 0.00104117088426206083, -5.39748064124341114e-05, 3.1681414026049351e-06, -1.99298004999844259e-07, 1.25612471276740852e-08, -7.86355333120538697e-10, 4.9143131200590241e-11, -3.07105900554789579e-12, 1.91875692439584956e-13, // piece[1][2] [1.25,1.375) 11 terms 0.821701131162814735, 0.0115777801798345285, 0.000896435512106126173, -4.30690030997848031e-05, 2.33563739242319231e-06, -1.38035568465663854e-07, 8.21017491236280145e-09, -4.84176658805747948e-10, 2.84786198127158464e-11, -1.67516528828642089e-12, 9.8528387359049149e-14, // piece[1][3] [1.375,1.5) 11 terms 0.834134483206374289, 0.0132501426519655227, 0.000779975697622070706, -3.49580868736262869e-05, 1.75346735780692963e-06, -9.75360981746605285e-08, 5.49592376489691458e-09, -3.0650303146256811e-10, 1.7025960526329924e-11, -9.45853585133466665e-13, 5.2552008973490814e-14, // piece[1][4] [1.5,1.625) 11 terms 0.848131304605898584, 0.0147117769337407577, 0.000684723327349601348, -2.88195076949922272e-05, 1.33858090391890227e-06, -7.01508307487968811e-08, 3.75750079732179199e-09, -1.98888611329136979e-10, 1.04664799098730105e-11, -5.5077498174613109e-13, 2.89949460058650837e-14, // piece[1][5] [1.625,1.75) 11 terms 0.863500257357922463, 0.0159997898666503595, 0.000605647241691137763, -2.40979603703540491e-05, 1.03789703895197556e-06, -5.12591013256449516e-08, 2.61752830695480393e-09, -1.31951843374905943e-10, 6.59738425308052636e-12, -3.29722275801568743e-13, 1.6491193493669638e-14, // piece[1][6] [1.75,1.875) 11 terms 0.880082585635691084, 0.0171427005930455713, 0.000539104817292493442, -2.04108873679583485e-05, 8.16669624316638471e-07, -3.79932067422650179e-08, 1.85401245437872384e-09, -8.93065534676869299e-11, 4.25394029038005964e-12, -2.02391020691668851e-13, // piece[1][7] [1.875,2) 10 terms 0.906944601192596567, 0.0372647655658498098, 0.00182850553311686512, -0.000130038092859279257, 9.36125950679585089e-06, -7.94740435804969104e-07, 7.26883016122203154e-08, -6.57947234701668353e-09, 5.85751052122251485e-10, -5.19741570050070065e-11, 4.61959205417608239e-12, -4.10923791381609643e-13, // piece[2][0] [2,2.25) 12 terms 0.945916467364623426, 0.0405655280231738205, 0.00148757828024943871, -9.9288044707168945e-05, 6.28290468202003176e-06, -4.69526670279057162e-07, 3.94764073554002045e-08, -3.32157260684108118e-09, 2.72697122781000442e-10, -2.21910281705630092e-11, 1.80907470578623822e-12, -1.47801328974979218e-13, // piece[2][1] [2.25,2.5) 12 terms 0.987876135408364497, 0.0432658200408195595, 0.00122324561125138325, -7.81648174803850669e-05, 4.42779160526308856e-06, -2.89550240027001365e-07, 2.23181727575891304e-08, -1.76244638992869486e-09, 1.34913134396328742e-10, -1.01441257587244713e-11, 7.62695841904823187e-13, -5.75739757586799438e-14, // piece[2][2] [2.5,2.75) 12 terms 1.03229119516552492, 0.045494202793063758, 0.00101272361105634451, -6.29576897037163264e-05, 3.26143624072167459e-06, -1.86206933675070108e-07, 1.30435992732522585e-08, -9.72848702036364197e-10, 7.02327233448537568e-11, -4.91968737057324976e-12, 3.42754093582808662e-13, // piece[2][3] [2.75,3) 11 terms 1.07873825124563227, 0.0473429636287813899, 0.000841734117832877477, -5.15436345088657346e-05, 2.49636708028668757e-06, -1.24985528203440175e-07, 7.84918508872870044e-09, -5.53729949806261887e-10, 3.81223839863476228e-11, -2.51201934695261176e-12, 1.62978926890827382e-13, // piece[3][0] [3,3.25) 11 terms 1.12687378407050831, 0.0488812050044931737, 0.000700938654739749955, -4.26684765267864739e-05, 1.97217975409315962e-06, -8.76637470988301024e-08, 4.85938296697923734e-09, -3.22649689122977239e-10, 2.13891720817616209e-11, -1.34081523993500688e-12, 8.15258825207213191e-14, // piece[3][1] [3.25,3.5) 11 terms 1.17641514832607985, 0.0501625543422333509, 0.000583956335356144171, -3.55694058690521437e-05, 1.5968029458332298e-06, -6.4235768999386645e-08, 3.1021854245173242e-09, -1.9144631777347959e-10, 1.23020004995399197e-11, -7.42695474951210348e-13, 4.26859971750024056e-14, // piece[3][2] [3.5,3.75) 11 terms 1.22712762508731599, 0.0512298421933986073, 0.000486229409657579041, -2.97685774125914955e-05, 1.31623204784140281e-06, -4.9037960872047186e-08, 2.05208922666995591e-09, -1.15348330547828472e-10, 7.19784434564889633e-12, -4.23655487880647328e-13, 2.32722009898666048e-14, // piece[3][3] [3.75,4) 11 terms 1.30497224821627578, 0.105008411159083923, 0.00147409763341791486, -0.000182830104125114438, 1.61003939064583123e-05, -1.11649370039645593e-06, 7.64976913372952084e-08, -7.11710609656695896e-09, 8.39629961620130788e-10, -9.7040014698893459e-11, 1.02110035949814359e-11, -1.01072972504482499e-12, 9.90390511793780846e-14, // piece[4][0] [4,4.5) 13 terms 1.41128698093732408, 0.10746735032281772, 0.00101206317956960864, -0.000128272664639413623, 1.14646927209584986e-05, -7.70000876498117776e-07, 4.37906950845393047e-08, -2.93737093783611187e-09, 2.977597685979263e-10, -3.42066554689931951e-11, 3.56578723905719569e-12, -3.32616644879793595e-13, // piece[4][1] [4.5,5) 12 terms 1.5196488575870537, 0.109148911743652016, 0.000688935758599076246, -8.93267166226314801e-05, 8.18592583231360246e-06, -5.55811802150771836e-07, 2.93113904408726077e-08, -1.44915847571759688e-09, 1.07235850592237606e-10, -1.18666104457805209e-11, 1.28406916012620765e-12, -1.1988475540790783e-13, // piece[5][0] [5,5.5) 12 terms 1.62940503644548684, 0.110288934242253389, 0.000464924911428284376, -6.16004793473961469e-05, 5.80206296221076383e-06, -4.0559059041874211e-07, 2.13953719813807171e-08, -8.9722159472402763e-10, 4.25146711528176426e-11, -3.88736066462232097e-12, 4.47825752973596204e-13, // piece[5][1] [5.5,6) 11 terms 1.7401027121293775, 0.111055285326807335, 0.000311183102581901502, -4.20495272801589984e-05, 4.06620509893498355e-06, -2.94074044563112047e-07, 1.60552260529592227e-08, -6.55441928032897686e-10, 2.18847087914480418e-11, -1.19980478018185813e-12, 1.41266974933586907e-13, // piece[6][0] [6,6.5) 11 terms 1.8514309185831368, 0.11156638930909997, 0.000206718650150190082, -2.84261438943338722e-05, 2.81512862421384154e-06, -2.10403321155174697e-07, 1.20026146438657283e-08, -5.10870952117195359e-10, 1.54132065755188478e-11, -4.10316159078071662e-13, 3.61325366986544374e-14, // piece[6][1] [6.5,7) 11 terms 1.96317821663057401, 0.111904825235124059, 0.000136396686109134567, -1.90466585184819251e-05, 1.92630413477190499e-06, -1.48297342432708201e-07, 8.82929813437123041e-09, -3.99314216884910833e-10, 1.2726412154057897e-11, -2.36521652480475832e-13, // piece[7][0] [7,7.5) 10 terms 2.07520217834255938, 0.112127492641929352, 8.94559638277328924e-05, -1.26611121325037993e-05, 1.30414277584559001e-06, -1.03023329070324591e-07, 6.37130127871247769e-09, -3.05644924819842089e-10, 1.07128076239501177e-11, -2.19875847872202851e-13, // piece[7][1] [7.5,8) 10 terms 2.18740767303177952, 0.112273158859660716, 5.83566938072388895e-05, -8.35746443507679357e-06, 8.74620242499620171e-07, -7.0641881816638371e-08, 4.51325468940253148e-09, -2.27866040935858935e-10, 8.73409936330895936e-12, -2.18037506361187783e-13, // piece[8][0] [8,8.5) 10 terms 2.2997316393930789, 0.11236797067791772, 3.78887535260235677e-05, -5.48264157479594422e-06, 5.81718493630287417e-07, -4.78856086390906106e-08, 3.14469016958892676e-09, -1.65684701538684969e-10, 6.83735167393766856e-12, -2.00715880627762191e-13, // piece[8][1] [8.5,9) 10 terms 2.41213255300147766, 0.112429405467443427, 2.44961589895683951e-05, -3.57716249800512957e-06, 3.84115723884903814e-07, -3.21385652276564673e-08, 2.1600565475166998e-09, -1.17877979915442271e-10, 5.1595125551977723e-12, -1.70743574197549741e-13, // piece[9][0] [9,9.5) 10 terms 2.52458323148974184, 0.112469054242964522, 1.57780440688127338e-05, -2.32273485706280234e-06, 2.52038379868292755e-07, -2.13853899668610415e-08, 1.46574806789080867e-09, -8.23399549369036355e-11, 3.77653521790700021e-12, -1.36485726415371725e-13, // piece[9][1] [9.5,10) 10 terms 2.63706597308195967, 0.112494551600227047, 1.0128573940655832e-05, -1.50180174824181579e-06, 1.64463620349992698e-07, -1.41249047706385146e-08, 9.84350187800750954e-10, -5.66411337685307339e-11, 2.69681853990842256e-12, -1.04102122222014163e-13, // piece[10][0] [10,10.5) 10 terms 2.74956930272339939, 0.112510896103101693, 6.48234905589909787e-06, -9.67349118577181081e-07, 1.06798188653725783e-07, -9.26962342706674462e-09, 6.55240649819337244e-10, -3.84678164402267402e-11, 1.88773236975756418e-12, -7.66327765150794858e-14, // piece[10][1] [10.5,11) 10 terms 2.86208581197359013, 0.112521343275100619, 4.13746558898462317e-06, -6.20994596353326188e-07, 6.90552926037196551e-08, -6.04935060629604903e-09, 4.32877736411612667e-10, -2.58467890429044732e-11, 1.30012166369174377e-12, -5.48935074454314017e-14, // piece[11][0] [11,11.5) 10 terms 2.97461073513390328, 0.112528003623171155, 2.6343049428101174e-06, -3.97445599707225896e-07, 4.44815419822052742e-08, -3.92852117056697527e-09, 2.84118435153283758e-10, -1.72102531770887146e-11, 8.83592503561363527e-13, -3.84911780678135611e-14, // piece[11][1] [11.5,12) 10 terms 3.08714101643719285, 0.112532239770794462, 1.67349596087998688e-06, -2.53678224067460558e-07, 2.85556366904238254e-08, -2.54025953480540056e-09, 1.85430287466763974e-10, -1.13717831941978681e-11, 5.93933175128006997e-13, -2.65356948790643812e-14, // piece[12][0] [12,12.5) 10 terms 3.19967470221572814, 0.112534928286794719, 1.06095087878931865e-06, -1.61516532312062951e-07, 1.82762140776554509e-08, -1.63632882508747509e-09, 1.20426431138053865e-10, -7.46463449337421144e-12, 3.95568670427124281e-13, // piece[12][1] [12.5,13) 9 terms 3.31221054669009485, 0.112536631235482659, 6.71355374092748571e-07, -1.0260698063564679e-07, 1.16652614268953189e-08, -1.05048153103985647e-09, 7.78723591087180506e-11, -4.87211091163724825e-12, 2.61411302348832045e-13, // piece[13][0] [13,13.5) 9 terms 3.42474775736200066, 0.112537707969043152, 4.24093860269819547e-07, -6.50501512387274965e-08, 7.42728238587494305e-09, -6.72335955527862464e-10, 5.01629845932474034e-11, -3.16427839314386847e-12, 1.71609202368875719e-13, // piece[13][1] [13.5,14) 9 terms 3.53728583117686224, 0.112538387633891027, 2.67474264630698623e-07, -4.11629021690701565e-08, 4.71835783849687606e-09, -4.29137743001886411e-10, 3.2203699006397446e-11, -2.04619028094216497e-12, 1.12013593330386935e-13, // piece[14][0] [14,14.5) 9 terms 3.64982444944160012, 0.112538816001205466, 1.68447366897287627e-07, -2.60025413925412271e-08, 2.99132011808448016e-09, -2.73233198670367687e-10, 2.0611349159810865e-11, -1.31811088613370809e-12, 7.27513545818927849e-14, // piece[14][1] [14.5,15) 9 terms 3.76236341062508028, 0.112539085602422748, 1.05938738532490209e-07, -1.63997033545002515e-08, 1.8928706675629797e-09, -1.73578203106859805e-10, 1.31558360733834863e-11, -8.4620946575033824e-13, 4.70457158812246469e-14, // piece[15][0] [15,15.5) 9 terms 3.87490258749818528, 0.112539255057749671, 6.65418766792231486e-08, -1.03280498552976667e-08, 1.195724085827832e-09, -1.10044332421932017e-10, 8.37637685471823993e-12, -5.41602513591422077e-13, 3.0306138056874852e-14, // piece[15][1] [15.5,16) 9 terms 3.98744189986330522, 0.112539361436724869, 4.17466981216908474e-08, -6.49544578826046275e-09, 7.54138844238940553e-10, -6.9634749431438658e-11, 5.32130969191732652e-12, -3.45695707637546734e-13, 1.94562562654015691e-14, // piece[16][0] [16,16.5) 9 terms 4.09998129724078098, 0.11253942814182076, 2.61619183331498868e-08, -4.07989748259151538e-09, 4.74934510121557255e-10, -4.39882037038785869e-11, 3.37358294536638173e-12, -2.20106321025381538e-13, // piece[16][1] [16.5,17) 8 terms 4.21252074789873365, 0.112539469924557073, 1.63782599722799829e-08, -2.55962510618376059e-09, 2.98692567014619972e-10, -2.77432072825269204e-11, 2.13476439456006952e-12, -1.3982837407044091e-13, // piece[17][0] [17,17.5) 8 terms 4.32506023191487809, 0.112539496070145892, 1.02434020510973438e-08, -1.60407189778330217e-09, 1.87613780222204025e-10, -1.74718602571784203e-11, 1.34852901354635878e-12, -8.86478988660644306e-14, // piece[17][1] [17.5,18) 8 terms 4.43759973679576003, 0.112539512415339063, 6.40064979400074166e-09, -1.00420415535578311e-09, 1.177041738964949e-10, -1.09882839538098489e-11, 8.50512723120311157e-13, -5.60953903163051322e-14, // piece[18][0] [18,18.5) 8 terms 4.55013925471505853, 0.112539522624636193, 3.99604370477221643e-09, -6.2805615810297837e-10, 7.37631311983573458e-11, -6.90192468761529397e-12, 5.35628089736570782e-13, -3.54354229459178567e-14, // piece[18][1] [18.5,19) 8 terms 4.66267878077504605, 0.112539528996079177, 2.49277859586408548e-09, -3.92444573567644385e-10, 4.61782568081024709e-11, -4.33009435306052936e-12, 3.3686361145354802e-13, -2.23490055131507845e-14, // piece[19][0] [19,19.5) 8 terms 4.77521831191362267, 0.1125395329692397, 1.55383097367851497e-09, -2.45010385735436277e-10, 2.88811181300476271e-11, -2.7135938653865083e-12, 2.11589669687634893e-13, -1.40747525998240837e-14, // piece[19][1] [19.5,20) 8 terms 4.8877578462180491, 0.112539535445004169, 9.67850256615123831e-10, -1.52840332132791385e-10, 1.804653613944041e-11, -1.69880309936714116e-12, 1.32746052476915737e-13, -8.85179909079776651e-15, // piece[20][0] [20,20.5) 8 terms 5.00029738249453537, 0.112539536986614216, 6.02439239906570431e-10, -9.52704114587431191e-11, 1.12667854116682251e-11, -1.06247694785912772e-12, 8.31896142980101458e-14, // piece[20][1] [20.5,21) 7 terms 5.11283691999860057, 0.112539537945898882, 3.74743528027322148e-10, -5.93420351611014544e-11, 7.02835197339575264e-12, -6.63894958478945743e-13, 5.20795605052830055e-14, // piece[21][0] [21,21.5) 7 terms 5.22537645826631358, 0.112539538542443363, 2.32961867764546614e-10, -3.69375017832369227e-11, 4.38100320714432608e-12, -4.14481870390881206e-13, 3.25719518754427907e-14, // piece[21][1] [21.5,22) 7 terms 5.33791599700877839, 0.112539538913187284, 1.44736591060607872e-10, -2.29767399318825261e-11, 2.72883933830162478e-12, -2.58558618984872817e-13, 2.03527754217587135e-14, // piece[22][0] [22,22.5) 7 terms 5.45045553604621524, 0.112539539143465955, 8.98724784116170585e-11, -1.42836469494209185e-11, 1.69856843802870675e-12, -1.61168100916547822e-13, 1.27066131981914459e-14, // piece[22][1] [22.5,23) 7 terms 5.56299507526681936, 0.112539539286419035, 5.57752110123683421e-11, -8.87426937079370657e-12, 1.05658378028588191e-12, -1.00388388989613689e-13, 7.92653334016851334e-15, // piece[23][0] [23,23.5) 7 terms 5.6755346146011032, 0.1125395393751151, 3.45965139296876247e-11, -5.5103728550596555e-12, 6.56832507026454178e-13, -6.24868407424383042e-14, // piece[23][1] [23.5,24) 6 terms 5.78807415400590308, 0.112539539430119351, 2.14491393775765667e-11, -3.41975890946528006e-12, 4.08082657049105931e-13, -3.88695450510724351e-14, // piece[24][0] [24,24.5) 6 terms 5.90061369345442355, 0.112539539464213439, 1.32917751033291456e-11, -2.12122436838489591e-12, 2.53394110795294803e-13, -2.41635175578503531e-14, // piece[24][1] [24.5,25) 6 terms 6.01315323293003878, 0.112539539485336723, 8.23304083665380868e-12, -1.31511623459939627e-12, 1.57257374559826725e-13, -1.50125219808287434e-14, // piece[25][0] [25,25.5) 6 terms 6.12569277242243704, 0.112539539498418037, 5.09741258305557398e-12, -8.14961799516812747e-13, 9.75443544014850325e-14, -9.32184838684687099e-15, // piece[25][1] [25.5,26) 6 terms 6.23823231192522609, 0.112539539506515671, 3.15470757154581878e-12, -5.04794410349442726e-13, 6.04755281811355735e-14, -5.78517550705084181e-15, // piece[26][0] [26,26.5) 6 terms 6.35077185143444733, 0.112539539511526232, 1.95162043667275352e-12, -3.12538882077047235e-13, 3.74759614222806977e-14, -3.58845625856511469e-15, // piece[26][1] [26.5,27) 6 terms 6.46331139094764673, 0.112539539514625406, 1.20688320345070149e-12, -1.93425343079151048e-13, 2.32129356980362993e-14, // piece[27][0] [27,27.5) 5 terms 6.57585093046330638, 0.112539539516541609, 7.46062295549186863e-13, -1.19660172603363165e-13, 1.43720786602845809e-14, // piece[27][1] [27.5,28) 5 terms 6.68839046998048747, 0.112539539517725953, 4.61031794168080458e-13, -7.39979197406639551e-14, 8.89465089001709868e-15, // piece[28][0] [28,28.5) 5 terms 6.80093000949860826, 0.112539539518457715, 2.8479885616495575e-13, -4.57434967275784204e-14, 5.50256467846532235e-15, // piece[28][1] [28.5,29) 5 terms 6.91346954901731081, 0.112539539518909687, 1.75874357429501294e-13, -2.82673531334546561e-14, 3.40278917025178899e-15, // piece[29][0] [29,29.5) 5 terms 7.02600908853637041, 0.112539539519188742, 1.08574736024292212e-13, -1.74619406753658459e-14, 2.10351150166973205e-15, // piece[29][1] [29.5,30) 5 terms 7.13854862805565293, 0.112539539519361007, 6.70072522103341212e-14, -1.07834267212563974e-14, // piece[30][0] [30,30.5) 4 terms 7.25108816757507135, 0.112539539519467297, 4.13414925633789057e-14, -6.65706886899143278e-15, // piece[30][1] [30.5,31) 4 terms 7.36362770709457415, 0.112539539519532869, 2.549917501837173e-14, -4.10843174959496338e-15, // piece[31][0] [31,31.5) 4 terms 7.47616724661412846, 0.112539539519573309, 1.57233777106330427e-14, -2.53478086356808097e-15, // piece[31][1] [31.5,32) 4 terms 7.58870678613371474, 0.112539539519598233, 9.69279905539110562e-15, -1.56343704268185646e-15, // piece[32][0] [32,32.5) 4 terms 7.70124632565332146, 0.11253953951961361, 5.97365220554157505e-15, -9.64051234252516753e-16, // piece[32][1] [32.5,33) 4 terms 7.8137858651729406, 0.112539539519623075, 3.68062492635757454e-15, // piece[33][0] [33,33.5) 3 terms 7.92632540469256686, 0.112539539519628917, 2.2672398943496648e-15, // piece[33][1] [33.5,34) 3 terms 8.03886494421219666, 0.112539539519632498, 1.3962747766233044e-15, // piece[34][0] [34,34.5) 3 terms 8.15140448373183091, 0.112539539519634718, 8.59695977475931737e-16, // piece[34][1] [34.5,35) 3 terms 8.26394402325146693, 0.112539539519636078, 5.29203152195586983e-16, // piece[35][0] [35,35.5) 3 terms 8.37648356277110295, 0.112539539519636925, // piece[35][1] [35.5,36) 2 terms 8.48902310229074075, 0.112539539519637438, // piece[36][0] [36,36.5) 2 terms 8.60156264181037855, 0.112539539519637757, // piece[36][1] [36.5,37) 2 terms 8.71410218133001635, 0.112539539519637952, // piece[37][0] [37,37.5) 2 terms 8.82664172084965415, 0.112539539519638063, // piece[37][1] [37.5,38) 2 terms 8.93918126036929195, 0.112539539519638146, // piece[38][0] [38,38.5) 2 terms 9.05172079988892975, 0.112539539519638188, // piece[38][1] [38.5,39) 2 terms 9.16426033940856755, 0.112539539519638215, // piece[39][0] [39,39.5) 2 terms 9.27679987892820712, 0.112539539519638229, // piece[39][1] [39.5,40) 2 terms }; // coefTh1c static int *nTermsTh1c[40]; static int allTermsTh1c[] = { 13, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 12, 12, 11, 11, 11, 11, 11, 10, 12, 12, 12, 11, 11, 11, 11, 11, 13, 12, 12, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; // allTermsTh1c static int nPiecesTh1c[40] = { 16, 8, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; // nPiecesTh1c static bool isInitTh1c = false; static int finishTh1c = 40; void InitTh1c() { for (int iInt = 0, walkTerm = 0, walkCoef = 0; iInt < finishTh1c; walkTerm += nPiecesTh1c[iInt], ++iInt) { nTermsTh1c[iInt] = &allTermsTh1c[walkTerm]; coefTh1c[iInt] = new double*[nPiecesTh1c[iInt]]; for (int iPiece = 0; iPiece < nPiecesTh1c[iInt]; walkCoef += nTermsTh1c[iInt][iPiece], ++iPiece) { coefTh1c[iInt][iPiece] = &allCoefTh1c[walkCoef]; } } isInitTh1c = true; } double Th1c(double x) { if (!isInitTh1c) InitTh1c(); // Transform the domain to approach pole at 1 slower. if (x < 0) return nan(""); x = -log(1-x); if (x < 0 || x >= finishTh1c) return nan(""); int iInt = static_cast(x); x -= iInt; // The 0.5 adjusts the range to [-0.5,0.5) instead of [0,1), so c[0] is the middle value. // The number of pieces per int was adjusted manually. x *= nPiecesTh1c[iInt]; int iPiece = static_cast(x); x = x - iPiece - 0.5; // start with the tiny terms and build up, to avoid rounding errors double *c = coefTh1c[iInt][iPiece]; int iTerm = nTermsTh1c[iInt][iPiece]-1; double y = c[iTerm]; while (iTerm--) y = y * x + c[iTerm]; return y; } // find the attraction of a ring at (nearD,0) to a ring at (farD,z) Point Attraction(double nearD, double farD, double z) { // scale farD to distance 1.0 double x2 = nearD/farD; double x = sqrt(x2); // distance to the far point if you scale both so the near point is a ring with x=1 double z2 = z*z/farD; // z position, scaled double x2z21 = x2+z2+1; // x*x + z*z + 1, scaled double x2z212 = sqrt(x2z21); double m = 2*x/x2z21; // argument to the fancy functions double th1m = Th1(m); // integral t=0..2pi of (1-mcos(t))^(-3/2) double th1cm = Th1c(m); // integral t=0..2pi of (1-cos(t))*(1-mcos(t))^(-3/2) double c = 1/(farD*x2z212*x2z21); // coefficient for the fancy functions Point a; double dist = sqrt(farD); a._x = c*(th1cm+(x-1)*th1m); // acceleration in the x direction (will need to rotate toward actual point) a._y = 0; // acceleration in the y direction a._z = c*z*th1m/dist; // acceleration in the z direction return a; } // Calculate the gravitational attraction of a ring through r1 centered on x==0 y==0 on point r2 Point RingAttraction(const Point& r, const Point& p) { Point a; double rd = r._x*r._x + r._y*r._y; double pd = p._x*p._x + p._y*p._y; double z = p._z - r._z; if (rd == 0.0) { // special case, ring is actually a point double dist2 = (z*z + pd); double dist3 = dist2*sqrt(dist2); a._x = -p._x/dist3; a._y = -p._y/dist3; a._z = -z/dist3; } else if (rd == pd && r._z == p._z) { // special case, point is in the ring, the force is a logarithm of the number of moons // assume there were 8192 moons double dist2 = (z*z + pd); double dist3 = dist2*sqrt(dist2); double f1024 = -1.12317308649484082; double f2048 = -1.23349090217562418; double f4096 = -1.34380870615306458; double f8192 = -1.45412650720466918; double f16384 = -1.56444430752481445; a._x = f8192*p._x/dist3; a._y = f8192*p._y/dist3; a._z = 0.0; } else { // scale ring to radius 1 a = Attraction(pd, rd, z); double dist = sqrt(pd); a._y = -a._x*p._y/dist; a._x = -a._x*p._x/dist; a._z = -a._z; } return a; }