#include "Fast_trig.h" #include /* Optimal interpolating polynomials calculated using Maple */ static double linear_optimized_sin_tab_256[256][3] = { {0.99999529381400581851, 0.}, {0.99995869693927050686, 0.0061358942747469677554}, {0.99988303756735220252, 0.012271563993882973009}, {0.99977022101547397585, 0.018406769472927193569}, {0.99961959568787744068, 0.024541282718278867316}, {0.99943139207721339570, 0.030674871738195732799}, {0.99920554118064375002, 0.036807305955220720864}, {0.99894207722184878764, 0.042938354368500650596}, {0.99864100147074074712, 0.049067786187176213261}, {0.99830232817692546393, 0.055195370628180184035}, {0.99792606911571291123, 0.061320876995879824436}, {0.99751223878216567146, 0.067444074666894793063}, {0.99706085264748232711, 0.073564733106785338600}, {0.99657192774339271837, 0.079682621876041795293}, {0.99604548246559363774, 0.085797510639659882827}, {0.99548153663878689338, 0.091909169175509902728}, {0.99488011149397252459, 0.098017367383105003310}, {0.99424122967503222730, 0.10412187529223011757}, {0.99356491523542547963, 0.11022246307161129643}, {0.99285119363811651529, 0.11631890103756476971}, {0.99210009175434534811, 0.12241095966264555898}, {0.99131163786271200064, 0.12849840958428854952}, {0.99048586164808356103, 0.13458102161344394316}, {0.98962279420048868384, 0.14065856674320600498}, {0.98872246801394492387, 0.14673081615743502664}, {0.98778491698523745551, 0.15279754123937209441}, {0.98681017641264319094, 0.15885851358024636348}, {0.98579828299460247036, 0.16491350498787450355}, {0.98474927482833776191, 0.17096228749525199402}, {0.98366319140841960276, 0.17700463336913594366}, {0.98254007362527991607, 0.18304031511861911093}, {0.98137996376367267221, 0.18906910550369480224}, {0.98018290550108206246, 0.19509077754381232483}, {0.97894894390607812684, 0.20110510452642267237}, {0.97767812543662011572, 0.20711186001551412087}, {0.97637049793830736928, 0.21311081786013741407}, {0.97502611064257808364, 0.21910175220292021641}, {0.97364501416485577064, 0.22508443748857051373}, {0.97222726050264369653, 0.23105864847236864081}, {0.97077290303356720431, 0.23702416022864761657}, {0.96928199651336413237, 0.24298074815926146703}, {0.96775459707382330238, 0.24892818800204121770}, {0.96619076222067119104, 0.25486625583923823665}, {0.96459055083140691794, 0.26079472810595461039}, {0.96295402315308553806, 0.26671338159856023539}, {0.96128124080004979302, 0.27262199348309630803}, {0.95957226675161035386, 0.27852034130366489680}, {0.95782716534967472429, 0.28440820299080428058}, {0.95604600229632480236, 0.29028535686984973815}, {0.95422884465134321595, 0.29615158166927947369}, {0.95237576082968860330, 0.30200665652904536415}, {0.95048682059891980820, 0.30785036100888821510}, {0.94856209507656917015, 0.31368247509663721164}, {0.94660165672746501992, 0.31950277921649325205}, {0.94460557936100340292, 0.32531105423729585243}, {0.94257393812836919584, 0.33110708148077331084}, {0.94050680951970671298, 0.33689064272977582056}, {0.93840427136123992742, 0.34266152023649122216}, {0.93626640281234229273, 0.34841949673064308575}, {0.93409328436255651273, 0.35416435542767081363}, {0.93188499782856411046, 0.35989588003689145667}, {0.92964162635110509272, 0.36561385476964293603}, {0.92736325439184775094, 0.37131806434740836435}, {0.92504996773020870691, 0.37700829400992116016}, {0.92270185346012341640, 0.38268432952325065035}, {0.92031899998676706809, 0.38834595718786785674}, {0.91790149702322623902, 0.39399296384669116229}, {0.91544943558712119887, 0.39962513689311155491}, {0.91296290799717919110, 0.40524226427899714590}, {0.91044200786975864378, 0.41084413452267666239}, {0.90788683011532461467, 0.41643053671690161254}, {0.90529747093487541197, 0.42200126053678682439}, {0.90267402781632073610, 0.42755609624772905870}, {0.90001659953081126871, 0.43309483471330339834}, {0.89732528612902002982, 0.43861726740313711638}, {0.89460018893737549879, 0.44412318640076072679}, {0.89184141055424676445, 0.44961238441143592188}, {0.88904905484608071073, 0.45508465476996010220}, {0.88622322694349154626, 0.46053979144844720441}, {0.88336403323730267704, 0.46597758906408453480}, {0.88047158137454115370, 0.47139784288686531610}, {0.87754598025438481102, 0.47680034884729665656}, {0.87458734002406230437, 0.48218490354408265084}, {0.87159577207470609114, 0.48755130425178232405}, {0.86857138903715866747, 0.49289934892844212973}, {0.86551430477773201361, 0.49822883622320271555}, {0.86242463439392065983, 0.50353956548387966903}, {0.85930249421006828891, 0.50883133676451795901}, {0.85614800177298819963, 0.51410395083291978788}, {0.85296127584753774488, 0.51935720917814557110}, {0.84974243641214688825, 0.52459091401798776197}, {0.84649160465430109693, 0.52980486830641723987}, {0.84320890296597868697, 0.53499887574100198197}, {0.83989445493904285642, 0.54017274077029773872}, {0.83654838536058849018, 0.54532626860121043535}, {0.83317082020824403993, 0.55045926520633002154}, {0.82976188664542847819, 0.55557153733123549405}, {0.82632171301656373408, 0.56066289250177081607}, {0.82285042884224255478, 0.56573313903129146070}, {0.81934816481435212213, 0.57078208602788130470}, {0.81581505279115362254, 0.57580954340153960107}, {0.81225122579231781207, 0.58081532187133776039}, {0.80865681799391692194, 0.58579923297254567060}, {0.80503196472337300871, 0.59076108906372728764}, {0.80137680245436293631, 0.59570070333380522951}, {0.79769146880168024047, 0.60061788980909410761}, {0.79397610251605398829, 0.60551246336030233103}, {0.79023084347892490902, 0.61038423970950211964}, {0.78645583269717893830, 0.61523303543706746390}, {0.78265121229783835645, 0.62005866798857977025}, {0.77881712552271083097, 0.62486095568170093162}, {0.77495371672299642249, 0.62963971771301356483}, {0.77106113135385282923, 0.63439477416482815714}, {0.76713951596891911678, 0.63912594601195686542}, {0.76318901821479802428, 0.64383305512845371341}, {0.75920978682549716699, 0.64851592429432093288}, {0.75520197161682928981, 0.65317437720218119633}, {0.75116572348077176796, 0.65780823846391549018}, {0.74710119437978564968, 0.66241733361726637814}, {0.74300853734109429423, 0.66700148913240640691}, {0.73888790645092204829, 0.67156053241847140573}, {0.73473945684869292046, 0.67609429183005843524}, {0.73056334472118975065, 0.68060259667368813949}, {0.72635972729667377590, 0.68508527721423125935}, {0.72212876283896514419, 0.68954216468129906393}, {0.71787061064148434368, 0.69397309127559746039}, {0.71358543102125489534, 0.69837789017524454255}, {0.70927380128730201031, 0.70275639554205134046}, {0.70493504671643825294, 0.70710844508015269756}, {0.70056934086980283975, 0.71143387235363383058}, {0.69617767495788149632, 0.71573251199153776865}, {0.69175979834997909960, 0.72000420470489890825}, {0.68731587737665296494, 0.72424878966690096121}, {0.68284607934901601866, 0.72846610707131915677}, {0.67835057255243765595, 0.73265599813853685549}, {0.67382952624020791857, 0.73681830512152351209}, {0.66928311062716513904, 0.74095287131177376211}, {0.66471149688328752075, 0.74505954104520740835}, {0.66011485712724862600, 0.74913815970803008573}, {0.65549336441993724413, 0.75318857374255438309}, {0.65084719275794173359, 0.75721063065298120342}, {0.64617651706699913486, 0.76120417901114114449}, {0.64148151319540934809, 0.76516906846219568381}, {0.63676235790741450380, 0.76910514973029795338}, {0.63201922887654392125, 0.77301227462421289087}, {0.62725230467892479138, 0.77689029604289655590}, {0.62246176478655887842, 0.78073906798103440124}, {0.61764778956056550487, 0.78455844553453829035}, {0.61281056024439106117, 0.78834828490600205438}, {0.60795025895698529275, 0.79210844341011538322}, {0.60306706868594461430, 0.79583877947903584687}, {0.59816117328062274685, 0.79953915266771884462}, {0.59323275744520887824, 0.80320942365920528161}, {0.58828200673177365127, 0.80684945426986677367}, {0.58330910753328326778, 0.81045910745460818264}, {0.57831424707658184814, 0.81403824731202728700}, {0.57329761341534248005, 0.81758673908953139266}, {0.56825939542298710955, 0.82110444918841069193}, {0.56319978278557551973, 0.82459124516886817959}, {0.55811896599466382658, 0.82804699575500593613}, {0.55301713634013250231, 0.83147157083976759142}, {0.54789448590298447868, 0.83486484148983678155}, {0.54275120754811339316, 0.83822667995049141548}, {0.53758749491704230093, 0.84155695965041356816}, {0.53240354242063322699, 0.84485555520645481895}, {0.52719954523176767911, 0.84812234242835685643}, {0.52197569927799850856, 0.85135719832342717138}, {0.51673220123417334494, 0.85456000110116966211}, {0.51146924851502990291, 0.85773063017786997788}, {0.50618703926776342544, 0.86086896618113542750}, {0.50088577236456655611, 0.86397489095438928252}, {0.49556564739514191437, 0.86704828756131930551}, {0.49022686465918765131, 0.87008904029028033616}, {0.48486962515885628435, 0.87309703465865076930}, {0.47949413059118707866, 0.87607215741714276087}, {0.47410058334051226489, 0.87901429655406599968}, {0.46868918647083738686, 0.88192334129954488414}, {0.46326014371819605468, 0.88479918212968894556}, {0.45781365948297939778, 0.88764171077071636066}, {0.45234993882224050883, 0.89045082020303039826}, {0.44686918744197415640, 0.89322640466524864668}, {0.44137161168937207603, 0.89596835965818486992}, {0.43585741854505411033, 0.89867658194878334302}, {0.43032681561527550962, 0.90135096957400551821}, {0.42478001112411067113, 0.90399142184466887576}, {0.41921721390561362166, 0.90659783934923781469}, {0.41363863339595553101, 0.90917012395756644100}, {0.40804447962553956306, 0.91170817882459311210}, {0.40243496321109334526, 0.91421190839398659874}, {0.39681029534773937190, 0.91668121840174372679}, {0.39117068780104362162, 0.91911601587973836374}, {0.38551635289904271058, 0.92151620915922161607}, {0.37984750352424985513, 0.92388170787427310585}, {0.37416435310563997175, 0.92621242296520319656}, {0.36846711561061419026, 0.92850826668190604006}, {0.36275600553694410858, 0.93076915258716331850}, {0.35703123790469606672, 0.93299499555989855673}, {0.35129302824813576938, 0.93518571179838188268}, {0.34554159260761353636, 0.93734121882338511519}, {0.33977714752143050828, 0.93946143548128706029}, {0.33399991001768610389, 0.94154628194712889918}, {0.32821009760610703242, 0.94359567972761955280}, {0.32240792826985817267, 0.94560955166409090990}, {0.31659362045733563796, 0.94758782193540280727}, {0.31076739307394230754, 0.94953041606079765281}, {0.30492946547384617191, 0.95143726090270458395}, {0.29908005745172176329, 0.95330828466949305590}, {0.29321938923447501759, 0.95514341691817575588}, {0.28734768147295185019, 0.95694258855706074186}, {0.28146515523363078055, 0.95870573184835270567}, {0.27557203199029990190, 0.96043278041070326271}, {0.26966853361571852058, 0.96212366922171017220}, {0.26375488237326376710, 0.96377833462036539390}, {0.25783130090856251266, 0.96539671430945188901}, {0.25189801224110888076, 0.96697874735788907529}, {0.24595523975586769388, 0.96852437420302684769}, {0.24000320719486415238, 0.97003353665288807855}, {0.23404213864876007557, 0.97150617788835951259}, {0.22807225854841701640, 0.97294224246533097445}, {0.22209379165644656163, 0.97434167631678280808}, {0.21610696305874815227, 0.97570442675482146948}, {0.21011199815603472187, 0.97703044247266319609}, {0.20410912265534649063, 0.97831967354656567825}, {0.19809856256155322012, 0.97957207143770765983}, {0.19208054416884526106, 0.98078758899401639742}, {0.18605529405221369658, 0.98196618045194290928}, {0.18002303905891995023, 0.98310780143818494698}, {0.17398400629995501945, 0.98421240897135762534}, {0.16793842314148917587, 0.98527996146361164681}, {0.16188651719631084259, 0.98631041872219906189}, {0.15582851631525985300, 0.98730374195098649915}, {0.14976464857864073809, 0.98825989375191583038}, {0.14369514228766040542, 0.98917883812641214837}, {0.13762022595575840281, 0.99006054047673920690}, {0.13154012830022650310, 0.99090496760730166389}, {0.12545507823292863658, 0.99171208772589590303}, {0.11936530485368954660, 0.99248187044490391355}, {0.11327103743564789380, 0.99321428678244660333}, {0.10717250543468919527, 0.99390930916344723981}, {0.10106993842661014609, 0.99456691142075277060}, {0.094963566261071151142, 0.99518706879586958931}, {0.088853618565139210533, 0.99576975794064394220}, {0.082740326198096565889, 0.99631495691589611214}, {0.076623916852265138417, 0.99682264519898119667}, {0.070504628216224620632, 0.99729280366435688283}, {0.064382668449567293206, 0.99772541464491971665}, {0.058258334726559595603, 0.99812046175081750566}, {0.052131657564140172855, 0.99847793041563651886}, {0.046003467826804433522, 0.99879780626021261562}, {0.039872195675035461869, 0.99908008000350234847}, {0.033743474229125938724, 0.99932473273204763389}, {0.027601331971081156529, 0.99953178009678360764}, {0.021494650480328422320, 0.99970113974863837649}, {0.015278083759910441634, 0.99983302927215493917}, {0.0093923385484412789795, 0.99992677442000858012}, {0.0025415755803579120809, 0.99998440508755508666} }; /* Reasonably optimal interpolating polynomials calculated using Maple */ static double linear_chebyshev_sin_tab_256[256][3] = { {0.99999627804475156555, 0.0}, {0.99995822899242112764, 0.0061359003139111870445}, {0.99988313171820388654, 0.012271567161761285500}, {0.99977018952661983559, 0.018406773218507896646}, {0.99961960655247250328, 0.024541286270646381258}, {0.99943138846512575649, 0.030674875357227567118}, {0.99920554235088420287, 0.036807309552089063014}, {0.99894207671272639364, 0.042938357972549498234}, {0.99864100146998469564, 0.049067789788101125016}, {0.99830232795797182868, 0.055195374229100456715}, {0.99792606892755410149, 0.061320880595456614435}, {0.99751223854467134657, 0.067444078265317055065}, {0.99706085238980358027, 0.073564736703750353675}, {0.99657192745738441250, 0.079682625471425713380}, {0.99604548215516120457, 0.085797514233288875930}, {0.99548153630350203623, 0.091909172767234106275}, {0.99488011113464948249, 0.098017370972771924740}, {0.99424122929192121879, 0.10412187887969226042}, {0.99356491482885753255, 0.11022246665672269958}, {0.99285119320831569616, 0.11631890462018150318}, {0.99210009130151133396, 0.12241096324262506765}, {0.99131163738700670579, 0.12849841316148950347}, {0.99048586114964606173, 0.13458102518772600598}, {0.98962279367943800616, 0.14065857031442969361}, {0.98872246747038498149, 0.14673081972546158836}, {0.98778491641925989740, 0.15279754480406341410}, {0.98681017582432992036, 0.15885851714146488837}, {0.98579828238402752442, 0.16491350854548318342}, {0.98474927419556881053, 0.17096229104911423294}, {0.98366319075351917191, 0.17700463691911556092}, {0.98254007294830634828, 0.18304031866458030948}, {0.98137996306468091903, 0.18906910904550214300}, {0.98018290478012429673, 0.19509078108133070590}, {0.97894894316320432470, 0.20110510805951731200}, {0.97767812467187843501, 0.20711186354405054394}, {0.97637049715174456163, 0.21311082138398144096}, {0.97502610983423976105, 0.21910175572193795436}, {0.97364501333478668472, 0.22508444100262834984}, {0.97222725965088794491, 0.23105865198133323680}, {0.97077290216016841352, 0.23702416373238590472}, {0.96928199561836561597, 0.24298075165764064732}, {0.96775459615726818588, 0.24892819149492875587}, {0.96619076128260254699, 0.25486625932650186306}, {0.96459054987186783990, 0.26079473158746231969}, {0.96295402217211924247, 0.26671338507418028665}, {0.96128123979769967794, 0.27262199695269722549}, {0.95957226572792008423, 0.27852034476711547098}, {0.95782716430468827175, 0.28440820644797356994}, {0.95604600123008649155, 0.29028536032060707094}, {0.95422884356389778069, 0.29615158511349445014}, {0.95237575972108121086, 0.30200665996658785898}, {0.95048681946919610496, 0.30785036443962838016}, {0.94856209392577530059, 0.31368247852044547888}, {0.94660165555564765245, 0.31950278263324033654}, {0.94460557816820975707, 0.32531105764685275559}, {0.94257393691464706065, 0.33110708488301132386}, {0.94050680828510446964, 0.33689064612456652782}, {0.93840427010580654184, 0.34266152362370650494}, {0.93626640153612736715, 0.34841950011015512576}, {0.93409328306561026696, 0.35416435879935209694}, {0.93188499651093740939, 0.35989588340061477748}, {0.92964162501284943830, 0.36561385812528140066}, {0.92736325303301530823, 0.37131806769483539513}, {0.92504996635085231389, 0.37700829734901049950}, {0.92270185206029656606, 0.38268433285387636486}, {0.92031899856652394505, 0.38834596050990434126}, {0.91790149558262169162, 0.39399296716001314415}, {0.91544943412621077626, 0.39962514019759409797}, {0.91296290651601912372, 0.40524226757451565488}, {0.91044200636840586304, 0.41084413780910688702}, {0.90788682859383673300, 0.41643053999411965188}, {0.90529746939331075706, 0.42200126380466913101}, {0.90267402625473832000, 0.42755609950615244306}, {0.90001659794927081755, 0.43309483796214503300}, {0.89732528452758196030, 0.43861727064227454037}, {0.89460018731610094385, 0.44412318963007184984}, {0.89184140891319754384, 0.44961238763079902885}, {0.88904905318531936497, 0.45508465797925385727}, {0.88622322526308131515, 0.46053979464755065548}, {0.88336403153730750274, 0.46597759225287711782}, {0.88047157965502568040, 0.47139784606522685938}, {0.87754597851541439780, 0.47680035201510738504}, {0.87458733826570299674, 0.48218490670122319052}, {0.87159577029702465941, 0.48755130739813370614}, {0.86857138724022255798, 0.49289935206388579518}, {0.86551430296160939734, 0.49822883934762051914}, {0.86242463255868038654, 0.50353956859715388380}, {0.85930249235577992321, 0.50883133986653128050}, {0.85614799989972199686, 0.51410395392355533845}, {0.85296127395536464767, 0.51935721225728690420}, {0.84974243450113854114, 0.52459091708551886635}, {0.84649160272452983675, 0.52980487136222254390}, {0.84320890101751753987, 0.53499887878496635785}, {0.83989445297196553551, 0.54017274380230650675}, {0.83654838337496938239, 0.54532627162114936810}, {0.83317081820415824009, 0.55045926821408534805}, {0.82976188462295176010, 0.55557154032669390410}, {0.82632171097577253139, 0.56066289548481946440}, {0.82285042678321398872, 0.56573314200181797105}, {0.81934816273716399354, 0.57078208898577377400}, {0.81581505069588440410, 0.57580954634668660365}, {0.81225122367904664979, 0.58081532480362835205}, {0.80865681586272361718, 0.58579923589186939280}, {0.80503196257433803359, 0.59076109196997417150}, {0.80137680028756744767, 0.59570070622686579990}, {0.79769146661720601454, 0.60061789268885938740}, {0.79397610031398349168, 0.60551246622666384485}, {0.79023084125934124901, 0.61038424256235189810}, {0.78645583046016587947, 0.61523303827629804760}, {0.78265121004348031120, 0.62005867081408421375}, {0.77881712325109285763, 0.62486095849337280740}, {0.77495371443420422113, 0.62963972051074696730}, {0.77106112904797274085, 0.63439477694851770655}, {0.76713951364603811849, 0.63912594878149771180}, {0.76318901587500373935, 0.64383305788374154050}, {0.75920978446887782773, 0.64851592703525196205}, {0.75520196924347378455, 0.65317437992865219035}, {0.75116572109076958755, 0.65780824117582375720}, {0.74710119197322690697, 0.66241733631450977545}, {0.74300853491806975215, 0.66700149181488334470}, {0.73888790401152303208, 0.67156053508608085115}, {0.73473945439301142307, 0.67609429448269991575}, {0.73056334224931833033, 0.68060259931126174705}, {0.72635972480870562503, 0.68508527983663765385}, {0.72212876033499405134, 0.68954216728843947705}, {0.71787060812160468196, 0.69397309386737369930}, {0.71358542848556164725, 0.69837789275155899350}, {0.70927338276145624713, 0.70275639810280697250}, {0.70493463329537281041, 0.70710844507286590305}, {0.70056934343877647915, 0.71143386980962714930}, {0.69617767754236305727, 0.71573250946329411220}, {0.69175980094987139038, 0.72000420219251343205}, {0.68731587999185818247, 0.72424878717046822430}, {0.68284608197943578152, 0.72846610459093311810}, {0.67835057519797301415, 0.73265599567429087035}, {0.67382952890075935969, 0.73681830267351032860}, {0.66928311330263255463, 0.74095286888008551780}, {0.66471149957357027183, 0.74505953862993562650}, {0.66011485983224549156, 0.74913815730926567210}, {0.65549336713954645596, 0.75318857136038762235}, {0.65084719549206097069, 0.75721062828750175580}, {0.64617651981552553723, 0.76120417666243804240}, {0.64148151595823947406, 0.76516906613035732850}, {0.63676236068444442127, 0.76910514741541211140}, {0.63201923166766912741, 0.77301227232636669105}, {0.62725230748404026983, 0.77689029376217648585}, {0.62246176760555906964, 0.78073906571752630420}, {0.61764779239334433917, 0.78455844328832736185}, {0.61281056309084193326, 0.78834828267717283910}, {0.60795026181700109930, 0.79210844119875177175}, {0.60306707155941772861, 0.79583877728522107260}, {0.59816117616744503295, 0.79953915049153548055}, {0.59323276034527168922, 0.80320942150073523725}, {0.58828200964496786598, 0.80684945212919129185}, {0.58330911045949924873, 0.81045910533180783665}, {0.57831425001570947362, 0.81403824520718197740}, {0.57329761636727112676, 0.81758673700272034430}, {0.56825939838760569149, 0.82110444711971245090}, {0.56319978576277247145, 0.82459124311836061035}, {0.55811896898432708624, 0.82804699372276621860}, {0.55301713934214956085, 0.83147156882587221790}, {0.54789448891724234413, 0.83486483949436155400}, {0.54275121057449862608, 0.83822667797351144255}, {0.53758749795544098936, 0.84155695769200326245}, {0.53240354547093101537, 0.84485555326668789410}, {0.52719954829384976374, 0.84812234050730632440}, {0.52197570235174964566, 0.85135719642116533970}, {0.51673220431947783255, 0.85455999921776813120}, {0.51146925161177162478, 0.85773062831339963820}, {0.50618704237582580835, 0.86086896433566645705}, {0.50088577548383262794, 0.86397488912799114400}, {0.49556565052549426309, 0.86704828575406074390}, {0.49022686780050845002, 0.87008903850222937600}, {0.48486962831102730162, 0.87309703288987471215}, {0.47949413375408964657, 0.87607215566770818285}, {0.47410058651402734131, 0.87901429482403874875}, {0.46868918965484552240, 0.88192333958899007785}, {0.46326014691257740148, 0.88479918043867096850}, {0.45781366268761370528, 0.88764170909929886205}, {0.45234994203700715351, 0.89045081855127628950}, {0.44686919066675212735, 0.89322640303322009900}, {0.44137161492403998453, 0.89596835804594331205}, {0.43585742178949020620, 0.89867658035638945885}, {0.43032681886935766101, 0.90135096800151924460}, {0.42478001438771637804, 0.90399142029214940015}, {0.41921721717862003851, 0.90659783781674357290}, {0.41363863667823945118, 0.90917012244515511505}, {0.40804448291697743068, 0.91170817733232162805}, {0.40243496651156127030, 0.91421190692191112450}, {0.39681029865711309523, 0.91668121694991967010}, {0.39117069111919857772, 0.91911601444822036990}, {0.38551635622585399237, 0.92151620774806356605}, {0.37984750685959222223, 0.92388170648352811420}, {0.37416435644938787009, 0.92621242159492360935}, {0.36846711896264174999, 0.92850826533214343300}, {0.36275600889712514602, 0.93076915125796849495}, {0.35703124127290408364, 0.93299499425132154580}, {0.35129303162424397302, 0.93518571051047193730}, {0.34554159599149484173, 0.93734121755619071030}, {0.33977715091295752056, 0.93946143423485589105}, {0.33399991341673114883, 0.94154628072150787905}, {0.32821010101254215695, 0.94359567852285481185}, {0.32240793168355513630, 0.94560955048022779310}, {0.31659362387816593334, 0.94758782077248587270}, {0.31076739650177716319, 0.94953041491887067005}, {0.30492946890855653076, 0.95143725978181053245}, {0.29908006089317832895, 0.95330828356967412320}, {0.29321939268254824125, 0.95514341583947333620}, {0.28734768492751190922, 0.95694258749951543450}, {0.28146515869454764484, 0.95870573081200431335}, {0.27557203545744326181, 0.96043277939559079030}, {0.26966853708895786610, 0.96212366822787182500}, {0.26375488585246833924, 0.96377833364783857640}, {0.25783130439360133173, 0.96539671335827320340}, {0.25189801573185074204, 0.96697874642809432005}, {0.24595524325218118550, 0.96852437329465101625}, {0.24000321069661765804, 0.97003353576596535800}, {0.23404214215582175268, 0.97150617702292328245}, {0.22807226206065483852, 0.97294224162141380525}, {0.22209379517372830889, 0.97434167549441646025}, {0.21610696658094140695, 0.97570442595403689215}, {0.21011200168300688355, 0.97703044169349052590}, {0.20410912618696477989, 0.97831967278903423820}, {0.19809856609768468208, 0.97957207070184595820}, {0.19208054770935676395, 0.98078758827985212670}, {0.18605529759697195280, 0.98196617975950294505}, {0.18002304260779150564, 0.98310780076749534700}, {0.17398400985280629241, 0.98421240832244362850}, {0.16793842669818629830, 0.98527996083649767235}, {0.16188652075672029660, 0.98631041811690870765}, {0.15582851987924642403, 0.98730374136754254370}, {0.14976465214607374137, 0.98825989319034022265}, {0.14369514585839509094, 0.98917883758672603540}, {0.13762022952969168359, 0.99006053995896284755}, {0.13154013187712976177, 0.99090496711145468450}, {0.12545508181294944109, 0.99171208725199652715}, {0.11936530843584636651, 0.99248186999297127020}, {0.11327104102234622443, 0.99321428635249379895}, {0.10717250901817263656, 0.99390930875550214075}, {0.10106994202960867530, 0.99456691103479565055}, {0.094963569814852257795, 0.99518706843202019135}, {0.088853622275365935212, 0.99576975759860027200}, {0.082740329447221209776, 0.99631495659661810800}, {0.076623921492437829911, 0.99682264489963957165}, {0.070504628690318266280, 0.99729280339348700085}, {0.064382681428777889810, 0.99772541437695883685}, {0.058258310195670968491, 0.99812046156249606465}, {0.052131745570112901035, 0.99847793007679543040}, {0.046003218213799109153, 0.99879780646136941270}, {0.039872958862320679757, 0.99908007867305292725}, {0.033741198316477384127, 0.99932473608445674500}, {0.027608167433588066998, 0.99953176948436760760}, {0.021474097118799068817, 0.99970117107809502410}, {0.015339218316390772310, 0.99983293448776473680}, {0.0092752035500397918016, 0.99992705475255884470}, {0.0026130234762092138839, 0.99998396668875680365} }; static double quadratic_sin_tab_64[64][3] = { {-0.00613569214025799899, 1.0000501967579583680, 0.0}, {-0.0184033805092571107, 0.99974898899734996865, 0.024541228522912288032}, {-0.0306599833699846999, 0.99884556982879211305, 0.049067674327418014256}, {-0.04289811780318069, 0.99734048343821090539, 0.073564563599667423530}, {-0.0551104120142798, 0.99523463643336932392, 0.098017140329560601995}, {-0.0672895097738899989, 0.99252929729776023782, 0.12241067519921619850}, {-0.07942807484892, 0.98922609562651962720, 0.14673047445536175166}, {-0.0915187954216798999, 0.98532702114482009972, 0.17096188876030122637}, {-0.10355438849417899, 0.98083442250933318444, 0.19509032201612826785}, {-0.115527604275199899, 0.97575100589348805121, 0.21910124015686979723}, {-0.127431230547258899, 0.97007983335737278333, 0.24298017990326388995}, {-0.1392580970110019889, 0.96382432100326450892, 0.26671275747489838632}, {-0.151001079604298109, 0.95698823691789646467, 0.29028467725446236764}, {-0.1626531047935398, 0.94957569890270423414, 0.31368174039889147666}, {-0.1742071538344389, 0.94159117199341523803, 0.33688985339222005069}, {-0.185656266999890898, 0.93303946577047903965, 0.35989503653498814878}, {-0.19699354777223899, 0.92392573146195554502, 0.38268343236508977173}, {-0.208212166997470009, 0.91425545884060763229, 0.40524131400498987091}, {-0.2193053669988699, 0.90403447291706801048, 0.42755509343028209432}, {-0.230266465647530897, 0.89326893043106904359, 0.44961132965460660005}, {-0.24108886038751, 0.88196531614285525192, 0.47139673682599764857}, {-0.251766032212882098, 0.87013043892700426937, 0.49289819222978403688}, {-0.26229154959458891, 0.85777142767101646407, 0.51410274419322172660}, {-0.272659072354531009, 0.84489572698113916820, 0.53499761988709721067}, {-0.282862355484669009, 0.83151109269801461780, 0.55557023301960222475}, {-0.292895252908766698, 0.81762558722485115731, 0.57580819141784530075}, {-0.3027517211845699, 0.80324757467093332675, 0.59569930449243334347}, {-0.312425823144148999, 0.78838571581339515283, 0.61523159058062684549}, {-0.3219117314702200001, 0.77304896288029168209, 0.63439328416364549822}, {-0.3312037322063089, 0.75724655415811170348, 0.65317284295377676409}, {-0.340296228198617996, 0.74098800842697922391, 0.67155895484701840063}, {-0.349183742467557, 0.72428311922689662230, 0.68954054473706692462}, {-0.357860921506859999, 0.70714194895848208979, 0.70710678118654752440}, {-0.3663225385083219958, 0.68957482282175537533, 0.72424708295146692095}, {-0.374563496510269899, 0.67159232259662429431, 0.74095112535495909118}, {-0.382578831467750989, 0.65320528026881543148, 0.75720884650648454758}, {-0.3903637152427099, 0.63442477150509151621, 0.77301045336273696082}, {-0.397913458512230899, 0.61526210898168274224, 0.78834642762660626201}, {-0.4052235135933000981, 0.59572883556995580835, 0.80320753148064490981}, {-0.412289477182054009, 0.57583671738341723145, 0.81758481315158369651}, {-0.419107093006250989, 0.55559773669024864020, 0.83146961230254523708}, {-0.425672254389049697, 0.53502408469563546692, 0.84485356524970707326}, {-0.4319810067227131, 0.51412815419824069014, 0.85772861000027206992}, {-0.4380295498507408999, 0.49292253212524692206, 0.87008699110871141868}, {-0.443814240356910998, 0.47141999195046137320, 0.88192126434835502970}, {-0.4493315937599790999, 0.44963348600005389130, 0.89322430119551532034}, {-0.454578286612550897, 0.42757613765055879160, 0.90398929312344333160}, {-0.459551158503047999, 0.40526123342384466565, 0.91420975570353065466}, {-0.4642472139593869, 0.38270221498380956685, 0.92387953251128675612}, {-0.4686636242533579, 0.35991267103962574973, 0.93299279883473888771}, {-0.472797729104539, 0.33690632916040922728, 0.94154406518302077842}, {-0.476647038282758899, 0.31369704750624567760, 0.94952818059303666721}, {-0.480209233108090989, 0.29029880648055232013, 0.95694033573220886493}, {-0.4834821678475810099, 0.26672570030880667974, 0.96377606579543986669}, {-0.48646387100772389, 0.24299192854871137996, 0.97003125319454399261}, {-0.489152546522027899, 0.21911178753691178684, 0.97570213003852854447}, {-0.491546574832897098, 0.19509966177741736871, 0.98078528040323044912}, {-0.4936445138671998, 0.17097001527691453668, 0.98527764238894124477}, {-0.495445099904899, 0.14673738283218935729, 0.98917650996478097345}, {-0.496947248340308, 0.12241636127491039028, 0.99247953459870999816}, {-0.49815005433536811, 0.098021600679041920432, 0.99518472667219688624}, {-0.49905279336472899, 0.073567795536188175123, 0.99729045667869021614}, {-0.4996549216521492979, 0.049069675904180402189, 0.99879545620517239272}, {-0.49995607649807098, 0.024541998534241407421, 0.99969881869620422012} }; static double quadratic_sin_tab_256[256][3] = { {-0.001533977178281699, 1.0000031374524076137, 0.0}, {-0.00460187378148, 0.99998431263165095557, 0.0061358846491544753597}, {-0.007669597126718998, 0.99992783896671705823, 0.012271538285719926080}, {-0.010737031715969987, 0.99983371858380761856, 0.018406729905804820928}, {-0.0138040620620501, 0.99970195502650182992, 0.024541228522912288032}, {-0.0168705726929901, 0.99953255325562308859, 0.030674803176636625935}, {-0.019936448156399988, 0.99932551964905233514, 0.036807222941358832325}, {-0.023001573023801, 0.99908086200148783823, 0.042938256934940823078}, {-0.02606583189499, 0.99879858952415184415, 0.049067674327418014256}, {-0.029129109402328999, 0.99847871284444343965, 0.055195244349689939811}, {-0.032191290215169, 0.99812124400553893004, 0.061320736302208577783}, {-0.035252259044129, 0.99772619646593803258, 0.067443919563664057898}, {-0.038311900645459, 0.99729358509895730860, 0.073564563599667423530}, {-0.04137009982539, 0.99682342619217026102, 0.079682437971430121148}, {-0.044426741444429999, 0.99631573744679386478, 0.085797312344439890462}, {-0.047481710421778986, 0.99577053797702261570, 0.091908956497132728626}, {-0.050534891739601, 0.99518784830930852261, 0.098017140329560601995}, {-0.05358617044719999, 0.99456769038158734603, 0.10412163387205457912}, {-0.05663543166588999, 0.99391008754245597671, 0.11022220729388305881}, {-0.059682560592531, 0.99321506455028853864, 0.11631863091190476725}, {-0.06272744250449099, 0.99248264757230815939, 0.12241067519921619850}, {-0.0657699627637, 0.99171286418360017677, 0.12849811079379317263}, {-0.068810006821, 0.99090574336607415646, 0.13458070850712618632}, {-0.07184746022041, 0.99006131550737244256, 0.14065823933284923072}, {-0.0748822086036, 0.98917961239972709246, 0.14673047445536175166}, {-0.07791413771389996, 0.98826066723876110523, 0.15279718525844342772}, {-0.08094313340099999, 0.98730451462224106089, 0.15885814333386144168}, {-0.083969081624910001, 0.98631119054877245933, 0.16491312048996992142}, {-0.0869918684603, 0.98528073241644468866, 0.17096188876030122637}, {-0.090011380101, 0.98421317902142429803, 0.17700422041214875620}, {-0.09302750286411, 0.98310857055649326483, 0.18303988795514095852}, {-0.09604012319429, 0.98196694860953582714, 0.18906866414980621276}, {-0.09904912766820999, 0.98078835616197379653, 0.19509032201612826785}, {-0.10205440299838997, 0.97957283758714567896, 0.20110463484209191157}, {-0.10505583603801, 0.97832043864863940658, 0.20711137619221854971}, {-0.10805331378469889, 0.97703120649856645697, 0.21311031991609137397}, {-0.111046723385311, 0.97570518967578981366, 0.21910124015686979723}, {-0.11403595213951, 0.97434243810409242738, 0.22508391135979283599}, {-0.11702088750459098, 0.97294300309030115448, 0.23105810828067111965}, {-0.12000141709929999, 0.97150693732235254266, 0.23702360599436720687}, {-0.12297742870860999, 0.97003429486731248183, 0.24298017990326388995}, {-0.12594881028710998, 0.96852513116933548924, 0.24892760574572016812}, {-0.12891544996418978, 0.96697950304758320839, 0.25486565960451457156}, {-0.13187723604739098, 0.96539746869407989749, 0.26079411791527551828}, {-0.13483405702720099, 0.96377908767152516549, 0.26671275747489838632}, {-0.13778580158099001, 0.96212442091104985069, 0.27262135544994898449}, {-0.14073235857721099, 0.96043353070992206080, 0.27851968938505310521}, {-0.1436736170797, 0.95870648072920243049, 0.28440753721127184362}, {-0.1466094663516909, 0.95694333599134631917, 0.29028467725446236764}, {-0.1495397958601, 0.95514416287775646128, 0.29615088824362382413}, {-0.15246449527968999, 0.95330902912628376608, 0.30200594931922806701}, {-0.15538345449729, 0.95143800382867742269, 0.30784964004153489369}, {-0.15829656361561, 0.94953115742798161277, 0.31368174039889147666}, {-0.1612037129578, 0.94758856171588594393, 0.31950203081601567790}, {-0.164104793071311, 0.94561028983002089896, 0.32531029216226293414}, {-0.16699969473208999, 0.94359641625120469601, 0.33110630575987640174}, {-0.16988830894879988, 0.94154701680063978822, 0.33688985339222005069}, {-0.17277052696664999, 0.93946216863705655684, 0.34266071731199439760}, {-0.17564624027178888, 0.93734195025381017842, 0.34841868024943456842}, {-0.17851534059530998, 0.93518644147592487884, 0.35416352542049038236}, {-0.181377719917211, 0.93299572345708786892, 0.35989503653498814878}, {-0.18423327047037888, 0.93076987867659344069, 0.36561299780477387002}, {-0.1870818847451, 0.92850899093624045514, 0.37131719395183754341}, {-0.189923455492499969, 0.92621314535717351081, 0.37700741021641825673}, {-0.19275787572920999, 0.92388242837668205081, 0.38268343236508977173}, {-0.19558503874087198, 0.92151692774494282642, 0.38834504669882629163}, {-0.19840483808628999, 0.91911673252171698582, 0.39399204006104810860}, {-0.20121716760180098, 0.91668193307299924173, 0.39962419984564682855}, {-0.20402192140460978, 0.91421262106761159343, 0.40524131400498987091}, {-0.20681899389739, 0.91170888947375580150, 0.41084317105790394219}, {-0.20960827977198986, 0.90917083255551154962, 0.41642956009763718257}, {-0.21238967401329999, 0.90659854586928684654, 0.42200027079979968595}, {-0.2151630719033999, 0.90399212626022157205, 0.42755509343028209432}, {-0.21792836902550888, 0.90135167185854135419, 0.43309381885315196849}, {-0.22068546126767891, 0.89867728207586157435, 0.43861623853852763765}, {-0.22343424482689999, 0.89596905760144569645, 0.44412214457042923165}, {-0.2261746162131889, 0.89322710039841549830, 0.44961132965460660005}, {-0.22890647225299999, 0.89045151369990922588, 0.45508358712634382354}, {-0.23162971009339888, 0.88764240200519670445, 0.46053871095824002364}, {-0.23434422720628997, 0.88479987107574718201, 0.46597649576796617791}, {-0.2370499213914, 0.88192402793124208070, 0.47139673682599764857}, {-0.2397466907809, 0.87901498084555053731, 0.47679923006332213334}, {-0.24243443384309898, 0.87607283934265205402, 0.48218377207912274852}, {-0.2451130493857899, 0.87309771419251009106, 0.48755016014843595464}, {-0.24778243656070998, 0.87008971740690560061, 0.49289819222978403688}, {-0.25044249486700998, 0.86704896223521786236, 0.49822766697278185242}, {-0.25309312415491, 0.86397556316015990757, 0.50353838372571755870}, {-0.25573422462971, 0.86086963589346978522, 0.50883014254310703694}, {-0.2583656968556, 0.85773129737155440904, 0.51410274419322172660}, {-0.26098744175890999, 0.85456066575108393184, 0.51935599016558958737}, {-0.26359936063258, 0.85135786040454776372, 0.52458968267846890622}, {-0.26620135513929999, 0.84812300191575671371, 0.52980362468629466822}, {-0.26879332731549998, 0.84485621207530486017, 0.53499761988709721067}, {-0.27137517957479998, 0.84155761387598273402, 0.54017147272989288130}, {-0.27394681471199999, 0.83822733150814863994, 0.54532498842204642232}, {-0.27650813590639887, 0.83486549035505088613, 0.55045797293660480298}, {-0.27905904672578999, 0.83147221698810930611, 0.55557023301960222475}, {-0.28159945112988998, 0.82804763916214869310, 0.56066157619733602385}, {-0.284129253473709, 0.82459188581058738873, 0.56573181078361319740}, {-0.2866483585118, 0.82110508704058699551, 0.57078074588696728024}, {-0.289156671401101, 0.81758737412814934092, 0.57580819141784530075}, {-0.2916540977053001, 0.81403887951317889973, 0.58081395809576454508}, {-0.29414054339750096, 0.81045973679449103611, 0.58579785745643886033}, {-0.29661591486441, 0.80685008072478605111, 0.59075970185887422843}, {-0.29908011890990889, 0.80321004720557612717, 0.59569930449243334347}, {-0.3015330627578909, 0.79953977328206457142, 0.60061647938386892666}, {-0.30397465405648889, 0.79583939713799066144, 0.60551104140432551393}, {-0.30640480088118996, 0.79210905809042488483, 0.61038280627630945272}, {-0.30882341173828998, 0.78834889658452367797, 0.61523159058062684549}, {-0.31123039556848977, 0.78455905418824268410, 0.62005721176328917866}, {-0.31362566175021, 0.78073967358700610810, 0.62485948814238637709}, {-0.31600912010309, 0.77689089857833521321, 0.62963823891492702538}, {-0.31838068089109997, 0.77301287406643269933, 0.63439328416364549822}, {-0.32074025482649, 0.76910574605673063007, 0.63912444486377574381}, {-0.323087753072610989, 0.76516966165039011157, 0.64383154288979146507}, {-0.325423087247401, 0.76120476903876386332, 0.64851440102211244509}, {-0.32774616942681, 0.75721121749781751567, 0.65317284295377676409}, {-0.33005691214831, 0.75318915738251066389, 0.65780669329707865694}, {-0.33235522841352, 0.74913874012113200224, 0.66241577759017176112}, {-0.334641031692201, 0.74506011820960254177, 0.66699992230363750665}, {-0.33691423592528999, 0.74095344520573285343, 0.67155895484701840063}, {-0.33917475552778998, 0.73681887572343955773, 0.67609270357531596037}, {-0.34142250539240198, 0.73265656542692671497, 0.68060099779545305060}, {-0.34365740089269, 0.72846667102482490314, 0.68508366777270038137}, {-0.34587935788600999, 0.72424935026428966584, 0.68954054473706692462}, {-0.348088292717091, 0.72000476192506493860, 0.69397146088965400901}, {-0.3502841222206, 0.71573306581350150883, 0.69837624940897285356}, {-0.3524667637249889, 0.71143442275654477903, 0.70275474445722530246}, {-0.354636135054891, 0.70710899459567533702, 0.70710678118654752440}, {-0.356792154534801, 0.70275694418081930029, 0.71143219574521644153}, {-0.35893474099164, 0.69837843536421399846, 0.71573082528381865413}, {-0.36106381375840995, 0.69397363299424268186, 0.72000250796138162908}, {-0.36317929267669, 0.68954270290922476036, 0.72424708295146692095}, {-0.3652810980997989, 0.68508581193117297913, 0.72846439044822519650}, {-0.36736915089609, 0.68060312785951447428, 0.73265427167241283462}, {-0.36944337245149099, 0.67609481946477051931, 0.73681656887736987510}, {-0.37150368467269998, 0.67156105648220387549, 0.74095112535495909118}, {-0.37355000999019199, 0.66700200960542873896, 0.74505778544146596242}, {-0.37558227136088999, 0.66241785047998271971, 0.74913639452345932547}, {-0.37760039227130099, 0.65780875169686590119, 0.75318679904361248249}, {-0.37960429674049998, 0.65317488678604354473, 0.75720884650648454758}, {-0.38159390932239, 0.64851643020990907859, 0.76120238548426181404}, {-0.383569155109291, 0.64383355735672029564, 0.76516726562245892590}, {-0.38552995973431, 0.63912644453399331724, 0.76910333764557963935}, {-0.38747624937419999, 0.63439526896186506715, 0.77301045336273696082}, {-0.38940795075240012, 0.62964020876642265178, 0.77688846567323245005}, {-0.391324991141279959, 0.62486144297299384600, 0.78073722857209447831}, {-0.39322729836538999, 0.62005915149941002840, 0.78455659715557523303}, {-0.395114800804011, 0.61523351514923136577, 0.78834642762660626201}, {-0.396987427393691, 0.61038471560493865540, 0.79210657730021235179}, {-0.39884510763109, 0.60551293542109414738, 0.79583690460888353627}, {-0.40068777157570099, 0.60061835801746885644, 0.79953726910790503351}, {-0.4025153498521, 0.59570116767213457782, 0.80320753148064490981}, {-0.404327773653101, 0.59076154951452923390, 0.80684755354379927221}, {-0.406124974742002, 0.58579968951848475951, 0.81045719825259479173}, {-0.40790688545510098, 0.58081577449522495589, 0.81403632970594836166}, {-0.4096734387044, 0.57580999208633312029, 0.81758481315158369651}, {-0.4114245679804, 0.57078253075668909431, 0.82110251499110467906}, {-0.41316020735398995, 0.56573357978736989001, 0.82458930278502526448}, {-0.4148802914792, 0.56066332926852503952, 0.82804504525775575207}, {-0.416584755596001, 0.55557197009222187837, 0.83146961230254523708}, {-0.418273535532201, 0.55045969394525524431, 0.83486287498638005631}, {-0.41994656770617999, 0.54532669330193254417, 0.83822470555483804319}, {-0.42160378912919887, 0.54017316141682666630, 0.84155497743689840962}, {-0.423245137407909979, 0.53499929231750093059, 0.84485356524970707326}, {-0.4248705507464, 0.52980528079720215857, 0.84812034480329725127}, {-0.42647996794878, 0.52459132240752845426, 0.85135519310526514224}, {-0.42807332842140001, 0.51935761345106623360, 0.85455798836540052079}, {-0.42965057217518, 0.51410435097399985416, 0.85772861000027206992}, {-0.43121163982769989, 0.50883173275869190752, 0.86086693863776727935}, {-0.4327564726058, 0.50353995731623905787, 0.86397285612158673791}, {-0.43428501234721, 0.49822922387899462158, 0.86704624551569265147}, {-0.43579720150348, 0.49289973239307214980, 0.87008699110871141868}, {-0.43729298314129, 0.48755168351081229498, 0.87309497841829009865}, {-0.438772300945501, 0.48218527858323393505, 0.87607009419540660710}, {-0.44023509922058998, 0.47680071965244921876, 0.87901222642863347783}, {-0.44168132289301, 0.47139820944405841378, 0.88192126434835502970}, {-0.44311091751328099, 0.46597795135951749951, 0.88479709843093778013}, {-0.44452382925790997, 0.46054014946847942520, 0.88763962040285394778}, {-0.44592000493160999, 0.45508500850111218870, 0.89044872324475788996}, {-0.44729939196920999, 0.44961273384039028393, 0.89322430119551532034}, {-0.448661938437500989, 0.44412353151436133274, 0.89596624975618515591}, {-0.45000759303739998, 0.43861760818839053407, 0.89867446569395384303}, {-0.45133630510580099, 0.43309517115737933103, 0.90134884704602201459}, {-0.4526480246173089, 0.42755642833795980494, 0.90398929312344333160}, {-0.45394270218659999, 0.42200158826066966830, 0.90659570451491536534}, {-0.45522028906969998, 0.41643086006209763758, 0.90916798309052237656}, {-0.456480737166209999, 0.41084445347701195632, 0.91170603200542985139}, {-0.45772399902099, 0.40524257883046321105, 0.91420975570353065466}, {-0.45895002782590001, 0.39962544702986544938, 0.91667905992104266313}, {-0.46015877742161, 0.39399326955705591123, 0.91911385169005774391}, {-0.461350202299501, 0.38834625846033386397, 0.92151403934204194346}, {-0.46252425760300999, 0.38268462634647484452, 0.92387953251128675612}, {-0.463680899129601, 0.37700858637272786535, 0.92621024213831134200}, {-0.46482008333248998, 0.37131835223879054012, 0.92850608047321556595}, {-0.4659417673219198, 0.36561413817876116547, 0.93076696107898373195}, {-0.46704590886720996, 0.35989615895307560649, 0.93299279883473888771}, {-0.46813246639789, 0.35416462984041887613, 0.93518350993894757764}, {-0.46920139900591, 0.34841976662962399350, 0.93733901191257492322}, {-0.47025266644640975, 0.34266178561154289668, 0.93945922360218991198}, {-0.4712862291398089, 0.33689090357090677171, 0.94154406518302077842}, {-0.47230204817301, 0.33110733777816244531, 0.94359345816196036150}, {-0.47330008530109999, 0.32531130598129374026, 0.94560732538052132573}, {-0.47428030294849999, 0.31950302639762160549, 0.94758559101774113464}, {-0.47524266421049996, 0.31368271770558908156, 0.94952818059303666721}, {-0.47618713285491, 0.30785059903652980098, 0.95143502096900836956}, {-0.47711367332277999, 0.30200688996641386097, 0.95330604035419383692}, {-0.47802225073060099, 0.29615181050758619460, 0.95514116830577072150}, {-0.4789128308708, 0.29028558110047822268, 0.95694033573220886493}, {-0.47978538021358997, 0.28440842260531183478, 0.95870347489587155539}, {-0.48063986590809, 0.27852055629378325508, 0.96043051941556581121}, {-0.48147625578321, 0.27262220384073013649, 0.96212140426904159543}, {-0.4822945183494899, 0.26671358731578946386, 0.96377606579543986669}, {-0.48309462279969999, 0.26079492917503318634, 0.96539444169768937455}, {-0.48387653901039, 0.25486645225259525237, 0.96697647104485210910}, {-0.4846402375429, 0.24892837975228126493, 0.96852209427441731623}, {-0.4853856896444, 0.24298093523916457753, 0.97003125319454399261}, {-0.4861128672491, 0.23702434263116996806, 0.97150389098625177554}, {-0.48682174297899989, 0.23105882619064138293, 0.97293995220556014546}, {-0.48751229014538997, 0.22508461051590145287, 0.97433938278557586051}, {-0.488184482749701, 0.21910192053279456048, 0.97570213003852854447}, {-0.48883829548407999, 0.21311098148621602768, 0.97702814265775435149}, {-0.48947370373298999, 0.20711201893163574078, 0.97831737071962763311}, {-0.49009068357359999, 0.20110525872660282694, 0.97956976568544053444}, {-0.49068921177688999, 0.19509092702224349471, 0.98078528040323044912}, {-0.49126926580878, 0.18906925025474813368, 0.98196386910955526408}, {-0.49183082383049, 0.18304045513684312011, 0.98310548743121632719}, {-0.49237386469959099, 0.17700476864925662355, 0.98421009238692907320}, {-0.49289836797101, 0.17096241803217418796, 0.98527764238894124477}, {-0.493404313897501, 0.16491363077668142652, 0.98630809724459864786}, {-0.49389168343040898, 0.15885863461619925050, 0.98730141815785838241}, {-0.49436045822057989, 0.15279765751791101013, 0.98825756773074949141}, {-0.49481062061890999, 0.14673092767417879268, 0.98917650996478097345}, {-0.49524215367709998, 0.14065867349395265118, 0.99005821026229710551}, {-0.49565504114808, 0.13458112359416984534, 0.99090263542778002511}, {-0.4960492674868889, 0.12849850679114917268, 0.99170975366909952287}, {-0.496424817851162, 0.12241105209197556812, 0.99247953459870999816}, {-0.49678167810160997, 0.11631898868587762232, 0.99321194923479453311}, {-0.49711983480266985, 0.11022254593559947527, 0.99390697000235604155}, {-0.49743927522290997, 0.10412195336876480916, 0.99456457073425545212}, {-0.49773998733559999, 0.098017440669235827478, 0.99518472667219688624}, {-0.498021959819091, 0.091909237668465330435, 0.99576741446765979399}, {-0.4982851820573, 0.085797574336844062873, 0.99631261218277801263}, {-0.4985296441399889, 0.079682680775041708842, 0.99682029929116571497}, {-0.49875533686340997, 0.073564787205345396378, 0.99729045667869021614}, {-0.4989622517301999, 0.067444123962989201538, 0.99772306664419160985}, {-0.49915038095030995, 0.061320921487485883665, 0.99811811290014920713}, {-0.49931971744069988, 0.055195410313947298608, 0.99847558057329475221}, {-0.49947025482589, 0.049067821064406626655, 0.99879545620517239272}, {-0.49960198743830999, 0.042938384439136263514, 0.99907772775264538289}, {-0.4997149103183, 0.036807331207960766121, 0.99932238458834950090}, {-0.49980901921440098, 0.030674892201569152309, 0.99952941750109316308}, {-0.49988431058331, 0.024541298302822980212, 0.99969881869620422012}, {-0.49994078159049999, 0.018406780438066742504, 0.99983058179582342202}, {-0.49997843010989198, 0.012271569568430943845, 0.99992470183914454092}, {-0.4999972547239889, 0.0061358966811368752475, 0.99998117528260114266} }; static double cubic_sin_tab_64[64][4] = { {-0.16665160959195860017, -3.1439201621645130254e-7 , 1.0000000016699997169, 0.0}, {-0.16655105447512043311, -0.012271686119497498362, 0.99969882373892657532, 0.024541228522912288032}, {-0.16635098527417152321, -0.024535635064244628261, 0.99879546435014124858, 0.049067674327418014256}, {-0.16604982072611688325, -0.036784838233487349800, 0.99729046820784566906, 0.073564563599667423530}, {-0.16564882965416437123, -0.049011877204065374509, 0.99518474153969493625, 0.098017140329560601995}, {-0.16514794850000807724, -0.061209396824370633276, 0.99247955281734764972, 0.12241067519921619850}, {-0.16454779102084266298, -0.073370039578521272850, 0.98917653148330446338, 0.14673047445536175166}, {-0.16384846667984334445, -0.085486488577710065157, 0.98527766720421387352, 0.17096188876030122637}, {-0.16305060278290401217, -0.097551438599713975150, 0.98078530846916726606, 0.19509032201612826785}, {-0.16215405596718466539, -0.10955764253797578650, 0.97570216143112453517, 0.21910124015686979723}, {-0.16116033454342690625, -0.12149783669701977682, 0.97003128779530935399, 0.24298017990326388995}, {-0.16006756728386026947, -0.13336490937258658073, 0.96377610397492461811, 0.26671275747489838632}, {-0.15888193141394279225, -0.14515153212705037066, 0.95694037676169067270, 0.29028467725446236764}, {-0.15759914551567566107, -0.15685076821154268834, 0.94952822473515011264, 0.31368174039889147666}, {-0.15622114388083957438, -0.16845553252581119679, 0.94154411246761350352, 0.33688985339222005069}, {-0.15474883749483062712, -0.17995883215199988352, 0.93299284927367789270, 0.35989503653498814878}, {-0.15318336563527430836, -0.19135372969292793571, 0.92387958606436140587, 0.38268343236508977173}, {-0.15152554851604880362, -0.20263336529592299896, 0.91420981235305944122, 0.40524131400498987091}, {-0.14977667237109762386, -0.21379093514123279567, 0.90398935279270228740, 0.42755509343028209432}, {-0.14793799002640258798, -0.22481971181798948439, 0.89322436376632921010, 0.44961132965460660005}, {-0.14600965868220014822, -0.23571308302600007902, 0.88192132988972115125, 0.47139673682599764857}, {-0.14399344829558194900, -0.24646446714563108585, 0.87008705956689362375, 0.49289819222978403688}, {-0.14189054996757525511, -0.25706738870859129476, 0.85772868132442670830, 0.51410274419322172660}, {-0.13970201494347613155, -0.26751546794474955116, 0.84485363943009572745, 0.53499761988709721067}, {-0.13742935697188643671, -0.27780240494152981627, 0.83146968928885417589, 0.55557023301960222475}, {-0.13507404124160745999, -0.28792200009166889022, 0.81758489287268058029, 0.57580819141784530075}, {-0.13263738195028000517, -0.29786816114249260260, 0.80320761388453479430, 0.59569930449243334347}, {-0.13012118752679763733, -0.30763488577775435252, 0.78834651259195520797, 0.61523159058062684549}, {-0.12752620168744736568, -0.31721631608642936843, 0.77301054092012287007, 0.63439328416364549822}, {-0.12485432406949912154, -0.32660666958828044559, 0.75720893661802829158, 0.65317284295377676409}, {-0.12210730536742860668, -0.33580028527447222259, 0.74095121795316289347, 0.67155895484701840063}, {-0.11928679384514952461, -0.34479162546482466599, 0.72424717796861482965, 0.68954054473706692462}, {-0.11639431578002697505, -0.35357527974946244421, 0.70710687858779616021, 0.70710678118654752440}, {-0.11343177866165924324, -0.36214595179185772273, 0.68954064445330294081, 0.72424708295146692095}, {-0.11040097777170137134, -0.37049847858840898335, 0.67155905680559502345, 0.74095112535495909118}, {-0.10730363044804372220, -0.37862783242464586427, 0.65317294710222598292, 0.75720884650648454758}, {-0.10414167952850476367, -0.38652911396463616801, 0.63439339043285135050, 0.77301045336273696082}, {-0.10091698516461515827, -0.39419756522409715811, 0.61523169890903981027, 0.78834642762660626201}, {-0.097631505036802177657, -0.40162856651708756399, 0.59569941481423302985, 0.80320753148064490981}, {-0.094287206578785407017, -0.40881764206549670019, 0.57580830366831988053, 0.81758481315158369651}, {-0.090886147413576696507, -0.41576046003071482012, 0.55557034712430166410, 0.83146961230254523708}, {-0.087430286582069051079, -0.42245284124461330001, 0.53499773578827216208, 0.84485356524970707326}, {-0.083921045637178364980, -0.42889077601563942030, 0.51410286196326742086, 0.85772861000027206992}, {-0.080363579481918942123, -0.43507028466139554452, 0.49289831127551831476, 0.87008699110871141868}, {-0.076756085706232290318, -0.44098777866072800227, 0.47139685746040081343, 0.88192126434835502970}, {-0.073101767004746272536, -0.44663965957697830327, 0.44961145197647844225, 0.89322430119551532034}, {-0.069403999520154846560, -0.45202248004202907440, 0.42755521719257758972, 0.90398929312344333160}, {-0.065664548106244347798, -0.45713301507033213321, 0.40524143910881847950, 0.91420975570353065466}, {-0.061885397022902887177, -0.46196819502305992383, 0.38268355876407735972, 0.92387953251128675612}, {-0.058069028045356612279, -0.46652510066515153374, 0.35989516414115779394, 0.93299279883473888771}, {-0.054217608891727711252, -0.47080099136720140669, 0.33688998214293293177, 0.94154406518302077842}, {-0.050333561332577079879, -0.47479328816882573018, 0.31368187021057865266, 0.94952818059303666721}, {-0.046419341583428021459, -0.47849958245318181869, 0.29028480801973481560, 0.95694033573220886493}, {-0.042477013134022598671, -0.48191765129371926998, 0.26671288914429451046, 0.96377606579543986669}, {-0.038509097070391658385, -0.48504543099544837077, 0.24298031239767965479, 0.97003125319454399261}, {-0.034517970715435871303, -0.48788103791870869156, 0.21910137339924899147, 0.97570213003852854447}, {-0.030506219045735680996, -0.49042275809571870545, 0.19509045589300881572, 0.98078528040323044912}, {-0.026475958757335002649, -0.49266907027677049454, 0.17096202321744254562, 0.98527764238894124477}, {-0.022429737855669339082, -0.49461861743954279917, 0.14673060941425391157, 0.98917650996478097345}, {-0.018370109749872527703, -0.49627022145930485091, 0.12241081055796419977, 0.99247953459870999816}, {-0.014299336722622612103, -0.49762289344803238064, 0.098017276022424078594, 0.99518472667219688624}, {-0.010219999567790616827, -0.49867581440512495987, 0.073564699535118045730, 0.99729045667869021614}, {-0.0061344577092866986712, -0.49942835328339682040, 0.049067810433226200719, 0.99879545620517239272}, {-0.0021883979154789650281, -0.49987481926961101693, 0.024541322457054169979, 0.99969881869620422012} }; static double cubic_sin_tab_256[256][4] = { {-0.16666572563443206967, -4.9120403950456756343e-9, 1.0000000000065228558, 0.}, {-0.16665945467704492954, -0.0030679589372131427699, 0.99998117530200427796, 0.0061358846491544753597}, {-0.16664692367672350603, -0.0061357973217967511049, 0.99992470187115639890, 0.012271538285719926080}, {-0.16662808718268607525, -0.0092034049823043725706, 0.99983058184101331052, 0.018406729905804820928}, {-0.16660297839662927130, -0.012270666127849471447, 0.99969881875454073290, 0.024541228522912288032}, {-0.16657160915794174215, -0.015337465199885125579, 0.99952941757247657623, 0.030674803176636625935}, {-0.16653398650962504791, -0.018403686678934878423, 0.99932238467255530940, 0.036807222941358832325}, {-0.16649009047222022993, -0.021469215297972201121, 0.99907772784971364181, 0.042938256934940823078}, {-0.16643989801695631962, -0.024533935842996503776, 0.99879545631544932156, 0.049067674327418014256}, {-0.16638343238545224498, -0.027597732754761416171, 0.99847558069686077746, 0.055195244349689939811}, {-0.16632070785340483268, -0.030660490583894831749, 0.99811811303693331277, 0.061320736302208577783}, {-0.16625176949771713122, -0.033722093670705533430, 0.99772306679359157461, 0.067443919563664057898}, {-0.16617652048243836387, -0.036782427559004646623, 0.99729045684133870878, 0.073564563599667423530}, {-0.16609503614302402542, -0.039841376437273914655, 0.99682029946679410261, 0.079682437971430121148}, {-0.16600727729535132440, -0.042898825482627991145, 0.99631261237164214024, 0.085797312344439890462}, {-0.16591331984356726599, -0.045954658991364927510, 0.99576741466911299641, 0.091908956497132728626}, {-0.16581308216291323032, -0.049008762608075444835, 0.99518472688665014153, 0.098017140329560601995}, {-0.16570658396549000845, -0.052061021217393779122, 0.99456457096192109123, 0.10412163387205457912}, {-0.16559386525260635607, -0.055111319609818884766, 0.99390697024299890946, 0.11022220729388305881}, {-0.16547491150146184530, -0.058159543096474918718, 0.99321194948841205884, 0.11631863091190476725}, {-0.16534972989335365845, -0.061205576891412880053, 0.99247953486526553314, 0.12241067519921619850}, {-0.16521832113397440044, -0.064249306345886316894, 0.99170975394860572736, 0.12849811079379317263}, {-0.16508069366791359526, -0.067290616836671708878, 0.99090263572020568331, 0.13458070850712618632}, {-0.16493684634602117311, -0.070329393911790508433, 0.99005821056768903886, 0.14065823933284923072}, {-0.16478677529799793619, -0.073365523238801199660, 0.98917651028330098390, 0.14673047445536175166}, {-0.16463055027069698302, -0.076398889986069212802, 0.98825756806176251956, 0.15279718525844342772}, {-0.16446809659478850531, -0.079429380606420026329, 0.98730141850172974972, 0.15885814333386144168}, {-0.16429944679187189119, -0.082456880788074166107, 0.98630809760136492067, 0.16491312048996992142}, {-0.16412460878575260278, -0.085481276534562715909, 0.98527764275861924409, 0.17096188876030122637}, {-0.16394359863767975784, -0.088502453901702025933, 0.98421009276941712788, 0.17700422041214875620}, {-0.16375641262291267931, -0.091520299229892758716, 0.98310548782654328417, 0.18303988795514095852}, {-0.16356305983191041470, -0.094534698882296355805, 0.98196386951772413450, 0.18906866414980621276}, {-0.16336353265928036259, -0.097545539489958830770, 0.98078528082442879875, 0.19509032201612826785}, {-0.16315787894810435690, -0.10055270736726231362, 0.97956976611935410923, 0.20110463484209191157}, {-0.16294607262484755923, -0.10355608957203339511, 0.97831737116636203676, 0.20711137619221854971}, {-0.16272813373082578761, -0.10655557293014637760, 0.97702814311726473311, 0.21311031991609137397}, {-0.16250407446109935958, -0.10955104448017290279, 0.97570213051071990546, 0.21910124015686979723}, {-0.16227389031419285088, -0.11254239154990978621, 0.97433938327051364996, 0.22508391135979283599}, {-0.16203759716061226998, -0.11552950145802777116, 0.97293995270321975100, 0.23105810828067111965}, {-0.16179520463441429060, -0.11851226173548075929, 0.97150389149659878927, 0.23702360599436720687}, {-0.16154671906433439065, -0.12149056010589568360, 0.97003125371757851249, 0.24298017990326388995}, {-0.16129215598043871426, -0.12446428438760448361, 0.96852209481006207718, 0.24892760574572016812}, {-0.16103151568781968743, -0.12743332269730942297, 0.96697647159314476358, 0.25486565960451457156}, {-0.16076481423007238646, -0.13039756320153707179, 0.96539444225858960431, 0.26079411791527551828}, {-0.16049205997343420027, -0.13335689431198892096, 0.96377606636892777076, 0.26671275747489838632}, {-0.16021326332681576201, -0.13631120461036681349, 0.96212140485509497818, 0.27262135544994898449}, {-0.15992843676111201646, -0.13926038285246247069, 0.96043052001413757793, 0.27851968938505310521}, {-0.15963758492797950228, -0.14220431805291810074, 0.95870347550698948699, 0.28440753721127184362}, {-0.15934072521539273711, -0.14514289932169648479, 0.95694033635582025446, 0.29028467725446236764}, {-0.15903786617294691159, -0.14807601604433485251, 0.95514116894185516798, 0.29615088824362382413}, {-0.15872901954335384980, -0.15100355778784994793, 0.95330604100272612494, 0.30200594931922806701}, {-0.15841419654776502207, -0.15392541433527482216, 0.95143502162996789684, 0.30784964004153489369}, {-0.15809340951225157810, -0.15684147567650775907, 0.94952818126639653668, 0.31368174039889147666}, {-0.15776667001973799151, -0.15975163202751503796, 0.94758559170348007171, 0.31950203081601567790}, {-0.15743399262153216006, -0.16265577380420643134, 0.94560732607858970833, 0.32531029216226293414}, {-0.15709538649717986154, -0.16555379169457829454, 0.94359345887234961077, 0.33110630575987640174}, {-0.15675086439792942279, -0.16844557658985822449, 0.94154406590572173859, 0.33688985339222005069}, {-0.15640044166099924378, -0.17133101959667945180, 0.93945922433716361926, 0.34266071731199439760}, {-0.15604413100369027143, -0.17421001208365396200, 0.93733901265978803547, 0.34841868024943456842}, {-0.15568194535575638288, -0.17708244566227107874, 0.93518351069837213046, 0.35416352542049038236}, {-0.15531389824707302322, -0.17994821218788989990, 0.93299279960634773542, 0.35989503653498814878}, {-0.15494000501924262087, -0.18280720375393303405, 0.93076696186273100491, 0.36561299780477387002}, {-0.15456027405844372166, -0.18565931276740425816, 0.92850608126912552042, 0.37131719395183754341}, {-0.15417472725224428606, -0.18850443178605673183, 0.92621024294631341833, 0.37700741021641825673}, {-0.15378339231255953452, -0.19134245358510701718, 0.92387953333114618158, 0.38268343236508977173}, {-0.15338624902114123377, -0.19417327159983548390, 0.92151404017395752395, 0.38834504669882629163}, {-0.15298333392635345699, -0.19699677907533276073, 0.91911385253395970150, 0.39399204006104810860}, {-0.15257464377857140353, -0.19981286985843024516, 0.91667906077708947315, 0.39962419984564682855}, {-0.15216022046759685246, -0.20262143770862808113, 0.91420975657155112185, 0.40524131400498987091}, {-0.15174007255260965883, -0.20542237694240720972, 0.91170603288533978727, 0.41084317105790394219}, {-0.15131421032490030866, -0.20821558215110686973, 0.90916798398230589663, 0.41642956009763718257}, {-0.15088265271316318125, -0.21100094814849584459, 0.90659570541852012884, 0.42200027079979968595}, {-0.15044541144798504185, -0.21377837010399200768, 0.90398929403887272887, 0.42755509343028209432}, {-0.15000250763106053782, -0.21654774341134124200, 0.90134884797322120249, 0.43309381885315196849}, {-0.14955395438955340228, -0.21930896383418209846, 0.89867446663291177030, 0.43861623853852763765}, {-0.14909976054709363211, -0.22206192747992748580, 0.89596625070699046355, 0.44412214457042923165}, {-0.14863996199220357429, -0.22480653054770196033, 0.89322430215802263687, 0.44961132965460660005}, {-0.14817457169057562857, -0.22754266974025078835, 0.89044872421887562020, 0.45508358712634382354}, {-0.14770363077218541225, -0.23027024185080158773, 0.88763962138819663810, 0.46053871095824002364}, {-0.14722724648353828272, -0.23298914324726549934, 0.88479709942471870644, 0.46597649576796617791}, {-0.14674514199154575014, -0.23569927445230232429, 0.88192126535440831306, 0.47139673682599764857}, {-0.14625754249722655402, -0.23840053140680670363, 0.87901222744616780829, 0.47679923006332213334}, {-0.14576443748093794285, -0.24109281270588449728, 0.87607009522435864987, 0.48218377207912274852}, {-0.14526584323818947125, -0.24377601700993599485, 0.87309497945865342738, 0.48755016014843595464}, {-0.14476177982077629912, -0.24645004328468296820, 0.87008699216044665725, 0.49289819222978403688}, {-0.14425226764835511701, -0.24911479083980759875, 0.86704624657872384631, 0.49822766697278185242}, {-0.14373732010236279648, -0.25177015940849180334, 0.86397285719598369133, 0.50353838372571755870}, {-0.14321696510748709324, -0.25441604893015886530, 0.86086693972338419819, 0.50883014254310703694}, {-0.14269122693936508413, -0.25705235974054444778, 0.85772861109684446482, 0.51410274419322172660}, {-0.14216010661621750227, -0.25967899277643398164, 0.85455798947313713558, 0.51935599016558958737}, {-0.14162363490584671411, -0.26229584903619174699, 0.85135519422410252179, 0.52458968267846890622}, {-0.14108183030454073664, -0.26490283001410371665, 0.84812034593321449217, 0.52980362468629466822}, {-0.14053471487873468022, -0.26749983754172394916, 0.84485356639064081758, 0.53499761988709721067}, {-0.13998230448648233079, -0.27008677389173923150, 0.84155497858890431699, 0.54017147272989288130}, {-0.13942462799951653950, -0.27266354158474704559, 0.83822470671776782151, 0.54532498842204642232}, {-0.13886170074912896853, -0.27523004366497442019, 0.83486287616022806515, 0.55045797293660480298}, {-0.13829354695492912534, -0.27778618347401360172, 0.83146961348722878190, 0.55557023301960222475}, {-0.13772018524584415032, -0.28033186480297091355, 0.82804504645326156165, 0.56066157619733602385}, {-0.13714163968690726390, -0.28286699178298529875, 0.82458930399127712287, 0.56573181078361319740}, {-0.13655792940399636845, -0.28539146899517420954, 0.82110251620809296332, 0.57078074588696728024}, {-0.13596907796694282468, -0.28790520137806908505, 0.81758481437925817833, 0.57580819141784530075}, {-0.13537510842530339645, -0.29040809428204875330, 0.81403633094423619896, 0.58081395809576454508}, {-0.13477603805000173929, -0.29290005352679533073, 0.81045719950155124985, 0.58579785745643886033}, {-0.13417189775006105602, -0.29538098520583091727, 0.80684755480326838451, 0.59075970185887422843}, {-0.13356270447212167356, -0.29785079597291452180, 0.80320753275061667884, 0.59569930449243334347}, {-0.13294848407986935971, -0.30030939281105133942, 0.79953727038829512630, 0.60061647938386892666}, {-0.13232925654766860600, -0.30275668318776256359, 0.79583690589968681028, 0.60551104140432551393}, {-0.13170504742412603122, -0.30519257494102286746, 0.79210657860136675260, 0.61038280627630945272}, {-0.13107588056748019423, -0.30761697635724796606, 0.78834642893804047626, 0.61523159058062684549}, {-0.13044177488093496875, -0.31002979620811045328, 0.78455659847733817548, 0.62005721176328917866}, {-0.12980277396915190102, -0.31243094345013047635, 0.78073722990373700450, 0.62485948814238637709}, {-0.12915887031402556808, -0.31482032800501107721, 0.77688846701510142513, 0.62963823891492702538}, {-0.12851010776633434576, -0.31719785971288249459, 0.77301045471468445131, 0.63439328416364549822}, {-0.12785650562369533169, -0.31956344911354185930, 0.76910333900758653723, 0.63912444486377574381}, {-0.12719809113610408286, -0.32191700711681634867, 0.76516726699443913440, 0.64383154288979146507}, {-0.12653488352657831471, -0.32425844516961195589, 0.76120238686626926235, 0.64851440102211244509}, {-0.12586691601733734757, -0.32658767503353776126, 0.75720884789836458009, 0.65317284295377676409}, {-0.12519420852872973159, -0.32890460906800083832, 0.75318680044534208409, 0.65780669329707865694}, {-0.12451678741924699872, -0.33120916003113994407, 0.74913639593498887658, 0.66241577759017176112}, {-0.12383467835063045741, -0.33350124115633196614, 0.74505778686274168780, 0.66699992230363750665}, {-0.12314790573103030071, -0.33578076616105175605, 0.74095112678595889754, 0.67155895484701840063}, {-0.12245649778896879800, -0.33804764919816165322, 0.73681657031801144318, 0.67609270357531596037}, {-0.12176048086860979475, -0.34030180491758694481, 0.73265427312260557725, 0.68060099779545305060}, {-0.12105987840140637132, -0.34254314848007121265, 0.72846439190794821209, 0.68508366777270038137}, {-0.12035471931018005653, -0.34477159547419781896, 0.72424708442063465449, 0.68954054473706692462}, {-0.11964502542856117984, -0.34698706204852722161, 0.72000250944002719079, 0.69397146088965400901}, {-0.11893082915448933766, -0.34918946473379863876, 0.71573082677183149930, 0.69837624940897285356}, {-0.11821215639018033784, -0.35137872062089823462, 0.71143219724251050418, 0.70275474445722530246}, {-0.11748904250399984781, -0.35355474720043192470, 0.70710678269282682954, 0.70710678118654752440}, {-0.11676149575598518180, -0.35571746274056779566, 0.70275474597267196404, 0.71143219574521644153}, {-0.11602955182303919264, -0.35786678573137010761, 0.69837625093355953038, 0.71573082528381865413}, {-0.11529324059824880205, -0.36000263522812383689, 0.69397146242329418787, 0.72000250796138162908}, {-0.11455258542505143156, -0.36212493086216202509, 0.68954054627978416457, 0.72424708295146692095}, {-0.11380762062799923710, -0.36423359266427571782, 0.68508366932435550377, 0.72846439044822519650}, {-0.11305836977773038708, -0.36632854129040280021, 0.68060099935601939928, 0.73265427167241283462}, {-0.11230486255751951235, -0.36840969785182698742, 0.67609270514472949362, 0.73681656887736987510}, {-0.11154712816109811542, -0.37047698398568577308, 0.67155895642519367638, 0.74095112535495909118}, {-0.11078519070469584798, -0.37253032190507800826, 0.66699992389060030395, 0.74505778544146596242}, {-0.11001908447757785064, -0.37456963424556152582, 0.66241577918580609123, 0.74913639452345932547}, {-0.10924883720192321703, -0.37659484423966215554, 0.65780669490129643953, 0.75318679904361248249}, {-0.10847447676047192327, -0.37860587565083014746, 0.65317284456651788953, 0.75720884650648454758}, {-0.10769603120630681109, -0.38060265277614435589, 0.64851440264334420198, 0.76120238548426181404}, {-0.10691352871118187436, -0.38258510044970751057, 0.64383154451950942297, 0.76516726562245892590}, {-0.10612700327506669960, -0.38455314398698761117, 0.63912444650186074761, 0.76910333764557963935}, {-0.10533648323643454383, -0.38650670930529799176, 0.63439328581001013056, 0.77301045336273696082}, {-0.10454207994434302394, -0.38844572201800720377, 0.62963824056742561188, 0.77688846567323245005}, {-0.10374365526991895450, -0.39037011084424645190, 0.62485948980311169271, 0.78073722857209447831}, {-0.10294132708448351643, -0.39227980243206899411, 0.62005721343211866077, 0.78455659715557523303}, {-0.10213512299922117183, -0.39417472490928395692, 0.61523159225750321826, 0.78834642762660626201}, {-0.10132508249562230028, -0.39605480683957645768, 0.61038280796094476553, 0.79210657730021235179}, {-0.10051121621297581973, -0.39791997764241712249, 0.60551104309693248949, 0.79583690460888353627}, {-0.099693566599000973902, -0.39977016697420249355, 0.60061648108436217391, 0.79953726910790503351}, {-0.098872162753306751456, -0.40160530519359728282, 0.59569930620076958874, 0.80320753148064490981}, {-0.098047039188220653741, -0.40342532317194548122, 0.59075970357491951559, 0.80684755354379927221}, {-0.097218220600410224614, -0.40523015245184592531, 0.58579785918021951468, 0.81045719825259479173}, {-0.096385744530024781907, -0.40701972501762101479, 0.58081395982714706271, 0.81403632970594836166}, {-0.095549649108967151211, -0.40879397342323987838, 0.57580819315652424303, 0.81758481315158369651}, {-0.094709943714853254362, -0.41055283109574498509, 0.57078074763319458160, 0.82110251499110467906}, {-0.093866647433491594103, -0.41229623194352504155, 0.56573181253795657657, 0.82458930278502526448}, {-0.093019845215809480535, -0.41402410978336694061, 0.56066157795902086353, 0.82804504525775575207}, {-0.092169538475339299360, -0.41573639987385598356, 0.55557023478862221330, 0.83146961230254523708}, {-0.091315765076693268802, -0.41743303768827106911, 0.55045797471280568569, 0.83486287498638005631}, {-0.090458561717047298020, -0.41911395930250654911, 0.54532499020515885448, 0.83822470555483804319}, {-0.089597940112681680452, -0.42077910164147416133, 0.54017147452016588953, 0.84155497743689840962}, {-0.088733949472498200766, -0.42242840184127063735, 0.53499762168435550846, 0.84485356524970707326}, {-0.087866614622486666118, -0.42406179788560662815, 0.52980362649055701291, 0.84812034480329725127}, {-0.086995974263058582449, -0.42567922821609442180, 0.52458968448960129387, 0.85135519310526514224}, {-0.086122058451934179219, -0.42728063196528724554, 0.51935599198352643093, 0.85455798836540052079}, {-0.085244898839080409454, -0.42886594885406947625, 0.51410274601792875111, 0.85772861000027206992}, {-0.084364530221025720421, -0.43043511917800812623, 0.50883014437450507659, 0.86086693863776727935}, {-0.083479968015574695551, -0.43198809244053470044, 0.50353838557806751713, 0.86397285612158673791}, {-0.082593314874739877718, -0.43352479273130116622, 0.49822766883123245864, 0.86704624551569265147}, {-0.081703520769652554368, -0.43504517131468427528, 0.49289819409465515821, 0.87008699110871141868}, {-0.080810657155874031200, -0.43654917063952195722, 0.48755016201957550969, 0.87309497841829009865}, {-0.079914743733371825111, -0.43803673419470574396, 0.48218377395655163232, 0.87607009419540660710}, {-0.079015854399774332953, -0.43950780564643795851, 0.47679923194656148202, 0.87901222642863347783}, {-0.078113856130626543238, -0.44096233097154959470, 0.47139673871664205406, 0.88192126434835502970}, {-0.077209048282471703749, -0.44240025324208305404, 0.46597649766431222016, 0.88479709843093778013}, {-0.076301306758337889401, -0.44382151961183057115, 0.46053871286054928124, 0.88763962040285394778}, {-0.075390697604763668359, -0.44522607631081017963, 0.45508358903448157251, 0.89044872324475788996}, {-0.074477243218847041163, -0.44661387055530789888, 0.44961133156858586817, 0.89322430119551532034}, {-0.073561015151504801987, -0.44798484979236322219, 0.44412214648980090070, 0.89596624975618515591}, {-0.072641987264879687580, -0.44933896290018619309, 0.43861624046359564478, 0.89867446569395384303}, {-0.071720215250789086520, -0.45067615872509807062, 0.43309382078395820255, 0.90134884704602201459}, {-0.070795754621287722382, -0.45199638675260635071, 0.42755509536660959436, 0.90398929312344333160}, {-0.069868667348120394181, -0.45329959705516810782, 0.42200027274109372466, 0.90659570451491536534}, {-0.068938834195498099859, -0.45458574182557524983, 0.41642956204525806264, 0.90916798309052237656}, {-0.068006479766788506061, -0.45585477109395504002, 0.41084317301085611883, 0.91170603200542985139}, {-0.067071574547288291611, -0.45710663760934583132, 0.40524131596308008844, 0.91420975570353065466}, {-0.066134135420557730976, -0.45834129438921339623, 0.39962420180890960688, 0.91667905992104266313}, {-0.065194475309483889337, -0.45955869268375647978, 0.39399204202606838958, 0.91911385169005774391}, {-0.064252087523050687958, -0.46075879108229139031, 0.38834504866892362869, 0.92151403934204194346}, {-0.063307309769702468376, -0.46194154193537388891, 0.38268343433982852900, 0.92387953251128675612}, {-0.062360125710072842765, -0.46310690113676616853, 0.37700741219600781162, 0.92621024213831134200}, {-0.061410589113343426477, -0.46425482466350874527, 0.37131719593626169793, 0.92850608047321556595}, {-0.060458747962839515650, -0.46538526919712556229, 0.36561299979386445209, 0.93076696107898373195}, {-0.059504627614746915937, -0.46649819226260108977, 0.35989503852870736425, 0.93299279883473888771}, {-0.058548264381588779718, -0.46759355195572030336, 0.35416352741879476902, 0.93518350993894757764}, {-0.057589667315081863541, -0.46867130725687615387, 0.34841868225261597193, 0.93733901191257492322}, {-0.056628928522305199951, -0.46973141713196482403, 0.34266071931964796231, 0.93945922360218991198}, {-0.055666061241782842610, -0.47077384185566718214, 0.33688985540422611126, 0.94154406518302077842}, {-0.054701091374054734422, -0.47179854226573037433, 0.33110630777624358634, 0.94359345816196036150}, {-0.053734068187108676617, -0.47280547967717980083, 0.32531029418283894879, 0.94560732538052132573}, {-0.052765086001437993326, -0.47379461570676883858, 0.31950203283992848195, 0.94758559101774113464}, {-0.051794014850815152160, -0.47476591447248428265, 0.31368174242733724824, 0.94952818059303666721}, {-0.050821032100085130987, -0.47571933825632844102, 0.30784964207395978023, 0.95143502096900836956}, {-0.049846142176166771238, -0.47665485142529822230, 0.30200595135547846779, 0.95330604035419383692}, {-0.048869375111197640340, -0.47757241881227998734, 0.29615089028362876115, 0.95514116830577072150}, {-0.047890763279919633153, -0.47847200590730179006, 0.29028467929820547926, 0.95694033573220886493}, {-0.046910319093662788626, -0.47935357904080011782, 0.28440753925904013688, 0.95870347489587155539}, {-0.045928138628952004316, -0.48021710453922734250, 0.27851969143639837471, 0.96043051941556581121}, {-0.044944228719611613292, -0.48106255013734612651, 0.27262135750479745544, 0.96212140426904159543}, {-0.043958624678747258535, -0.48188988401872003698, 0.26671275953319758719, 0.96377606579543986669}, {-0.042971419213025403042, -0.48269907458098028654, 0.26079411997628217008, 0.96539444169768937455}, {-0.041982514961014505880, -0.48349009245638592832, 0.25486566166915651088, 0.96697647104485210910}, {-0.040992059962834294660, -0.48426290695932598914, 0.24892760781354866375, 0.96852209427441731623}, {-0.040000066490319228382, -0.48501748919792182223, 0.24298018197414081855, 0.97003125319454399261}, {-0.039006562412052096557, -0.48575381083992826123, 0.23702360806827204342, 0.97150389098625177554}, {-0.038011628753353924130, -0.48647184380728621309, 0.23105811035704134415, 0.97293995220556014546}, {-0.037015202574764408910, -0.48717156188575493078, 0.22508391343931301569, 0.97433938278557586051}, {-0.036017401791944947794, -0.48785293807523878692, 0.21910124223922562071, 0.97570213003852854447}, {-0.035018256336655055785, -0.48851594678464777184, 0.21311032200106348096, 0.97702814265775435149}, {-0.034017789089849466453, -0.48916056317227383212, 0.20711137827977016914, 0.97831737071962763311}, {-0.033016040549583284011, -0.48978676294562967972, 0.20110463693215136598, 0.97956976568544053444}, {-0.032013080941676670317, -0.49039452226327041917, 0.19509032410821945581, 0.98078528040323044912}, {-0.031008853595254360171, -0.49098381901408705151, 0.18906866624462651586, 0.98196386910955526408}, {-0.030003489222391174524, -0.49155463025322799018, 0.18303989005223340196, 0.98310548743121632719}, {-0.028996998154649959214, -0.49210693471454390017, 0.17700422251139812258, 0.98421009238692907320}, {-0.027989384114125122845, -0.49264071188294402869, 0.17096189086201673466, 0.98527764238894124477}, {-0.026980797914984148435, -0.49315594074083551137, 0.16491312259305818702, 0.98630809724459864786}, {-0.025970878879336846712, -0.49365260514349418915, 0.15885814544218232602, 0.98730141815785838241}, {-0.024960260273055894725, -0.49413068153407266619, 0.15279718736846067278, 0.98825756773074949141}, {-0.023948670906165716332, -0.49459015443695086888, 0.14673047656738146029, 0.98917650996478097345}, {-0.022936231587143501280, -0.49503100587812885080, 0.14065824144614950789, 0.99005821026229710551}, {-0.021922903372273842440, -0.49545321988867489095, 0.13458071062194249713, 0.99090263542778002511}, {-0.020908728340591865791, -0.49585678054042698722, 0.12849811291031218853, 0.99170975366909952287}, {-0.019894380695768347235, -0.49624166705552399118, 0.12241067730730723637, 0.99247953459870999816}, {-0.018878660970427910689, -0.49660787585113145304, 0.11631863302177041436, 0.99321194923479453311}, {-0.017862231006614290408, -0.49695538763543875104, 0.11022220940543043610, 0.99390697000235604155}, {-0.016845146398269828759, -0.49728418914728528757, 0.10412163598475369415, 0.99456457073425545212}, {-0.015827376625195381960, -0.49759426871262162030, 0.098017142444617342814, 0.99518472667219688624}, {-0.014809046400849407014, -0.49788561377181029606, 0.091908958613573384870, 0.99576741446765979399}, {-0.013778859974465788058, -0.49815831755577924782, 0.085797314673929880277, 0.99631261218277801263}, {-0.012759268262655405491, -0.49841216364937253384, 0.079682440304525175554, 0.99682029929116571497}, {-0.011739013240110094482, -0.49864724632202555830, 0.073564565938690282113, 0.99729045667869021614}, {-0.010719817710404780986, -0.49886354277034460391, 0.067443921888741356976, 0.99772306664419160985}, {-0.0096992248340275965248, -0.49906106551999206456, 0.061320738626347892078, 0.99811811290014920713}, {-0.0086810085428160545920, -0.49923977083240596540, 0.055195246603793126050, 0.99847558057329475221}, {-0.0076638421797969110956, -0.49939966892261478412, 0.049067676494960277414, 0.99879545620517239272}, {-0.0066426247904078882198, -0.49954080120243336148, 0.042938259096948575480, 0.99907772775264538289}, {-0.0056203064684654949919, -0.49966313299697250277, 0.036807225108321925903, 0.99932238458834950090}, {-0.0045976844558547358598, -0.49976665590338511353, 0.030674805364312552045, 0.99952941750109316308}, {-0.0035482338561372624513, -0.49985161329713780080, 0.024541231264206106957, 0.99969881869620422012}, {-0.0025316221500421794055, -0.49991743445294577929, 0.018406732496267015751, 0.99983058179582342202}, {-0.0015205405575081816558, -0.49996438894933573085, 0.012271540660621000787, 0.99992470183914454092}, {-0.00054835953021167470838, -0.49999216514922231098, 0.0061358860973883673031, 0.99998117528260114266} }; static double pi[4] = { 1.570796326794896619231, 3.141592653589793238462, 4.712388980384689857693, 6.283185307179586477925 }; double quadratic_sin_256( double x ) { /* All of this just gets an arbitrary float down to the interval [0, pi/2]. */ if ( x < 0 ) { return -quadratic_sin_256( -x ); } if ( x >= pi[3] ) { x = x - pi[3] * floor( x/pi[3] ); } if ( x >= pi[2] ) { return -quadratic_sin_256( pi[3] - x ); } else if ( x >= pi[1] ) { return -quadratic_sin_256( x - pi[1] ); } else if ( x >= pi[0] ) { if ( x == pi[0] ) { return 1.0; } x = pi[1] - x; } /* Now, just find the previous point and the step into the interval. */ double nt = floor( x/pi[0]*256.0 ); x = x - pi[0]*nt/256.0; int n = (int) nt; /* Apply Horner's rule. */ return (quadratic_sin_tab_256[n][0]*x + quadratic_sin_tab_256[n][1])*x + quadratic_sin_tab_256[n][2]; } double quadratic_sin_64( double x ) { char negative = 0; if ( x < 0 ) { return -quadratic_sin_64( -x ); } if ( x >= pi[3] ) { x = x - pi[3] * floor( x/pi[3] ); } if ( x >= pi[2] ) { return -quadratic_sin_64( pi[3] - x ); } else if ( x >= pi[1] ) { return -quadratic_sin_64( x - pi[1] ); } else if ( x >= pi[0] ) { if ( x == pi[0] ) { return 1.0; } x = pi[1] - x; } /* Now, just find the previous point and the step into the interval. */ double nt = floor( x/pi[0] * 64.0 ); x = x - pi[0]*nt/64.0; int n = (int) nt; /* Apply Horner's rule. */ return (quadratic_sin_tab_64[n][0]*x + quadratic_sin_tab_64[n][1])*x + quadratic_sin_tab_64[n][2]; } double cubic_sin_256( double x ) { /* All of this just gets an arbitrary float down to the interval [0, pi/2]. */ if ( x < 0 ) { return -cubic_sin_256( -x ); } if ( x >= pi[3] ) { x = x - pi[3] * floor( x/pi[3] ); } if ( x >= pi[2] ) { return -cubic_sin_256( pi[3] - x ); } else if ( x >= pi[1] ) { return -cubic_sin_256( x - pi[1] ); } else if ( x >= pi[0] ) { if ( x == pi[0] ) { return 1.0; } x = pi[1] - x; } /* Now, just find the previous point and the step into the interval. */ double nt = floor( x/pi[0]*256.0 ); x = x - pi[0]*nt/256.0; int n = (int) nt; /* Apply Horner's rule. */ return ( (cubic_sin_tab_256[n][0]*x + cubic_sin_tab_256[n][1])*x + cubic_sin_tab_256[n][2] )*x + cubic_sin_tab_256[n][3]; } double cubic_sin_64( double x ) { char negative = 0; if ( x < 0 ) { return -cubic_sin_64( -x ); } if ( x >= pi[3] ) { x = x - pi[3] * floor( x/pi[3] ); } if ( x >= pi[2] ) { return -cubic_sin_64( pi[3] - x ); } else if ( x >= pi[1] ) { return -cubic_sin_64( x - pi[1] ); } else if ( x >= pi[0] ) { if ( x == pi[0] ) { return 1.0; } x = pi[1] - x; } /* Now, just find the previous point and the step into the interval. */ double nt = floor( x/pi[0] * 64.0 ); x = x - pi[0]*nt/64.0; int n = (int) nt; /* Apply Horner's rule. */ return ( (cubic_sin_tab_64[n][0]*x + cubic_sin_tab_64[n][1])*x + cubic_sin_tab_64[n][2] )*x + cubic_sin_tab_64[n][3]; } double linear_chebyshev_sin_256( double x ) { /* All of this just gets an arbitrary float down to the interval [0, pi/2]. */ if ( x < 0 ) { return -linear_chebyshev_sin_256( -x ); } if ( x >= pi[3] ) { x = x - pi[3] * floor( x/pi[3] ); } if ( x >= pi[2] ) { return -linear_chebyshev_sin_256( pi[3] - x ); } else if ( x >= pi[1] ) { return -linear_chebyshev_sin_256( x - pi[1] ); } else if ( x >= pi[0] ) { if ( x == pi[0] ) { return 1.0; } x = pi[1] - x; } /* Now, just find the previous point and the step into the interval. */ double nt = floor( x/pi[0]*256.0 ); x = x - pi[0]*nt/256.0; int n = (int) nt; /* Apply Horner's rule. */ return linear_chebyshev_sin_tab_256[n][0]*x + linear_chebyshev_sin_tab_256[n][1]; } double linear_optimized_sin_256( double x ) { /* All of this just gets an arbitrary float down to the interval [0, pi/2]. */ if ( x < 0 ) { return -linear_optimized_sin_256( -x ); } if ( x >= pi[3] ) { x = x - pi[3] * floor( x/pi[3] ); } if ( x >= pi[2] ) { return -linear_optimized_sin_256( pi[3] - x ); } else if ( x >= pi[1] ) { return -linear_optimized_sin_256( x - pi[1] ); } else if ( x >= pi[0] ) { if ( x == pi[0] ) { return 1.0; } x = pi[1] - x; } /* Now, just find the previous point and the step into the interval. */ double nt = floor( x/pi[0]*256.0 ); x = x - pi[0]*nt/256.0; int n = (int) nt; /* Apply Horner's rule. */ return linear_optimized_sin_tab_256[n][0]*x + linear_optimized_sin_tab_256[n][1]; }