// Special functions -*- C++ -*- // Copyright (C) 2006-2016 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 3, or (at your option) // any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // Under Section 7 of GPL version 3, you are granted additional // permissions described in the GCC Runtime Library Exception, version // 3.1, as published by the Free Software Foundation. // You should have received a copy of the GNU General Public License and // a copy of the GCC Runtime Library Exception along with this program; // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see // . /** @file bits/sf_gamma.tcc * This is an internal header file, included by other library headers. * Do not attempt to use it directly. @headername{cmath} */ // // ISO C++ 14882 TR29124: Mathematical Special Functions // // Written by Edward Smith-Rowland. // // References: // (1) Handbook of Mathematical Functions, // ed. Milton Abramowitz and Irene A. Stegun, // Dover Publications, // Section 6, pp. 253-266 // (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl // (3) Numerical Recipes in C, by W. H. Press, S. A. Teukolsky, // W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992), // 2nd ed, pp. 213-216 // (4) Gamma, Exploring Euler's Constant, Julian Havil, // Princeton, 2003. #ifndef _GLIBCXX_BITS_SF_GAMMA_TCC #define _GLIBCXX_BITS_SF_GAMMA_TCC 1 #pragma GCC system_header #include #include namespace std _GLIBCXX_VISIBILITY(default) { // Implementation-space details. namespace __detail { _GLIBCXX_BEGIN_NAMESPACE_VERSION template struct _Factorial_table { int __n; _Tp __factorial; _Tp __log_factorial; }; template constexpr std::size_t _S_num_factorials = 0; template<> constexpr std::size_t _S_num_factorials = 35; template<> constexpr std::size_t _S_num_factorials = 171; template<> constexpr std::size_t _S_num_factorials = 171; #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) template<> constexpr std::size_t _S_num_factorials<__float128> = 171; #endif constexpr _Factorial_table _S_factorial_table[171] { { 0, 1.0L, 0.0L}, { 1, 1.0L, 0.0L}, { 2, 2.0L, 6.931471805599453094172321214581766e-01L}, { 3, 6.0L, 1.791759469228055000812477358380702e+00L}, { 4, 24.0L, 3.178053830347945619646941601297055e+00L}, { 5, 120.0L, 4.787491742782045994247700934523243e+00L}, { 6, 720.0L, 6.579251212010100995060178292903945e+00L}, { 7, 5040.0L, 8.525161361065414300165531036347125e+00L}, { 8, 40320.0L, 1.060460290274525022841722740072165e+01L}, { 9, 362880.0L, 1.280182748008146961120771787456671e+01L}, { 10, 3628800.0L, 1.510441257307551529522570932925107e+01L}, { 11, 39916800.0L, 1.750230784587388583928765290721620e+01L}, { 12, 479001600.0L, 1.998721449566188614951736238705508e+01L}, { 13, 6227020800.0L, 2.255216385312342288557084982862040e+01L}, { 14, 87178291200.0L, 2.519122118273868150009343469352175e+01L}, { 15, 1307674368000.0L, 2.789927138384089156608943926367047e+01L}, { 16, 20922789888000.0L, 3.067186010608067280375836774950317e+01L}, { 17, 355687428096000.0L, 3.350507345013688888400790236737630e+01L}, { 18, 6402373705728000.0L, 3.639544520803305357621562496267953e+01L}, { 19, 121645100408832000.0L, 3.933988418719949403622465239456738e+01L}, { 20, 2432902008176640000.0L, 4.233561646075348502965987597070992e+01L}, { 21, 51090942171709440000.0L, 4.538013889847690802616047395107563e+01L}, { 22, 1124000727777607680000.0L, 4.847118135183522387963964965049893e+01L}, { 23, 25852016738884976640000.0L, 5.160667556776437357044640248230913e+01L}, { 24, 620448401733239439360000.0L, 5.478472939811231919009334408360618e+01L}, { 25, 15511210043330985984000000.0L, 5.800360522298051993929486275005856e+01L}, { 26, 403291461126605635584000000.0L, 6.126170176100200198476558231308206e+01L}, { 27, 10888869450418352160768000000.0L, 6.455753862700633105895131802384963e+01L}, { 28, 304888344611713860501504000000.0L, 6.788974313718153498289113501020917e+01L}, { 29, 8841761993739701954543616000000.0L, 7.125703896716800901007440704257107e+01L}, { 30, 265252859812191058636308480000000.0L, 7.465823634883016438548764373417796e+01L}, { 31, 8222838654177922817725562880000000.0L, 7.809222355331531063141680805872032e+01L}, { 32, 263130836933693530167218012160000000.0L, 8.155795945611503717850296866601120e+01L}, { 33, 8683317618811886495518194401280000000.0L, 8.505446701758151741396015748089886e+01L}, { 34, 2.952327990396041408476186096435200e+38L, 8.858082754219767880362692422023016e+01L}, { 35, 1.033314796638614492966665133752320e+40L, 9.213617560368709248333303629689953e+01L}, { 36, 3.719933267899012174679994481508352e+41L, 9.571969454214320248495799101366093e+01L}, { 37, 1.376375309122634504631597958158090e+43L, 9.933061245478742692932608668469238e+01L}, { 38, 5.230226174666011117600072241000743e+44L, 1.029681986145138126987523462380384e+02L}, { 39, 2.039788208119744335864028173990290e+46L, 1.066317602606434591262010789165263e+02L}, { 40, 8.159152832478977343456112695961160e+47L, 1.103206397147573954290535346141270e+02L}, { 41, 3.345252661316380710817006205344076e+49L, 1.140342117814617032329202979871644e+02L}, { 42, 1.405006117752879898543142606244512e+51L, 1.177718813997450715388381280889883e+02L}, { 43, 6.041526306337383563735513206851401e+52L, 1.215330815154386339623109706023341e+02L}, { 44, 2.658271574788448768043625811014616e+54L, 1.253172711493568951252073784232156e+02L}, { 45, 1.196222208654801945619631614956577e+56L, 1.291239336391272148825986282302868e+02L}, { 46, 5.502622159812088949850305428800256e+57L, 1.329525750356163098828226131835552e+02L}, { 47, 2.586232415111681806429643551536120e+59L, 1.368027226373263684696435638533274e+02L}, { 48, 1.241391559253607267086228904737338e+61L, 1.406739236482342593987077375760826e+02L}, { 49, 6.082818640342675608722521633212954e+62L, 1.445657439463448860089184430629690e+02L}, { 50, 3.041409320171337804361260816606477e+64L, 1.484777669517730320675371938508795e+02L}, { 51, 1.551118753287382280224243016469303e+66L, 1.524095925844973578391819737056752e+02L}, { 52, 8.065817517094387857166063685640377e+67L, 1.563608363030787851940699253901568e+02L}, { 53, 4.274883284060025564298013753389399e+69L, 1.603311282166309070282143945291859e+02L}, { 54, 2.308436973392413804720927426830276e+71L, 1.643201122631951814118173623614117e+02L}, { 55, 1.269640335365827592596510084756652e+73L, 1.683274454484276523304800652726030e+02L}, { 56, 7.109985878048634518540456474637249e+74L, 1.723527971391628015638371143804207e+02L}, { 57, 4.052691950487721675568060190543232e+76L, 1.763958484069973517152413870492311e+02L}, { 58, 2.350561331282878571829474910515074e+78L, 1.804562914175437710518418912030512e+02L}, { 59, 1.386831185456898357379390197203894e+80L, 1.845338288614494905024579415767709e+02L}, { 60, 8.320987112741390144276341183223363e+81L, 1.886281734236715911872884103898359e+02L}, { 61, 5.075802138772247988008568121766251e+83L, 1.927390472878449024360397994932615e+02L}, { 62, 3.146997326038793752565312235495076e+85L, 1.968661816728899939913861959392621e+02L}, { 63, 1.982608315404440064116146708361898e+87L, 2.010093163992815266792820391565503e+02L}, { 64, 1.268869321858841641034333893351615e+89L, 2.051681994826411985357854318852994e+02L}, { 65, 8.247650592082470666723170306785496e+90L, 2.093425867525368356464396786600909e+02L}, { 66, 5.443449390774430640037292402478427e+92L, 2.135322414945632611913140995964367e+02L}, { 67, 3.647111091818868528824985909660546e+94L, 2.177369341139542272509841715928004e+02L}, { 68, 2.480035542436830599600990418569171e+96L, 2.219564418191303339500681704535899e+02L}, { 69, 1.711224524281413113724683388812728e+98L, 2.261905483237275933322701685223226e+02L}, { 70, 1.197857166996989179607278372168910e+100L, 2.304390435657769523213935127204502e+02L}, { 71, 8.504785885678623175211676442399260e+101L, 2.347017234428182677427229672529632e+02L}, { 72, 6.123445837688608686152407038527467e+103L, 2.389783895618343230537651540911828e+02L}, { 73, 4.470115461512684340891257138125051e+105L, 2.432688490029827141828572629486213e+02L}, { 74, 3.307885441519386412259530282212537e+107L, 2.475729140961868839366425907411109e+02L}, { 75, 2.480914081139539809194647711659403e+109L, 2.518904022097231943772393546444858e+02L}, { 76, 1.885494701666050254987932260861146e+111L, 2.562211355500095254560828463192901e+02L}, { 77, 1.451830920282858696340707840863083e+113L, 2.605649409718632093052501426406984e+02L}, { 78, 1.132428117820629783145752115873204e+115L, 2.649216497985528010421161074406444e+02L}, { 79, 8.946182130782975286851441715398315e+116L, 2.692910976510198225362890529821258e+02L}, { 80, 7.156945704626380229481153372318652e+118L, 2.736731242856937041485587408011847e+02L}, { 81, 5.797126020747367985879734231578109e+120L, 2.780675734403661429141397217488748e+02L}, { 82, 4.753643337012841748421382069894049e+122L, 2.824742926876303960274237172433704e+02L}, { 83, 3.945523969720658651189747118012061e+124L, 2.868931332954269939508991894666617e+02L}, { 84, 3.314240134565353266999387579130131e+126L, 2.913239500942703075662342516899438e+02L}, { 85, 2.817104114380550276949479442260611e+128L, 2.957666013507606240210845456410431e+02L}, { 86, 2.422709538367273238176552320344126e+130L, 3.002209486470141317539746202758472e+02L}, { 87, 2.107757298379527717213600518699389e+132L, 3.046868567656687154725531375451316e+02L}, { 88, 1.854826422573984391147968456455462e+134L, 3.091641935801469219448667774874712e+02L}, { 89, 1.650795516090846108121691926245361e+136L, 3.136528299498790617831845930281411e+02L}, { 90, 1.485715964481761497309522733620825e+138L, 3.181526396202093268499930749566705e+02L}, { 91, 1.352001527678402962551665687594951e+140L, 3.226634991267261768911519151416790e+02L}, { 92, 1.243841405464130725547532432587355e+142L, 3.271852877037752172007931322164055e+02L}, { 93, 1.156772507081641574759205162306240e+144L, 3.317178871969284731381175417778704e+02L}, { 94, 1.087366156656743080273652852567865e+146L, 3.362611819791984770343557245691008e+02L}, { 95, 1.032997848823905926259970209939472e+148L, 3.408150588707990178689655113342148e+02L}, { 96, 9.916779348709496892095714015418933e+149L, 3.453794070622668541074469171784282e+02L}, { 97, 9.619275968248211985332842594956366e+151L, 3.499541180407702369295636388001322e+02L}, { 98, 9.426890448883247745626185743057238e+153L, 3.545390855194408088491915764084767e+02L}, { 99, 9.332621544394415268169923885626665e+155L, 3.591342053695753987760440104602869e+02L}, { 100, 9.332621544394415268169923885626666e+157L, 3.637393755555634901440799933696556e+02L}, { 101, 9.425947759838359420851623124482932e+159L, 3.683544960724047495949641916365686e+02L}, { 102, 9.614466715035126609268655586972591e+161L, 3.729794688856890206760262036128225e+02L}, { 103, 9.902900716486180407546715254581770e+163L, 3.776141978739186564467948059278759e+02L}, { 104, 1.029901674514562762384858386476504e+166L, 3.822585887730600291110999897338157e+02L}, { 105, 1.081396758240290900504101305800329e+168L, 3.869125491232175524822013470474076e+02L}, { 106, 1.146280563734708354534347384148349e+170L, 3.915759882173296196257630483078949e+02L}, { 107, 1.226520203196137939351751701038734e+172L, 3.962488170517915257990674471249182e+02L}, { 108, 1.324641819451828974499891837121832e+174L, 4.009309482789157454920876470786021e+02L}, { 109, 1.443859583202493582204882102462797e+176L, 4.056222961611448891924649635308113e+02L}, { 110, 1.588245541522742940425370312709077e+178L, 4.103227765269373054205448985634608e+02L}, { 111, 1.762952551090244663872161047107075e+180L, 4.150323067282496395563082394714147e+02L}, { 112, 1.974506857221074023536820372759924e+182L, 4.197508055995447340990825207006906e+02L}, { 113, 2.231192748659813646596607021218714e+184L, 4.244781934182570746676646521943066e+02L}, { 114, 2.543559733472187557120132004189334e+186L, 4.292143918666515701284861569845752e+02L}, { 115, 2.925093693493015690688151804817735e+188L, 4.339593239950148201938936691496116e+02L}, { 116, 3.393108684451898201198256093588572e+190L, 4.387129141861211848399114054248899e+02L}, { 117, 3.969937160808720895401959629498629e+192L, 4.434750881209189409587553833403002e+02L}, { 118, 4.684525849754290656574312362808383e+194L, 4.482457727453846057187886658354781e+02L}, { 119, 5.574585761207605881323431711741975e+196L, 4.530248962384961351041435531967944e+02L}, { 120, 6.689502913449127057588118054090371e+198L, 4.578123879812781810983912541313177e+02L}, { 121, 8.094298525273443739681622845449348e+200L, 4.626081785268749221865151412872479e+02L}, { 122, 9.875044200833601362411579871448205e+202L, 4.674121995716081787446837625121317e+02L}, { 123, 1.214630436702532967576624324188129e+205L, 4.722243839269805962399457711220916e+02L}, { 124, 1.506141741511140879795014161993280e+207L, 4.770446654925856331047093996895503e+02L}, { 125, 1.882677176888926099743767702491600e+209L, 4.818729792298879342285116776892289e+02L}, { 126, 2.372173242880046885677147305139416e+211L, 4.867092611368394122258247530279753e+02L}, { 127, 3.012660018457659544809977077527059e+213L, 4.915534482232980034988721938356916e+02L}, { 128, 3.856204823625804217356770659234635e+215L, 4.964054784872176206647928186858988e+02L}, { 129, 4.974504222477287440390234150412680e+217L, 5.012652908915792927796609064361672e+02L}, { 130, 6.466855489220473672507304395536484e+219L, 5.061328253420348751997323853324169e+02L}, { 131, 8.471580690878820510984568758152794e+221L, 5.110080226652360267438818093435864e+02L}, { 132, 1.118248651196004307449963076076169e+224L, 5.158908245878223975981734624013904e+02L}, { 133, 1.487270706090685728908450891181305e+226L, 5.207811737160441513632878425767215e+02L}, { 134, 1.992942746161518876737324194182948e+228L, 5.256790135159950627323751466945434e+02L}, { 135, 2.690472707318050483595387662146980e+230L, 5.305842882944334921811616417385371e+02L}, { 136, 3.659042881952548657689727220519892e+232L, 5.354969431801695441896628727207848e+02L}, { 137, 5.012888748274991661034926292112252e+234L, 5.404169241059976691049780628487646e+02L}, { 138, 6.917786472619488492228198283114908e+236L, 5.453441777911548737965972930389555e+02L}, { 139, 9.615723196941089004197195613529722e+238L, 5.502786517242855655537860779578311e+02L}, { 140, 1.346201247571752460587607385894161e+241L, 5.552202941468948698523266542774168e+02L}, { 141, 1.898143759076170969428526414110767e+243L, 5.601690540372730381305428501841115e+02L}, { 142, 2.695364137888162776588507508037289e+245L, 5.651248810948742988612895368380828e+02L}, { 143, 3.854370717180072770521565736493323e+247L, 5.700877257251342061414049678576132e+02L}, { 144, 5.550293832739304789551054660550385e+249L, 5.750575390247102067618643868172909e+02L}, { 145, 8.047926057471991944849029257798059e+251L, 5.800342727671307811636484181828790e+02L}, { 146, 1.174997204390910823947958271638517e+254L, 5.850178793888391176021577591617758e+02L}, { 147, 1.727245890454638911203498659308619e+256L, 5.900083119756178539037637098855847e+02L}, { 148, 2.556323917872865588581178015776756e+258L, 5.950055242493819689669662697995324e+02L}, { 149, 3.808922637630569726985955243507367e+260L, 6.000094705553274281079586980746365e+02L}, { 150, 5.713383956445854590478932865261050e+262L, 6.050201058494236838579726940994696e+02L}, { 151, 8.627209774233240431623188626544186e+264L, 6.100373856862386081867689303989541e+02L}, { 152, 1.311335885683452545606724671234716e+267L, 6.150612662070848845750296541952165e+02L}, { 153, 2.006343905095682394778288746989116e+269L, 6.200917041284773200380696792869347e+02L}, { 154, 3.089769613847350887958564670363239e+271L, 6.251286567308909491966542077298012e+02L}, { 155, 4.789142901463393876335775239063020e+273L, 6.301720818478101958171841313875697e+02L}, { 156, 7.471062926282894447083809372938311e+275L, 6.352219378550597328634673283089739e+02L}, { 157, 1.172956879426414428192158071551315e+278L, 6.402781836604080409208917735453774e+02L}, { 158, 1.853271869493734796543609753051077e+280L, 6.453407786934350077244819512083170e+02L}, { 159, 2.946702272495038326504339507351213e+282L, 6.504096828956552392500216655842685e+02L}, { 160, 4.714723635992061322406943211761940e+284L, 6.554848567108890661717085855247856e+02L}, { 161, 7.590705053947218729075178570936724e+286L, 6.605662610758735291676206911000390e+02L}, { 162, 1.229694218739449434110178928491749e+289L, 6.656538574111059132426189041691872e+02L}, { 163, 2.004401576545302577599591653441551e+291L, 6.707476076119126755766838365353080e+02L}, { 164, 3.287218585534296227263330311644144e+293L, 6.758474740397368739993850641512618e+02L}, { 165, 5.423910666131588774984495014212838e+295L, 6.809534195136374546094430122993756e+02L}, { 166, 9.003691705778437366474261723593311e+297L, 6.860654073019939978423357166441252e+02L}, { 167, 1.503616514864999040201201707840083e+300L, 6.911834011144107529495954674208699e+02L}, { 168, 2.526075744973198387538018869171339e+302L, 6.963073650938140118743477617656102e+02L}, { 169, 4.269068009004705274939251888899563e+304L, 7.014372638087370853464547366487408e+02L}, { 170, 7.257415615307998967396728211129257e+306L, 7.065730622457873471107222627212983e+02L} }; template constexpr std::size_t _S_num_double_factorials = 0; template<> constexpr std::size_t _S_num_double_factorials = 57; template<> constexpr std::size_t _S_num_double_factorials = 301; template<> constexpr std::size_t _S_num_double_factorials = 301; #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) template<> constexpr std::size_t _S_num_double_factorials<__float128> = 301; #endif constexpr _Factorial_table _S_double_factorial_table[301] { { 0, 1.0L, 0.0L}, { 1, 1.0L, 0.0L}, { 2, 2.0L, 6.931471805599453094172321214581766e-01L}, { 3, 3.0L, 1.098612288668109691395245236922526e+00L}, { 4, 8.0L, 2.079441541679835928251696364374530e+00L}, { 5, 15.0L, 2.708050201102210065996004570148713e+00L}, { 6, 48.0L, 3.871201010907890929064173722755232e+00L}, { 7, 105.0L, 4.653960350157523371101357313591893e+00L}, { 8, 384.0L, 5.950642552587726857315870087129762e+00L}, { 9, 945.0L, 6.851184927493742753891847787436945e+00L}, { 10, 3840.03L, 8.253227645581772541333861541814127e+00L}, { 11, 10395.0L, 9.249080200292113297953791365402074e+00L}, { 12, 46080.0L, 1.073813429536977285156357102165301e+01L}, { 13, 135135.0L, 1.181402955775365003400727880696739e+01L}, { 14, 645120.0L, 1.337719162498503146608615588655436e+01L}, { 15, 2027025.0L, 1.452207975885586010000328337711611e+01L}, { 16, 10321920.0L, 1.614978034722481270375508437238707e+01L}, { 17, 34459425.0L, 1.735529310291207618025281799498923e+01L}, { 18, 185794560.0L, 1.904015210512097739596280696769029e+01L}, { 19, 654729075.0L, 2.029973208207851664026184542687709e+01L}, { 20, 3715891200.0L, 2.203588437867496838939803054383284e+01L}, { 21, 13749310575.0L, 2.334425451980193963676244340724279e+01L}, { 22, 81749606400.0L, 2.512692683203328424287720624325614e+01L}, { 23, 316234143225.0L, 2.647974873573108932756919623905299e+01L}, { 24, 1961990553600.0L, 2.830498066238122986252414784455320e+01L}, { 25, 7905853580625.0L, 2.969862456059929007677071490550536e+01L}, { 26, 51011754393600.0L, 3.156307720040271190799486740757669e+01L}, { 27, 213458046676875.0L, 3.299446142660361915095645061627294e+01L}, { 28, 1428329123020800.0L, 3.489528171057791583193468439393622e+01L}, { 29, 6190283353629375.0L, 3.636175725659009317813972264863485e+01L}, { 30, 42849873690624000.0L, 3.829647909224007120734792108554311e+01L}, { 31, 191898783962510625.0L, 3.979574446107523942406888697317721e+01L}, { 32, 1371195958099968000.0L, 4.176221499503979775443408169283400e+01L}, { 33, 6332659870762850625.0L, 4.329225202254171965952607578806486e+01L}, { 34, 46620662575398912000.0L, 4.528857551965595914410084843216530e+01L}, { 35, 221643095476699771875.0L, 4.684760008403113333923218786473423e+01L}, { 36, 1678343852714360832000.0L, 4.887209445811206914572580314892671e+01L}, { 37, 8200794532637891559375.0L, 5.045851799667535778360028353576568e+01L}, { 38, 63777066403145711616000.0L, 5.250968061783845491515206270227273e+01L}, { 39, 319830986772877770815625.0L, 5.412207964280500421104901621425352e+01L}, { 40, 2551082656125828464640000.0L, 5.619856007195239121800451839987345e+01L}, { 41, 13113070457687988603440625.0L, 5.783565170950931201491577958729093e+01L}, { 42, 107145471557284795514880000.0L, 5.993622969023575952392234850169733e+01L}, { 43, 563862029680583509947946875.0L, 6.159685182520287443838862210063677e+01L}, { 44, 4714400748520531002654720000.0L, 6.372041932415402068681875632257881e+01L}, { 45, 25373791335626257947657609375.0L, 6.540351431497319419577987190770802e+01L}, { 46, 216862434431944426122117120000.0L, 6.754906072064311568704274127584719e+01L}, { 47, 1192568192774434123539907640625.0L, 6.925366191668325278260082257748019e+01L}, { 48, 10409396852733332453861621760000.0L, 7.142026173155100661610691499860242e+01L}, { 49, 58435841445947272053455474390625.0L, 7.314548221479387939281152806436655e+01L}, { 50, 520469842636666622693081088000000.0L, 7.533228473697915267472566578651297e+01L}, { 51, 2980227913743310874726229193921875.0L, 7.707730784751820516445630791916221e+01L}, { 52, 2.706443181710666438004021657600000e+34L, 7.928352845556058002961361747099465e+01L}, { 53, 1.579520794283954763604901472778594e+35L, 8.104759976107032699860077705819126e+01L}, { 54, 1.461479318123759876522171695104000e+36L, 8.327251250212485441321658530322040e+01L}, { 55, 8.687364368561751199826958100282266e+36L, 8.505493294630279791726347996938258e+01L}, { 56, 8.184284181493055308524161492582400e+37L, 8.729786419286000364657363441103811e+01L}, { 57, 4.951797690080198183901366117160891e+38L, 8.909798421413734806866775263819296e+01L}, { 58, 4.746884825265972078944013665697792e+39L, 9.135830720340642298317413856485819e+01L}, { 59, 2.921560637147316928501806009124926e+40L, 9.317552165804306751928380301191265e+01L}, { 60, 2.848130895159583247366408199418675e+41L, 9.545265176562852366800460737792326e+01L}, { 61, 1.782151988659863326386101665566205e+42L, 9.728639552221637876803519211533827e+01L}, { 62, 1.765841154998941613367173083639579e+43L, 9.957978615067361522335100382392380e+01L}, { 63, 1.122755752855713895623244049306709e+44L, 1.014295302486079114559310353326265e+02L}, { 64, 1.130138339199322632554990773529330e+45L, 1.037386692340332870798543965526729e+02L}, { 65, 7.297912393562140321551086320493608e+45L, 1.056039175185035485665852821074180e+02L}, { 66, 7.458913038715529374862939105293580e+46L, 1.079283239760597126247288174890187e+02L}, { 67, 4.889601303686634015439227834730717e+47L, 1.098086101378945146262553541037817e+02L}, { 68, 5.072060866326559974906798591599634e+48L, 1.121478316812358193238128163498082e+02L}, { 69, 3.373824899543777470653067205964195e+49L, 1.140427166424917740084573521725145e+02L}, { 70, 3.550442606428591982434759014119744e+50L, 1.163963269232851783129361605479357e+02L}, { 71, 2.395415678676082004163677716234578e+51L, 1.183053965195330894297868067050275e+02L}, { 72, 2.556318676628586227353026490166216e+52L, 1.206729930423012336239783473861553e+02L}, { 73, 1.748653445433539863039484732851242e+53L, 1.225958559606814805588789155624660e+02L}, { 74, 1.891675820705153808241239602723000e+54L, 1.249770581355054033777636751786449e+02L}, { 75, 1.311490084075154897279613549638432e+55L, 1.269133440742177909994756794658409e+02L}, { 76, 1.437673623735916894263342098069480e+56L, 1.293077914757917344566071668534491e+02L}, { 77, 1.009847364737869270905302433221592e+57L, 1.312571494960714748486429757872492e+02L}, { 78, 1.121385426514015177525406836494194e+58L, 1.336645003024813261934731316533951e+02L}, { 79, 7.977794181429167240151889222450580e+58L, 1.356265973485384963428159213287306e+02L}, { 80, 8.971083412112121420203254691953555e+59L, 1.380465269371552078057428194724540e+02L}, { 81, 6.462013286957625464523030270184970e+60L, 1.400210465032109351083969022764207e+02L}, { 82, 7.356288397931939564566668847401915e+61L, 1.424532461844194609190268149669496e+02L}, { 83, 5.363471028174829135554115124253525e+62L, 1.444398871110075330318723744997121e+02L}, { 84, 6.179282254262829234236001831817608e+63L, 1.468840629832627745343618771902317e+02L}, { 85, 4.558950373948604765220997855615496e+64L, 1.488825383674978494867226684508114e+02L}, { 86, 5.314182738666033141442961575363143e+65L, 1.513384102795162822672519518250357e+02L}, { 87, 3.966286825335286145742268134385482e+66L, 1.533484464861524332053011857200959e+02L}, { 88, 4.676480810026109164469806186319566e+67L, 1.558157470939944887395655917673754e+02L}, { 89, 3.529995274548404669710618639603079e+68L, 1.578370828558845730436190012607657e+02L}, { 90, 4.208832729023498248022825567687610e+69L, 1.603155567643247538063740736959048e+02L}, { 91, 3.212295699839048249436662962038802e+70L, 1.623479423624014230847778414457742e+02L}, { 92, 3.872126110701618388180999522272601e+71L, 1.648373453413737941160152907706313e+02L}, { 93, 2.987435000850314871976096554696086e+72L, 1.668805418555546790221022510072391e+02L}, { 94, 3.639798544059521284890139550936245e+73L, 1.693806401236437980122534735618617e+02L}, { 95, 2.838063250807799128377291726961281e+74L, 1.714344187471552198567120377723531e+02L}, { 96, 3.494206602297140433494533968898795e+75L, 1.739449883151116342507348794060751e+02L}, { 97, 2.752921353283565154525972975152443e+76L, 1.760091297256586026788287593940571e+02L}, { 98, 3.424322470251197624824643289520819e+77L, 1.785299557937822061703628170144196e+02L}, { 99, 2.725392139750729502980713245400919e+78L, 1.806042495757931926056811934458673e+02L}, { 100, 3.424322470251197624824643289520819e+79L, 1.831351259797702975383987999237884e+02L}, { 101, 2.752646061148236798010520377854928e+80L, 1.852193700926344520565653917127803e+02L}, { 102, 3.492808919656221577321136155311235e+81L, 1.877600987930545686194608119000422e+02L}, { 103, 2.835225442982683901950835989190576e+82L, 1.898540990808640878273339940278337e+02L}, { 104, 3.632521276442470440413981601523684e+83L, 1.924044896921959412837659957059820e+02L}, { 105, 2.976986715131818097048377788650104e+84L, 1.945080594310216111984353513414256e+02L}, { 106, 3.850472553029018666838820497615105e+85L, 1.970679287863080084273276969664693e+02L}, { 107, 3.185375785191045363841764233855612e+86L, 1.991808882654835173717397501584489e+02L}, { 108, 4.158510357271340160185926137424314e+87L, 2.017500600134322281203478969201532e+02L}, { 109, 3.472059605858239446587523014902617e+88L, 2.038722361477126610721170666106581e+02L}, { 110, 4.574361392998474176204518751166745e+89L, 2.064505403792246443484278319528027e+02L}, { 111, 3.853986162502645785712150546541905e+90L, 2.085817663490249952078804075186121e+02L}, { 112, 5.123284760158291077349061001306754e+91L, 2.111690392505197388912021131820786e+02L}, { 113, 4.355004363627989737854730117592352e+92L, 2.133091541677373357764625390122281e+02L}, { 114, 5.840544626580451828177929541489699e+93L, 2.159052376989142343520236179723471e+02L}, { 115, 5.008255018172188198532939635231205e+94L, 2.180540862961005858418700511772645e+02L}, { 116, 6.775031766833324120686398268128051e+95L, 2.206588278900205989980413542476254e+02L}, { 117, 5.859658371261460192283539373220509e+96L, 2.228162602308983419607140290926748e+02L}, { 118, 7.994537484863322462409949956391101e+97L, 2.254295125144862637580746367428033e+02L}, { 119, 6.972993461801137628817411854132406e+98L, 2.275953837240098713460689164539912e+02L}, { 120, 9.593444981835986954891939947669321e+99L, 2.302170042572683097523223376773265e+02L}, { 121, 8.437322088779376530869068343500211e+100L, 2.323911742696066124341928036099214e+02L}, { 122, 1.170400287783990408496816673615657e+102L, 2.350210253020015663104909589022103e+02L}, { 123, 1.037790616919863313296895406250526e+103L, 2.372033586249790299294548122198813e+02L}, { 124, 1.451296356852148106536052675283415e+104L, 2.398413068676066031752545874696690e+02L}, { 125, 1.297238271149829141621119257813157e+105L, 2.420316723622813310532570902195599e+02L}, { 126, 1.828633409633706614235426370857103e+106L, 2.446775887745580811725676628084154e+02L}, { 127, 1.647492604360283009858821457422710e+107L, 2.468758594487399223263045310272762e+02L}, { 128, 2.340650764331144466221345754697092e+108L, 2.495296190384776983384882876586226e+02L}, { 129, 2.125265459624765082717879680075296e+109L, 2.517356718531015944411726187775446e+02L}, { 130, 3.042845993630487806087749481106219e+110L, 2.543971534889332807585597665548723e+02L}, { 131, 2.784097752108442258360422380898638e+111L, 2.566108691763027459853220427887141e+02L}, { 132, 4.016556711592243904035829315060209e+112L, 2.592799554115196516128514196126764e+02L}, { 133, 3.702850010304228203619361766595188e+113L, 2.615012183045244997504364229640451e+02L}, { 134, 5.382185993533606831408011282180680e+114L, 2.641777952114705629819387237304983e+02L}, { 135, 4.998847513910708074886138384903503e+115L, 2.664064930829629291992229180080389e+02L}, { 136, 7.319772951205705290714895343765725e+116L, 2.690904500972066149904399547127459e+02L}, { 137, 6.848421094057670062594009587317800e+117L, 2.713264740087910541145381081360187e+02L}, { 138, 1.010128667266387330118655557439670e+119L, 2.740177037823638196820591849029368e+02L}, { 139, 9.519305320740161387005673326371742e+119L, 2.762609479419217458717268930548943e+02L}, { 140, 1.414180134172942262166117780415538e+121L, 2.789593462049731239805997612225225e+02L}, { 141, 1.342222050224362755567799939018416e+122L, 2.812097078322999141499430889615890e+02L}, { 142, 2.008135790525578012275887248190064e+123L, 2.839151732625743847113464478764937e+02L}, { 143, 1.919377531820838740461953912796334e+124L, 2.861725524625598214300585199811194e+02L}, { 144, 2.891715538356832337677277637393692e+125L, 2.888849865621503853318058668361715e+02L}, { 145, 2.783097421140216173669833173554685e+126L, 2.911492862049803958318425513467075e+02L}, { 146, 4.221904686000975213008825350594791e+127L, 2.938685931838587217703152078150682e+02L}, { 147, 4.091153209076117775294654765125387e+128L, 2.961397187917591321334485020705164e+02L}, { 148, 6.248418935281443315253061518880290e+129L, 2.988658054576228368335177677290160e+02L}, { 149, 6.095818281523415485189035600036826e+130L, 3.011436650977045912744409303456206e+02L}, { 150, 9.372628402922164972879592278320435e+131L, 3.038764407517190925835317637538491e+02L}, { 151, 9.204685605100357382635443756055608e+132L, 3.061609449345195156032371666451050e+02L}, { 152, 1.424639517244169075877698026304706e+134L, 3.089003212725653689717924875501115e+02L}, { 153, 1.408316897580354679543222894676508e+135L, 3.111913828559119510662771917368232e+02L}, { 154, 2.193944856556020376851654960509247e+136L, 3.139372738749789981303770159929780e+02L}, { 155, 2.182891191249549753291995486748587e+137L, 3.162348079728311976868071153945917e+02L}, { 156, 3.422553976227391787888581738394426e+138L, 3.189871298822285351766602129143822e+02L}, { 157, 3.427139170261793112668432914195282e+139L, 3.212910537781795057442315606309952e+02L}, { 158, 5.407635282439279024863959146663193e+140L, 3.240497249152555019802503905773217e+02L}, { 159, 5.449151280716251049142808333570499e+141L, 3.263599579803997372697712750069468e+02L}, { 160, 8.652216451902846439782334634661109e+142L, 3.291248987304893289019373105178388e+02L}, { 161, 8.773133561953164189119921417048503e+143L, 3.314413623453842002656833805822002e+02L}, { 162, 1.401659065208261123244738210815100e+145L, 3.342124950657217129769355235869871e+02L}, { 163, 1.430020770598365762826547190978906e+146L, 3.365351125461909625997483129483210e+02L}, { 164, 2.298720866941548242121370665736764e+147L, 3.393123614935459113996367512029408e+02L}, { 165, 2.359534271487303508663802865115195e+148L, 3.416410580200915432098062610964348e+02L}, { 166, 3.815876639122970081921475305123027e+149L, 3.444243492819024546325294555476904e+02L}, { 167, 3.940422233383796859468550784742375e+150L, 3.467590518325082983170660118731796e+02L}, { 168, 6.410672753726589737628078512606686e+151L, 3.495483132613057135572817498924306e+02L}, { 169, 6.659313574418616692501850826214614e+152L, 3.518889505474313717891729867563102e+02L}, { 170, 1.089814368133520255396773347143137e+154L, 3.546841116983559753215492759649881e+02L}, { 171, 1.138742621225583454417816491282699e+155L, 3.570306141039340316319725046620431e+02L}, { 172, 1.874480713189654839282450157086195e+156L, 3.598316061751694283638565827212503e+02L}, { 173, 1.970024734720259376142822529919069e+157L, 3.621839056984318105789060050504841e+02L}, { 174, 3.261596440949999420351463273329979e+158L, 3.649906614743839573918523321119929e+02L}, { 175, 3.447543285760453908249939427358371e+159L, 3.673486916723553246332128764603796e+02L}, { 176, 5.740409736071998979818575361060763e+160L, 3.701611454694221091735832041757908e+02L}, { 177, 6.102151615796003417602392786424317e+161L, 3.725248414049291537752241720710219e+02L}, { 178, 1.021792933020815818407706414268816e+163L, 3.753429290197141943213182518379188e+02L}, { 179, 1.092285139227484611750828308769953e+164L, 3.777122272107699087714019765010433e+02L}, { 180, 1.839227279437468473133871545683868e+165L, 3.805358858706044046975439658879064e+02L}, { 181, 1.977036102001747147268999238873614e+166L, 3.829107242420357345182410635396763e+02L}, { 182, 3.347393648576192621103646213144640e+167L, 3.857398925576812000481200381943731e+02L}, { 183, 3.617976066663197279502268607138714e+168L, 3.881202103948771554583876978800244e+02L}, { 184, 6.159204313380194422830709032186138e+169L, 3.909548283152901856671784873905578e+02L}, { 185, 6.693255723326914967079196923206621e+170L, 3.933405662199554802773565528842820e+02L}, { 186, 1.145612002288716162646511879986622e+172L, 3.961805749890033869139201290734808e+02L}, { 187, 1.251638820262133098843809824639638e+173L, 3.985716748368100669016680310801203e+02L}, { 188, 2.153750564302786385775442334374848e+174L, 4.014170169518333361195755439861694e+02L}, { 189, 2.365597370295431556814800568568916e+175L, 4.038134218518697092809591195343311e+02L}, { 190, 4.092126072175294132973340435312212e+176L, 4.066640410239938222636025628727416e+02L}, { 191, 4.518290977264274273516269085966630e+177L, 4.090656952799163391538090694865334e+02L}, { 192, 7.856882058576564735308813635799447e+178L, 4.119215363960216038115012008384132e+02L}, { 193, 8.720301586120049347886399335915597e+179L, 4.143283854688212247056640005399165e+02L}, { 194, 1.524235119363853558649909845345093e+181L, 4.171893945550849319430351545815753e+02L}, { 195, 1.700458809293409622837847870503541e+182L, 4.196013850273849715077134925516305e+02L}, { 196, 2.987500833953152974953823296876382e+183L, 4.224675092143154491720803243113780e+02L}, { 197, 3.349903854308016956990560304891976e+184L, 4.248845887561229600144932898807934e+02L}, { 198, 5.915251651227242890408570127815236e+185L, 4.277557762450099844083499904846464e+02L}, { 199, 6.666308670072953744411215006735033e+186L, 4.301778935808474524099034111726619e+02L}, { 200, 1.183050330245448578081714025563047e+188L, 4.330540936115580210858032055154733e+02L}, { 201, 1.339928042684663702626654216353742e+189L, 4.354811984889065281609687284059481e+02L}, { 202, 2.389761667095806127725062331637355e+190L, 4.383623613089592258461046359038445e+02L}, { 203, 2.720053926649867316332108059198095e+191L, 4.407944044679483154932573531817532e+02L}, { 204, 4.875113800875444500559127156540205e+192L, 4.436804813028034422365838800015565e+02L}, { 205, 5.576110549632227998480821521356096e+193L, 4.461174144470867236717248758880168e+02L}, { 206, 1.004273442980341567115180194247282e+195L, 4.490083574715930233167697144380681e+02L}, { 207, 1.154254883773871195685530054920712e+196L, 4.514501332403520927453221191936721e+02L}, { 208, 2.088888761399110459599574804034347e+197L, 4.543458955512943412904921303654661e+02L}, { 209, 2.412392707087390798982757814784288e+198L, 4.567924674923169037493930902035250e+02L}, { 210, 4.386666398938131965159107088472129e+199L, 4.596930030820118099710107198005162e+02L}, { 211, 5.090148611954394585853618989194847e+200L, 4.621443256257929702451350464689793e+02L}, { 212, 9.299732765748839766137307027560914e+201L, 4.650495893566838224239896531824616e+02L}, { 213, 1.084201654346286046786820844698502e+203L, 4.675056177915023953578597462384149e+02L}, { 214, 1.990142811870251709953383703898036e+204L, 4.704155653717056739067112841209430e+02L}, { 215, 2.331033556844515000591664816101780e+205L, 4.728762558196300581559333480849869e+02L}, { 216, 4.298708473639743693499308800419757e+206L, 4.757908437793898389091487161960852e+02L}, { 217, 5.058342818352597551283912650940863e+207L, 4.782561531731705177069678651529724e+02L}, { 218, 9.371184472534641251828493184915070e+208L, 4.811753388421789279189432647697525e+02L}, { 219, 1.107777077219218863731176870556049e+210L, 4.836452249029870185274552192473335e+02L}, { 220, 2.061660583957621075402268500681315e+211L, 4.865689663885312894564404319238602e+02L}, { 221, 2.448187340654473688845900883928868e+212L, 4.890433876045047713437582413067720e+02L}, { 222, 4.576886496385918787393036071512520e+213L, 4.919716437704035689016210049532724e+02L}, { 223, 5.459457769659476326126358971161377e+214L, 4.944505593759648901023943465164951e+02L}, { 224, 1.025222575190445808376040080018804e+216L, 4.973832898222586087538125183040064e+02L}, { 225, 1.228377998173382173378430768511310e+217L, 4.998666597781693102343863556567926e+02L}, { 226, 2.317003019930407526929850580842498e+218L, 5.028038248215308946318118819190806e+02L}, { 227, 2.788418055853577533569037844520673e+219L, 5.052916097956507129093997372336261e+02L}, { 228, 5.282766885441329161400059324320896e+220L, 5.082331704504853354020506188308074e+02L}, { 229, 6.385477347904692551873096663952341e+221L, 5.107253317992049525578409728375586e+02L}, { 230, 1.215036383651505707122013644593806e+223L, 5.136712497594085307768753631173019e+02L}, { 231, 1.475045267365983979482685329372991e+224L, 5.161677495097267460984035143958895e+02L}, { 232, 2.818884410071493240523071655457630e+225L, 5.191179871310748407323103315140384e+02L}, { 233, 3.436855472962742672194656817439068e+226L, 5.216187879632924466637057392705584e+02L}, { 234, 6.596189519567294182823987673770854e+227L, 5.245733082464325421605715415509069e+02L}, { 235, 8.076610361462445279657443520981810e+228L, 5.270783734774366056251274492735567e+02L}, { 236, 1.556700726617881427146461091009922e+230L, 5.300371400514581522300220561675430e+02L}, { 237, 1.914156655666599531278814114472689e+231L, 5.325464336185717368106956400519607e+02L}, { 238, 3.704947729350557796608577396603613e+232L, 5.355094107251296269247941756503175e+02L}, { 239, 4.574834407043172879756365733589726e+233L, 5.380228971705032474776588036462226e+02L}, { 240, 8.891874550441338711860585751848673e+234L, 5.409900496484716182284591087062989e+02L}, { 241, 1.102535092097404664021284141795124e+236L, 5.435076941039939024731252149649334e+02L}, { 242, 2.151833641206803968270261751947379e+237L, 5.464789873746283046260002279836872e+02L}, { 243, 2.679160273796693333571720464562151e+238L, 5.490007555473344509301014411495460e+02L}, { 244, 5.250474084544601682579438674751604e+239L, 5.519761555999215064935860813300292e+02L}, { 245, 6.563942670801898667250715138177270e+240L, 5.545020137578791779149129059696586e+02L}, { 246, 1.291616624797972013914541913988895e+242L, 5.574814871358538692982653220614473e+02L}, { 247, 1.621293839688068970810926639129786e+243L, 5.600114020945071551109754208431118e+02L}, { 248, 3.203209229498970594508063946692458e+244L, 5.629949158820188514724461827503642e+02L}, { 249, 4.037021660823291737319207331433167e+245L, 5.655288549909718627258461383033256e+02L}, { 250, 8.008023073747426486270159866731147e+246L, 5.685163767998810979056656928715010e+02L}, { 251, 1.013292436866646226067121040189725e+248L, 5.710543079301036466120647235423339e+02L}, { 252, 2.018021814584351474540080286416249e+249L, 5.740458058873925212123960003317055e+02L}, { 253, 2.563629865272614951949816231680004e+250L, 5.765876974188311668469334199521092e+02L}, { 254, 5.125775409044252745331803927497273e+251L, 5.795831401544110577948606732608800e+02L}, { 255, 6.537256156445168127472031390784010e+252L, 5.821289609639895929931789591401310e+02L}, { 256, 1.312198504715328702804941805439302e+254L, 5.851283175988906202701985302325455e+02L}, { 257, 1.680074832206408208760312067431491e+255L, 5.876780370488848127915307534548923e+02L}, { 258, 3.385472142165548053236749858033399e+256L, 5.906812771838122376944838501042720e+02L}, { 259, 4.351393815414597260689208254647560e+257L, 5.932348651105843505410042018693669e+02L}, { 260, 8.802227569630424938415549630886837e+258L, 5.962419588148277654239725611219798e+02L}, { 261, 1.135713785823209885039883354463013e+260L, 5.987993855179070439509779643755739e+02L}, { 262, 2.306183623243171333864874003292351e+261L, 6.018103033185888622775392172546075e+02L}, { 263, 2.986927256715041997654893222237725e+262L, 6.043715395500848085020638906397789e+02L}, { 264, 6.088324765361972321403267368691808e+263L, 6.073862524217351784412481024338698e+02L}, { 265, 7.915357230294861293785467038929971e+264L, 6.099512693760710307108091191120342e+02L}, { 266, 1.619494387586284637493269120072021e+266L, 6.129697487305168775157797147306590e+02L}, { 267, 2.113400380488727965440719699394302e+267L, 6.155385180344712802405221798896266e+02L}, { 268, 4.340244958731242828481961241793015e+268L, 6.185607357110277341942842509699390e+02L}, { 269, 5.685047023514678227035535991370674e+269L, 6.211332294140731193467421330701218e+02L}, { 270, 1.171866138857435563690129535284114e+271L, 6.241591576700261089524879781353910e+02L}, { 271, 1.540647743372477799526630253661453e+272L, 6.267353482349528202468390031433277e+02L}, { 272, 3.187475897692224733237152335972790e+273L, 6.297649597363221062704064412390968e+02L}, { 273, 4.205968339406864392707700592495766e+274L, 6.323448200301377799793930885652588e+02L}, { 274, 8.733683959676695769069797400565445e+275L, 6.353780878427101764951388634885349e+02L}, { 275, 1.156641293336887707994617662936336e+277L, 6.379615911278043512726565508096763e+02L}, { 276, 2.410496772870768032263264082556063e+278L, 6.409984887084273264961753258001839e+02L}, { 277, 3.203896382543178951145090926333650e+279L, 6.435856086339916897725259483592008e+02L}, { 278, 6.701181028580735129691874149505854e+280L, 6.466261098221179635627813428405177e+02L}, { 279, 8.938870907295469273694803684470883e+281L, 6.492168204158130554012456031575882e+02L}, { 280, 1.876330688002605836313724761861639e+283L, 6.522608994252872131707391512815615e+02L}, { 281, 2.511822724950026865908239835336318e+284L, 6.548551750851468011663522414822814e+02L}, { 282, 5.291252540167348458404703828449822e+285L, 6.579028064962253267583725793097144e+02L}, { 283, 7.108458311608576030520318734001781e+286L, 6.605006219827900387909982286290766e+02L}, { 284, 1.502715721407526962186935887279750e+288L, 6.635517807343865327985364980851438e+02L}, { 285, 2.025910618808444168698290839190508e+289L, 6.661531111630586893170032606311131e+02L}, { 286, 4.297766963225527111854636637620083e+290L, 6.692077725452063853880691612261325e+02L}, { 287, 5.814363475980234764164094708476757e+291L, 6.718125933788183104259753767475937e+02L}, { 288, 1.237756885408951808214135351634584e+293L, 6.748707330253423313179458123072684e+02L}, { 289, 1.680351044558287846843423370749783e+294L, 6.774790200669307425864744459833399e+02L}, { 290, 3.589494967685960243820992519740294e+295L, 6.805406139483228510291470757943147e+02L}, { 291, 4.889821539664617634314362008881867e+296L, 6.831523433341022350999864128419664e+02L}, { 292, 1.048132530564300391195729815764166e+298L, 6.862173677505911327770736488946695e+02L}, { 293, 1.432717711121732966854108068602387e+299L, 6.888325159431193024059262531047789e+02L}, { 294, 3.081509639859043150115445658346647e+300L, 6.919009475179298143880968317399366e+02L}, { 295, 4.226517247809112252219618802377042e+301L, 6.945194912994591222311430628117248e+02L}, { 296, 9.121268533982767724341719148706075e+302L, 6.975913069722538747607166237753426e+02L}, { 297, 1.255275622599306338909226784305981e+304L, 7.002132234382618218493907421004576e+02L}, { 298, 2.718138023126864781853832306314410e+305L, 7.032884004587592792111262841719049e+02L}, { 299, 3.753274111571925953338588085074884e+306L, 7.059136670116525082762509823738331e+02L}, { 300, 8.154414069380594345561496918943231e+307L, 7.089921829334154802705575123181962e+02L} }; template constexpr std::size_t _S_num_neg_double_factorials = 0; template<> constexpr std::size_t _S_num_neg_double_factorials = 27; template<> constexpr std::size_t _S_num_neg_double_factorials = 150; template<> constexpr std::size_t _S_num_neg_double_factorials = 999; #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) template<> constexpr std::size_t _S_num_neg_double_factorials<__float128> = 999; #endif constexpr _Factorial_table _S_neg_double_factorial_table[999] { { -1, 1.000000000000000000000000000000000e+00L, 0.000000000000000000000000000000000e+00L}, { -3, -3.333333333333333333333333333333333e-01L, -1.098612288668109691395245236922526e+00L}, { -5, 6.666666666666666666666666666666667e-02L, -2.708050201102210065996004570148713e+00L}, { -7, -9.523809523809523809523809523809523e-03L, -4.653960350157523371101357313591893e+00L}, { -9, 1.058201058201058201058201058201058e-03L, -6.851184927493742753891847787436945e+00L}, { -11, -9.620009620009620009620009620009619e-05L, -9.249080200292113297953791365402074e+00L}, { -13, 7.400007400007400007400007400007400e-06L, -1.181402955775365003400727880696739e+01L}, { -15, -4.933338266671600004933338266671600e-07L, -1.452207975885586010000328337711611e+01L}, { -17, 2.901963686277411767607846039218588e-08L, -1.735529310291207618025281799498923e+01L}, { -19, -1.527349308567058825056761073272941e-09L, -2.029973208207851664026184542687709e+01L}, { -21, 7.273091945557422976460767015585433e-11L, -2.334425451980193963676244340724279e+01L}, { -23, -3.162213889372792598461203050254536e-12L, -2.647974873573108932756919623905299e+01L}, { -25, 1.264885555749117039384481220101814e-13L, -2.969862456059929007677071490550536e+01L}, { -27, -4.684761317589322368090671185562275e-15L, -3.299446142660361915095645061627294e+01L}, { -29, 1.615434937099766333824369374331819e-16L, -3.636175725659009317813972264863485e+01L}, { -31, -5.211080442257310754272159272038126e-18L, -3.979574446107523942406888697317721e+01L}, { -33, 1.579115285532518410385502809708523e-19L, -4.329225202254171965952607578806486e+01L}, { -35, -4.511757958664338315387150884881494e-21L, -4.684760008403113333923218786473423e+01L}, { -37, 1.219394042882253598753284022940944e-22L, -5.045851799667535778360028353576568e+01L}, { -39, -3.126651392005778458341753904976780e-24L, -5.412207964280500421104901621425352e+01L}, { -41, 7.625979004892142581321350987748245e-26L, -5.783565170950931201491577958729093e+01L}, { -43, -1.773483489509800600307290927383313e-27L, -6.159685182520287443838862210063677e+01L}, { -45, 3.941074421132890222905090949740695e-29L, -6.540351431497319419577987190770802e+01L}, { -47, -8.385264725814660048734236063278075e-31L, -6.925366191668325278260082257748019e+01L}, { -49, 1.711278515472379601782497155771036e-32L, -7.314548221479387939281152806436655e+01L}, { -51, -3.355448069553685493691170893668698e-34L, -7.707730784751820516445630791916221e+01L}, { -53, 6.331034093497519799417303572959807e-36L, -8.104759976107032699860077705819126e+01L}, { -55, -1.151097107908639963530418831447238e-37L, -8.505493294630279791726347996938258e+01L}, { -57, 2.019468610366035023737576897275856e-39L, -8.909798421413734806866775263819296e+01L}, { -59, -3.422828153162771226673859147925179e-41L, -9.317552165804306751928380301191265e+01L}, { -61, 5.611193693709461027334195324467507e-43L, -9.728639552221637876803519211533827e+01L}, { -63, -8.906656656681684170371738610265885e-45L, -1.014295302486079114559310353326265e+02L}, { -65, 1.370254870258720641595652093887059e-46L, -1.056039175185035485665852821074180e+02L}, { -67, -2.045156522774209912829331483413521e-48L, -1.098086101378945146262553541037817e+02L}, { -69, 2.963994960542333206999031135381915e-50L, -1.140427166424917740084573521725145e+02L}, { -71, -4.174640789496243953519762162509739e-52L, -1.183053965195330894297868067050275e+02L}, { -73, 5.718686013008553360985975565081835e-54L, -1.225958559606814805588789155624660e+02L}, { -75, -7.624914684011404481314634086775780e-56L, -1.269133440742177909994756794658409e+02L}, { -77, 9.902486602612213612096927385423091e-58L, -1.312571494960714748486429757872492e+02L}, { -79, -1.253479316786356153429990808281404e-59L, -1.356265973485384963428159213287306e+02L}, { -81, 1.547505329365871794358013343557289e-61L, -1.400210465032109351083969022764207e+02L}, { -83, -1.864464252248038306455437763322035e-63L, -1.444398871110075330318723744997121e+02L}, { -85, 2.193487355585927419359338545084747e-65L, -1.488825383674978494867226684508114e+02L}, { -87, -2.521249834006813125700389132281318e-67L, -1.533484464861524332053011857200959e+02L}, { -89, 2.832864982030127107528527114922829e-69L, -1.578370828558845730436190012607657e+02L}, { -91, -3.113038441791348469811568258156955e-71L, -1.623479423624014230847778414457742e+02L}, { -93, 3.347353163216503730980180922749414e-73L, -1.668805418555546790221022510072391e+02L}, { -95, -3.523529645491056558926506234473068e-75L, -1.714344187471552198567120377723531e+02L}, { -97, 3.632504789166037689614954880900070e-77L, -1.760091297256586026788287593940571e+02L}, { -99, -3.669196756733371403651469576666738e-79L, -1.806042495757931926056811934458673e+02L}, {-101, 3.632868075973635053120266907590829e-81L, -1.852193700926344520565653917127803e+02L}, {-103, -3.527056384440422381670162046204689e-83L, -1.898540990808640878273339940278337e+02L}, {-105, 3.359101318514687982543011472575894e-85L, -1.945080594310216111984353513414256e+02L}, {-107, -3.139347026649241105180384553809247e-87L, -1.991808882654835173717397501584489e+02L}, {-109, 2.880134886834166151541637205329584e-89L, -2.038722361477126610721170666106581e+02L}, {-111, -2.594716114265014550938411896693319e-91L, -2.085817663490249952078804075186121e+02L}, {-113, 2.296208950677004027379125572294973e-93L, -2.133091541677373357764625390122281e+02L}, {-115, -1.996703435371307849894891801995629e-95L, -2.180540862961005858418700511772645e+02L}, {-117, 1.706584132795989615294779317944982e-97L, -2.228162602308983419607140290926748e+02L}, {-119, -1.434104313273940853188890183147043e-99L, -2.275953837240098713460689164539912e+02L}, {-121, 1.185210176259455250569330729873590e-101L, -2.323911742696066124341928036099214e+02L}, {-123, -9.635855091540286589994558779460078e-104L, -2.372033586249790299294548122198813e+02L}, {-125, 7.708684073232229271995647023568062e-106L, -2.420316723622813310532570902195599e+02L}, {-127, -6.069829978923015174799722065801623e-108L, -2.468758594487399223263045310272762e+02L}, {-129, 4.705294557304662926201334934729941e-110L, -2.517356718531015944411726187775446e+02L}, {-131, -3.591827906339437348245293843305299e-112L, -2.566108691763027459853220427887141e+02L}, {-133, 2.700622485969501765597965295718269e-114L, -2.615012183045244997504364229640451e+02L}, {-135, -2.000461100718149455998492811643163e-116L, -2.664064930829629291992229180080389e+02L}, {-137, 1.460190584465802522626637088790630e-118L, -2.713264740087910541145381081360187e+02L}, {-139, -1.050496823356692462321321646611964e-120L, -2.762609479419217458717268930548943e+02L}, {-141, 7.450332080543918172491642883772792e-123L, -2.812097078322999141499430889615890e+02L}, {-143, -5.210022433946795924819330687953002e-125L, -2.861725524625598214300585199811194e+02L}, {-145, 3.593118919963307534358159095140001e-127L, -2.911492862049803958318425513467075e+02L}, {-147, -2.444298585009052744461332717782314e-129L, -2.961397187917591321334485020705164e+02L}, {-149, 1.640468848999364258027740079048533e-131L, -3.011436650977045912744409303456206e+02L}, {-151, -1.086403211257857124521682171555320e-133L, -3.061609449345195156032371666451050e+02L}, {-153, 7.100674583384687088377007657224312e-136L, -3.111913828559119510662771917368232e+02L}, {-155, -4.581080376377217476372263004660846e-138L, -3.162348079728311976868071153945917e+02L}, {-157, 2.917885590049183105969594270484616e-140L, -3.212910537781795057442315606309952e+02L}, {-159, -1.835148169842253525767040421688438e-142L, -3.263599579803997372697712750069468e+02L}, {-161, 1.139843583752952500476422622166731e-144L, -3.314413623453842002656833805822002e+02L}, {-163, -6.992905421797254604149832037832708e-147L, -3.365351125461909625997483129483210e+02L}, {-165, 4.238124498058942184333231538080429e-149L, -3.416410580200915432098062610964348e+02L}, {-167, -2.537799100634097116367204513820616e-151L, -3.467590518325082983170660118731796e+02L}, {-169, 1.501656272564554506726156517053619e-153L, -3.518889505474313717891729867563102e+02L}, {-171, -8.781615629032482495474599514933445e-156L, -3.570306141039340316319725046620431e+02L}, {-173, 5.076078398284671962702080644470200e-158L, -3.621839056984318105789060050504841e+02L}, {-175, -2.900616227591241121544046082554400e-160L, -3.673486916723553246332128764603796e+02L}, {-177, 1.638766230277537356804545809352768e-162L, -3.725248414049291537752241720710219e+02L}, {-179, -9.155118604902443334103607873479154e-165L, -3.777122272107699087714019765010433e+02L}, {-181, 5.058076577294167587902545786452571e-167L, -3.829107242420357345182410635396763e+02L}, {-183, -2.763976271745446769345653435219984e-169L, -3.881202103948771554583876978800244e+02L}, {-185, 1.494041227970511767213866721740532e-171L, -3.933405662199554802773565528842820e+02L}, {-187, -7.989525283264768808630303324815679e-174L, -3.985716748368100669016680310801203e+02L}, {-189, 4.227262054637443814090107579267555e-176L, -4.038134218518697092809591195343311e+02L}, {-191, -2.213226206616462729890108680244793e-178L, -4.090656952799163391538090694865334e+02L}, {-193, 1.146749329853089497352387917225281e-180L, -4.143283854688212247056640005399165e+02L}, {-195, -5.880765794118407678730194447309134e-183L, -4.196013850273849715077134925516305e+02L}, {-197, 2.985160301582948060269134237212758e-185L, -4.248845887561229600144932898807934e+02L}, {-199, -1.500080553559270382044791073976260e-187L, -4.301778935808474524099034111726619e+02L}, {-201, 7.463087331140648666889507830727664e-190L, -4.354811984889065281609687284059481e+02L}, {-203, -3.676397700069285057581038340259933e-192L, -4.407944044679483154932573531817532e+02L}, {-205, 1.793364731741114662234652848907284e-194L, -4.461174144470867236717248758880168e+02L}, {-207, -8.663597737879780976978999270083499e-197L, -4.514501332403520927453221191936721e+02L}, {-209, 4.145262075540565060755502043102153e-199L, -4.567924674923169037493930902035250e+02L}, {-211, -1.964579182720646948225356418531826e-201L, -4.621443256257929702451350464689793e+02L}, {-213, 9.223376444697872996363175673858338e-204L, -4.675056177915023953578597462384149e+02L}, {-215, -4.289942532417615347145663104120157e-206L, -4.728762558196300581559333480849869e+02L}, {-217, 1.976932042588762832786019863649842e-208L, -4.782561531731705177069678651529724e+02L}, {-219, -9.027086952460104259296894354565488e-211L, -4.836452249029870185274552192473335e+02L}, {-221, 4.084654729619956678414884323332800e-213L, -4.890433876045047713437582413067720e+02L}, {-223, -1.831683735255585954446136467862242e-215L, -4.944505593759648901023943465164951e+02L}, {-225, 8.140816601135937575316162079387743e-218L, -4.998666597781693102343863556567926e+02L}, {-227, -3.586262819883672940667912810302971e-220L, -5.052916097956507129093997372336261e+02L}, {-229, 1.566053633136975083261097297075533e-222L, -5.107253317992049525578409728375586e+02L}, {-231, -6.779452957302922438359728558768542e-225L, -5.161677495097267460984035143958895e+02L}, {-233, 2.909636462361769286849668909342722e-227L, -5.216187879632924466637057392705584e+02L}, {-235, -1.238143175473093313553050599720307e-229L, -5.270783734774366056251274492735567e+02L}, {-237, 5.224232807903347314569833754094123e-232L, -5.325464336185717368106956400519607e+02L}, {-239, -2.185871467741986324087796549830177e-234L, -5.380228971705032474776588036462226e+02L}, {-241, 9.070006090215710888331106015892851e-237L, -5.435076941039939024731252149649334e+02L}, {-243, -3.732512794327453040465475726704877e-239L, -5.490007555473344509301014411495460e+02L}, {-245, 1.523474609929572669577745194573419e-241L, -5.545020137578791779149129059696586e+02L}, {-247, -6.167913400524585706792490666289146e-244L, -5.600114020945071551109754208431118e+02L}, {-249, 2.477073654829150886262044444292830e-246L, -5.655288549909718627258461383033256e+02L}, {-251, -9.868819341948808311800973881644741e-249L, -5.710543079301036466120647235423339e+02L}, {-253, 3.900719107489647554071531178515708e-251L, -5.765876974188311668469334199521092e+02L}, {-255, -1.529693767642999040812365168045375e-253L, -5.821289609639895929931789591401310e+02L}, {-257, 5.952115827404665528452782755040371e-256L, -5.876780370488848127915307534548923e+02L}, {-259, -2.298114219075160435696055117776205e-258L, -5.932348651105843505410042018693669e+02L}, {-261, 8.805035322127051477762663286498870e-261L, -5.987993855179070439509779643755739e+02L}, {-263, -3.347922175713707786221544975855083e-263L, -6.043715395500848085020638906397789e+02L}, {-265, 1.263366858759889730649639613530220e-265L, -6.099512693760710307108091191120342e+02L}, {-267, -4.731711081497714347002395556292960e-268L, -6.155385180344712802405221798896266e+02L}, {-269, 1.759000402043759980298288310889576e-270L, -6.211332294140731193467421330701218e+02L}, {-271, -6.490776391305387381174495612138657e-273L, -6.267353482349528202468390031433277e+02L}, {-273, 2.377573769708933106657324400050790e-275L, -6.323448200301377799793930885652588e+02L}, {-275, -8.645722798941574933299361454730147e-278L, -6.379615911278043512726565508096763e+02L}, {-277, 3.121199566404900697942007745389945e-280L, -6.435856086339916897725259483592008e+02L}, {-279, -1.118709522008924981341221414118260e-282L, -6.492168204158130554012456031575882e+02L}, {-281, 3.981172676188345129328190085830106e-285L, -6.548551750851468011663522414822814e+02L}, {-283, -1.406774797239697925557664341282723e-287L, -6.605006219827900387909982286290766e+02L}, {-285, 4.936051920139290966868997688711309e-290L, -6.661531111630586893170032606311131e+02L}, {-287, -1.719878717818568281139023584916832e-292L, -6.718125933788183104259753767475937e+02L}, {-289, 5.951137431898160142349562577566894e-295L, -6.774790200669307425864744459833399e+02L}, {-291, -2.045064409586996612491258617720582e-297L, -6.831523433341022350999864128419664e+02L}, {-293, 6.979742012242309257649346818158983e-300L, -6.888325159431193024059262531047789e+02L}, {-295, -2.366014241438070934796388751918300e-302L, -6.945194912994591222311430628117248e+02L}, {-297, 7.966377917299902137361578289287204e-305L, -7.002132234382618218493907421004576e+02L}, {-299, -2.664340440568529142930293742236523e-307L, -7.059136670116525082762509823738331e+02L}, {-301, 8.851629370659565258904630372878815e-310L, -7.116207772764013840048291776306221e+02L}, {-303, -2.921329825300186554093937416791688e-312L, -7.173345100819107531471086211344576e+02L}, {-305, 9.578130574754710013422745628825207e-315L, -7.230548218585181647704607695711094e+02L}, {-307, -3.119912239333781763329884569649905e-317L, -7.287816696061053619240592321383919e+02L}, {-309, 1.009680336353974680689283032249160e-319L, -7.345150108830031073862230796903678e+02L}, {-311, -3.246560567054580966846569235527846e-322L, -7.402548037951823415204190752558005e+02L}, {-313, 1.037239797781016283337562056079184e-324L, -7.460010069857224947370978405650577e+02L}, {-315, -3.292824754860369153452577955806934e-327L, -7.517535796245481277995944431155721e+02L}, {-317, 1.038745979451220553139614497099979e-329L, -7.575124813984254084137942052848708e+02L}, {-319, -3.256256988875299539622615978369840e-332L, -7.632776725012102529850394208951978e+02L}, {-321, 1.014410276908193002997699681735153e-334L, -7.690491136243402688497390649491436e+02L}, {-323, -3.140589092595024777082661553359606e-337L, -7.748267659475629253899976269989046e+02L}, {-325, 9.663351054138537775638958625721864e-340L, -7.806105911298926628752526331069223e+02L}, {-327, -2.955153227565302072060843616428705e-342L, -7.864005513007899162670251947960541e+02L}, {-329, 8.982228655213684109607427405558372e-345L, -7.921966090515552881589514982092694e+02L}, {-331, -2.713664246288122087494691059081079e-347L, -7.979987274269323510597361150488461e+02L}, {-333, 8.149141880745111373857931108351588e-350L, -8.038068699169127948868947011937226e+02L}, {-335, -2.432579665894063096674009286075101e-352L, -8.096210004487378613211655325233125e+02L}, {-337, 7.218337287519475064314567614466175e-355L, -8.154410833790902230456703990779609e+02L}, {-339, -2.129303034666511818381878352349904e-357L, -8.212670834864706733056477758084994e+02L}, {-341, 6.244290424241970141882341209237255e-360L, -8.270989659637541900956388837110069e+02L}, {-343, -1.820492835055967971394268574121649e-362L, -8.329366964109201300109549419413364e+02L}, {-345, 5.276790826249182525780488620642460e-365L, -8.387802408279514897677576993432953e+02L}, {-347, -1.520688998919072774000140812865262e-367L, -8.446295656078983489601113761896812e+02L}, {-349, 4.357275068536025140401549607063789e-370L, -8.504846375301007761233108577121798e+02L}, {-351, -1.241388908414821977322378805431279e-372L, -8.563454237535666419335500808645127e+02L}, {-353, 3.516682460098645828108721828417221e-375L, -8.622118918104999387009458009817007e+02L}, {-355, -9.906147774925762896080906558921748e-378L, -8.680840095999753544968760148474399e+02L}, {-357, 2.774831309503014816829385590734383e-380L, -8.739617453817549935736261474456788e+02L}, {-359, -7.729335123963829573340906937978783e-383L, -8.798450677702432724466742403312835e+02L}, {-361, 2.141090062039841987075043473124317e-385L, -8.857339457285761533666922951950592e+02L}, {-363, -5.898319730137305749518026096761204e-388L, -8.916283485628410041462114275879119e+02L}, {-365, 1.615978008256796095758363314181152e-390L, -8.975282459164234956499042957785766e+02L}, {-367, -4.403209831762387181902897313845100e-393L, -9.034336077644780659215237277177351e+02L}, {-369, 1.193281797225579182087506047112493e-395L, -9.093444044085185931081809815646175e+02L}, {-371, -3.216392984435523401853116029952812e-398L, -9.152606064711260282474308034470897e+02L}, {-373, 8.623037491784245045182616702286359e-401L, -9.211821848907698437887665380521914e+02L}, {-375, -2.299476664475798678715364453943029e-403L, -9.271091109167402546039640612887925e+02L}, {-377, 6.099407598079041588104414997196363e-406L, -9.330413561041882653672008207627198e+02L}, {-379, -1.609342374163335511373196569181099e-408L, -9.389788923092706917150180573463734e+02L}, {-381, 4.223995732712166696517576297063251e-411L, -9.449216916843973926794607433910122e+02L}, {-383, -1.102870948488816369847931148058290e-413L, -9.508697266735780386694537979281647e+02L}, {-385, 2.864599866204717843760860124826727e-416L, -9.568229700078658228932218535827992e+02L}, {-387, -7.402066837738289001966046834177590e-419L, -9.627813947008956046994851865699901e+02L}, {-389, 1.902844945434007455518263967654908e-421L, -9.687449740445140509923338068036222e+02L}, {-391, -4.866611113641962801836992244641708e-424L, -9.747136816044994167633900942533056e+02L}, {-393, 1.238323438585741170950888611868119e-426L, -9.806874912163686779989347635013976e+02L}, {-395, -3.134996047052509293546553447767390e-429L, -9.866663769812697998677084683761052e+02L}, {-397, 7.896715483759469253265877702184862e-432L, -9.926503132619569902807919004062821e+02L}, {-399, -1.979126687659014850442575865209239e-434L, -9.986392746788468537373015258185357e+02L}, {-401, 4.935478024087318829033855025459448e-437L, -1.004633236106153422923152204905885e+03L}, {-403, -1.224684373222659759065472711032121e-439L, -1.010632172668100105905134856671993e+03L}, {-405, 3.023912032648542614976475829708941e-442L, -1.016636059735206645045316596952909e+03L}, {-407, -7.429759293976763181760382873977743e-445L, -1.022644872920649240033746636201906e+03L}, {-409, 1.816567064541995887960973807818519e-447L, -1.028658588076692041779460158411034e+03L}, {-411, -4.419871203265196807690933838974499e-450L, -1.034677181291188276386170593775936e+03L}, {-413, 1.070186732025471382007490033650000e-452L, -1.040700628884149309141891996893099e+03L}, {-415, -2.578763209699931040981903695542168e-455L, -1.046728907404380007439968228449617e+03L}, {-417, 6.184084435731249498757562819045967e-458L, -1.052761993626178808888552258605415e+03L}, {-419, -1.475915139792660978223762009318846e-460L, -1.058799864546100946619585192527100e+03L}, {-421, 3.505736674091831302194209048263293e-463L, -1.064842497379783328037173908755497e+03L}, {-423, -8.287793555772650832610423281946319e-466L, -1.070889869558829606006785349899115e+03L}, {-425, 1.950069071946506078261276066340310e-468L, -1.076941958727754022836236403183440e+03L}, {-427, -4.566906491678000183281676970352015e-471L, -1.082998742740982647390093145030309e+03L}, {-429, 1.064546967757109599832558734347789e-473L, -1.089060199659910664361603821286762e+03L}, {-431, -2.469946560921367981050020265308096e-476L, -1.095126307750014412149351488093087e+03L}, {-433, 5.704264574876138524364942876000221e-479L, -1.101197045478016901996071772667059e+03L}, {-435, -1.311325189626698511348262730114993e-481L, -1.107272391509105586089251049269570e+03L}, {-437, 3.000744141022193389812958192482822e-484L, -1.113352324704201176240066829533268e+03L}, {-439, -6.835408066109779931236806816589572e-487L, -1.119436824117276347590060041663011e+03L}, {-441, 1.549979153312875267854151205575867e-489L, -1.125525868992723193583061237623742e+03L}, {-443, -3.498824273843962229919077213489541e-492L, -1.131619438762768329221147244881588e+03L}, {-445, 7.862526458076319617795679131437171e-495L, -1.137717513044934569434065819755484e+03L}, {-447, -1.758954464894031234406192199426660e-497L, -1.143820071639548138266453493267510e+03L}, {-449, 3.917493240298510544334503784914611e-500L, -1.149927094527290392559707015058336e+03L}, {-451, -8.686237783366985685885817704910445e-503L, -1.156038561866793070907635722009339e+03L}, {-453, 1.917491784407723109467067926028796e-505L, -1.162154453992276104927827203545746e+03L}, {-455, -4.214267658038951888938610826436914e-508L, -1.168274751411227055343586803063981e+03L}, {-457, 9.221592249538187940784706403581869e-511L, -1.174399434802121260042779934445134e+03L}, {-459, -2.009061492274115019778803138035266e-513L, -1.180528485012181805197215204773775e+03L}, {-461, 4.358050959379859045073325679035283e-516L, -1.186661883055178453715587929967049e+03L}, {-463, -9.412637061295591890007182892084844e-519L, -1.192799610109264687789667777148308e+03L}, {-465, 2.024223023934535890324125353136526e-521L, -1.198941647514852044101592946042999e+03L}, {-467, -4.334524676519348801550589621277357e-524L, -1.205087976772520941413122477331733e+03L}, {-469, 9.242056879572172284756054629589247e-527L, -1.211238579540967220777897902071540e+03L}, {-471, -1.962220144282839126275170834307696e-529L, -1.217393437634983638526717592544866e+03L}, {-473, 4.148456964657165171829113814604008e-532L, -1.223552533023475571494252378636177e+03L}, {-475, -8.733593609804558256482344872850543e-535L, -1.229715847827510212703462924734518e+03L}, {-477, 1.830942056562800473057095361184600e-537L, -1.235883364318398553920397884347392e+03L}, {-479, -3.822426005350314139993936035875992e-540L, -1.242055064915809469155514562178791e+03L}, {-481, 7.946831611954915051962444981031169e-543L, -1.248230932185915230335936145291388e+03L}, {-483, -1.645306751957539348232390265223845e-545L, -1.254410948839567803023243496103564e+03L}, {-485, 3.392385055582555357180186113863597e-548L, -1.260595097730505286219960977058494e+03L}, {-487, -6.965883071011407304271429391917037e-551L, -1.266783361853587876010690887889745e+03L}, {-489, 1.424515965442005583695588832702871e-553L, -1.272975724343062748036151065492788e+03L}, {-491, -2.901254512101844365978795993284869e-556L, -1.279172168470857268614885255817803e+03L}, {-493, 5.884897590470272547624332643579856e-559L, -1.285372677644899958722318062468038e+03L}, {-495, -1.188868200095004555075622756278759e-561L, -1.291577235407468649023771255853074e+03L}, {-497, 2.392088933792765704377510576013599e-564L, -1.297785825433565277750206063129031e+03L}, {-499, -4.793765398382296000756534220468135e-567L, -1.303998431529316796415491154267015e+03L}, {-501, 9.568394008747097805901265909118033e-570L, -1.310215037630401661214146150280682e+03L}, {-503, -1.902265210486500557833253659864420e-572L, -1.316435627800501400420564911396318e+03L}, {-505, 3.766861802943565461055947841315683e-575L, -1.322660186229776760246049868996457e+03L}, {-507, -7.429707698113541343305617044015155e-578L, -1.328888697233367943409552089116510e+03L}, {-509, 1.459667524187336216759453250297673e-580L, -1.335121145249918466152386952972570e+03L}, {-511, -2.856492219544689269587971135611884e-583L, -1.341357514840122170586584414573452e+03L}, {-513, 5.568210954278146724343023656163517e-586L, -1.347597790685292940120779177716107e+03L}, {-515, -1.081206010539445965891849253623984e-588L, -1.353841957585956676266148539364387e+03L}, {-517, 2.091307563906085040409766448015443e-591L, -1.360090000460465105397031433612124e+03L}, {-519, -4.029494342786291021984135737987366e-594L, -1.366341904343630994035360179237488e+03L}, {-521, 7.734154208802861846418686637211834e-597L, -1.372597654385384360953449074944005e+03L}, {-523, -1.478805776061732666619251747076833e-599L, -1.378857235849449283854259218120919e+03L}, {-525, 2.816772906784252698322384280146348e-602L, -1.385120634112040907599961334767737e+03L}, {-527, -5.344920126725337188467522353218876e-605L, -1.391387834660582269926140033710152e+03L}, {-529, 1.010381876507625177404068497772945e-607L, -1.397658823092440569307753539373772e+03L}, {-531, -1.902790727886299769122539543828521e-610L, -1.403933585113682508141160080221337e+03L}, {-533, 3.569963842188179679404389388046005e-613L, -1.410212106537848352681080331035940e+03L}, {-535, -6.672829611566690989540914744011225e-616L, -1.416494373284744359228985489186189e+03L}, {-537, 1.242612590608322344421026954192034e-618L, -1.422780371379253223916558538853133e+03L}, {-539, -2.305403693150876334732888597758876e-621L, -1.429070086950162221070831187917985e+03L}, {-541, 4.261374663864836108563564875709568e-624L, -1.435363506229008702592401373530570e+03L}, {-543, -7.847835476730821562732163675339904e-627L, -1.441660615548942638030635705806125e+03L}, {-545, 1.439969812244187442703149298227505e-629L, -1.447961401343605882105613781591560e+03L}, {-547, -2.632485945601805196897896340452478e-632L, -1.454265850146027863311246514213158e+03L}, {-549, 4.795056367216402908739337596452602e-635L, -1.460573948587537393942788393790429e+03L}, {-551, -8.702461646490749380652155347463887e-638L, -1.466885683396690308429980693254678e+03L}, {-553, 1.573682033723462817477785777118244e-640L, -1.473201041398212643229258991539603e+03L}, {-555, -2.835463123826059130590605003816655e-643L, -1.479520009511959077739623091780783e+03L}, {-557, 5.090598067910339552227298031986813e-646L, -1.485842574751886361761534518717628e+03L}, {-559, -9.106615506100786318832375728062277e-649L, -1.492168724225041460921060848672539e+03L}, {-561, 1.623282621408339807278498347248178e-651L, -1.498498445130564157236767572105300e+03L}, {-563, -2.883272862181775856622554790849339e-654L, -1.504831724758703847618768409093918e+03L}, {-565, 5.103137809171284701986822638671396e-657L, -1.511168550489850288561951299920760e+03L}, {-567, -9.000243049684805470876230403300522e-660L, -1.517508909793578040632637633611893e+03L}, {-569, 1.581765035093990416674205694780408e-662L, -1.523852790227704371553619818421277e+03L}, {-571, -2.770166436241664477538013475972694e-665L, -1.530200179437360381770349784617217e+03L}, {-573, 4.834496398327512177204211999952345e-668L, -1.536551065154075121334594979806342e+03L}, {-575, -8.407819823178282047311673043395383e-671L, -1.542905435194872471774603251304604e+03L}, {-577, 1.457161147864520285495957199895214e-673L, -1.549263277461380571336079826611875e+03L}, {-579, -2.516685920318687885139822452323340e-676L, -1.555624579938953566579330002902181e+03L}, {-581, 4.331645301753335430533257232914526e-679L, -1.561989330695805477807910827868915e+03L}, {-583, -7.429923330623216861978142766577231e-682L, -1.568357517882155970186117240585909e+03L}, {-585, 1.270072364209096899483443207961920e-684L, -1.574729129729387826679561977834546e+03L}, {-587, -2.163666719265923167774179229918092e-687L, -1.581104154549215923127862278332116e+03L}, {-589, 3.673457927446389079412867962509494e-690L, -1.587482580732867509833800470088546e+03L}, {-591, -6.215664851855142266350030393417080e-693L, -1.593864396750273608031975512654631e+03L}, {-593, 1.048172824933413535640814568873032e-695L, -1.600249591149271333484522132398281e+03L}, {-595, -1.761634999888089975866915241803415e-698L, -1.606638152554816963244477779092824e+03L}, {-597, 2.950812395122428770296340438531683e-701L, -1.613030069668209565331283145621615e+03L}, {-599, -4.926231043610064725035626775511993e-704L, -1.619425331266325014680093344794496e+03L}, {-601, 8.196723866239708361124171007507475e-707L, -1.625823926200860222259366425301076e+03L}, {-603, -1.359324024252024603834854230100742e-709L, -1.632225843397587407701826987771284e+03L}, {-605, 2.246816569011610915429511124133458e-712L, -1.638631071855618249164551634260441e+03L}, {-607, -3.701509998371681903508255558704214e-715L, -1.645039600646677747426701606495287e+03L}, {-609, 6.078013133615241220867414710515950e-718L, -1.651451418914387644450385476508015e+03L}, {-611, -9.947648336522489723187258118684043e-721L, -1.657866515873559239773259914619352e+03L}, {-613, 1.622781131569737312102325957370970e-723L, -1.664284880809495451172699647212929e+03L}, {-615, -2.638668506617459044068822694912146e-726L, -1.670706503077301969042562415156115e+03L}, {-617, 4.276610221422137834795498695157448e-729L, -1.677131372101207356856559986834725e+03L}, {-619, -6.908901811667427842965264450981339e-732L, -1.683559477373891952958788022224875e+03L}, {-621, 1.112544575147733952168319557323887e-734L, -1.689990808455825431723780510767452e+03L}, {-623, -1.785785834908080180045456753328872e-737L, -1.696425354974612884867203679051565e+03L}, {-625, 2.857257335852928288072730805326195e-740L, -1.702863106624349286365606716384470e+03L}, {-627, -4.557029243784574622125567472609561e-743L, -1.709304053164982207061072932631246e+03L}, {-629, 7.244879560865778413554161323703594e-746L, -1.715748184421682647585690562920150e+03L}, {-631, -1.148158409012009257298599258907067e-748L, -1.722195490284223860742969300953816e+03L}, {-633, 1.813836349150093613425907202064877e-751L, -1.728645960706368036930106502456193e+03L}, {-635, -2.856435195511958446340011341834452e-754L, -1.735099585705260728577754702597135e+03L}, {-637, 4.484199678982666320784947161435560e-757L, -1.741556355360832891924018895525587e+03L}, {-639, -7.017526884166926949585206825407763e-760L, -1.748016259815210426728138840531945e+03L}, {-641, 1.094777985049442581838565807395907e-762L, -1.754479289272131096767972247069947e+03L}, {-643, -1.702609619050455026187505143695034e-765L, -1.760945433996368716155236815573495e+03L}, {-645, 2.639704835737139575484504098751991e-768L, -1.767414684313164488644705662656989e+03L}, {-647, -4.079914738388160085756575113990712e-771L, -1.773887030607665389209360731872647e+03L}, {-649, 6.286463387346933876358359189508031e-774L, -1.780362463324369479204038725824331e+03L}, {-651, -9.656625787015259410688723793407114e-777L, -1.786840972966578048446468488129240e+03L}, {-653, 1.478809462023776326292300734059282e-779L, -1.793322550095854479507881439200438e+03L}, {-655, -2.257724369501948589759237761922569e-782L, -1.799807185331489731426631622544834e+03L}, {-657, 3.436414565451976544534608465635568e-785L, -1.806294869349974341938514221876117e+03L}, {-659, -5.214589628910434817199709356047903e-788L, -1.812785592884476849157718095726937e+03L}, {-661, 7.888940437080839360362646529573228e-791L, -1.819279346724328535443558785315416e+03L}, {-663, -1.189885435457140175016990426783292e-793L, -1.825776121714514397951257052611777e+03L}, {-665, 1.789301406702466428596978085388410e-796L, -1.832275908755170252090972192120334e+03L}, {-667, -2.682610804651373955917508373895666e-799L, -1.838778698801085875808962216984506e+03L}, {-669, 4.009881621302502176259354818977080e-802L, -1.845284482861214104258993567431152e+03L}, {-671, -5.975978571240688787271765751083577e-805L, -1.851793251998185786051806900112542e+03L}, {-673, 8.879611547162984825069488486008286e-808L, -1.858304997327830513856385811276899e+03L}, {-675, -1.315498006987108862973257553482709e-810L, -1.864819710018703043679773065654119e+03L}, {-677, 1.943128518444769369236717213416114e-813L, -1.871337381291615318673013757589439e+03L}, {-679, -2.861750395353121309626976750244645e-816L, -1.877858002419174014800235831954586e+03L}, {-681, 4.202276645158768442917733847642650e-819L, -1.884381564725323527166644458768342e+03L}, {-683, -6.152674443863496988166521006797438e-822L, -1.890908059584894317230027303917152e+03L}, {-685, 8.982006487391966406082512418682391e-825L, -1.897437478423156542519943253378358e+03L}, {-687, -1.307424525093444891715067309851876e-827L, -1.903969812715378891859779734219214e+03L}, {-689, 1.897568251224158043127819027361214e-830L, -1.910505053986392550429977690799808e+03L}, {-691, -2.746119032162312652862256190103059e-833L, -1.917043193810160220326585448869631e+03L}, {-693, 3.962653726063943222023457705776420e-836L, -1.923584223809350123558543235664884e+03L}, {-695, -5.701660037502076578451018281692691e-839L, -1.930128135654914915690332779916986e+03L}, {-697, 8.180286997850898964779079313762828e-842L, -1.936674921065675439574449077907897e+03L}, {-699, -1.170284262925736618709453406833023e-844L, -1.943224571807909249831146548019488e+03L}, {-701, 1.669449733132291895448578326437978e-847L, -1.949777079694943839921646896443516e+03L}, {-703, -2.374750687243658457252600748844919e-850L, -1.956332436586754504826024019546435e+03L}, {-705, 3.368440691125756676954043615382864e-853L, -1.962890634389566773478840974786356e+03L}, {-707, -4.764413990276883560048152214120034e-856L, -1.969451665055463346234830525796712e+03L}, {-709, 6.719906897428608688361286620761684e-859L, -1.976015520581995473733995722853511e+03L}, {-711, -9.451345847297621221323891168441187e-862L, -1.982582193011798714610959158868838e+03L}, {-713, 1.325574452636412513509662155461597e-864L, -1.989151674432213010547695076025190e+03L}, {-715, -1.853950283407569948964562455191045e-867L, -1.995723956974907018202411266377947e+03L}, {-717, 2.585704718839009691721844428439393e-870L, -2.002299032815506638560769675209132e+03L}, {-719, -3.596251347481237401560284323281492e-873L, -2.008876894173227685249296161271018e+03L}, {-721, 4.987865946575918726158508076673360e-876L, -2.015457533310512634325170116329515e+03L}, {-723, -6.898846399136817048628641876450013e-879L, -2.022040942532671399012031772885148e+03L}, {-725, 9.515650205705954549832609484758638e-882L, -2.028627114187526073788416563583962e+03L}, {-727, -1.308892738061341753759643670530762e-884L, -2.035216040665059593154329016552806e+03L}, {-729, 1.795463289521730800767686790851525e-887L, -2.041807714397068251302700487974341e+03L}, {-731, -2.456174130672682353991363598976095e-890L, -2.048402127856818029806422865105560e+03L}, {-733, 3.350851474314709896304725237348014e-893L, -2.054999273558704681298692013804345e+03L}, {-735, -4.558981597707088294292143180065325e-896L, -2.061599144057917517974898723861380e+03L}, {-737, 6.185863768937704605552433080142911e-899L, -2.068201731950106854578630739435709e+03L}, {-739, -8.370586967439383769353766008312464e-902L, -2.074807029871055056352847898310789e+03L}, {-741, 1.129633868750254219885798381688592e-904L, -2.081415030496351143240305658421165e+03L}, {-743, -1.520368598587152382080482344130002e-907L, -2.088025726541068902405164277260800e+03L}, {-745, 2.040763219580070311517425965275171e-910L, -2.094639110759448461920757464869130e+03L}, {-747, -2.731945407737711260398160596084566e-913L, -2.101255175944581279227023427566267e+03L}, {-749, 3.647457153187865501199146323210368e-916L, -2.107873914928098498705433179126733e+03L}, {-751, -4.856800470290100534219901895087042e-919L, -2.114495320579862633449688692529600e+03L}, {-753, 6.449934223492829394714345146197931e-922L, -2.121119385807662527027302523005531e+03L}, {-755, -8.542959236414343569158073041321763e-925L, -2.127746103556911551730699518638241e+03L}, {-757, 1.128528300715236931196575038483720e-927L, -2.134375466810349000506981844410134e+03L}, {-759, -1.486862056278309527268214806961423e-930L, -2.141007468587744630433245786056832e+03L}, {-761, 1.953826617974125528604750074850753e-933L, -2.147642101945606316269601164804689e+03L}, {-763, -2.560716406257045253741481094168746e-936L, -2.154279359976890773275083834000341e+03L}, {-765, 3.347341707525549351296053717867642e-939L, -2.160919235810717309112724618425286e+03L}, {-767, -4.364200400945957433241269514820916e-942L, -2.167561722612084565299394156240570e+03L}, {-769, 5.675163070150789900183705480911464e-945L, -2.174206813581590209273926513086492e+03L}, {-771, -7.360782192154072503480811259288539e-948L, -2.180854501955153538763673552638175e+03L}, {-773, 9.522357299035022643571554022365510e-951L, -2.187504781003740960725289704199962e+03L}, {-775, -1.228691264391615824976974712563292e-953L, -2.194157644033094307720420387190957e+03L}, {-777, 1.581327238599248165993532448601405e-956L, -2.200813084383461955161289080842354e+03L}, {-779, -2.029945107316108043637397238255976e-959L, -2.207471095429332703425164871647280e+03L}, {-781, 2.599161469034709402864785196230442e-962L, -2.214131670579172389390556269757758e+03L}, {-783, -3.319491020478556070069968322133388e-965L, -2.220794803275163192491925277500887e+03L}, {-785, 4.228650981501345312191042448577564e-968L, -2.227460486992945600923950482070517e+03L}, {-787, -5.373127041297770409391413530594110e-971L, -2.234128715241363004151087059519001e+03L}, {-789, 6.810046947145463129773654664884803e-974L, -2.240799481562208878393568231020129e+03L}, {-791, -8.609414598161141756983128527035149e-977L, -2.247472779529976532267255715257188e+03L}, {-793, 1.085676494093460498989045211479842e-979L, -2.254148602751611380252060591802179e+03L}, {-795, -1.365630810180453457847855611924330e-982L, -2.260826944866265712152201065511357e+03L}, {-797, 1.713464002735826170449003277194893e-985L, -2.267507799545055927191516159314716e+03L}, {-799, -2.144510641721935131976224376964822e-988L, -2.274191160490822201858586644602362e+03L}, {-801, 2.677291687542990177248719571741351e-991L, -2.280877021437890561079694950616877e+03L}, {-803, -3.334111690589028863323436577511023e-994L, -2.287565376151837322752849003052281e+03L}, {-805, 4.141753652905625917171970903740400e-997L, -2.294256218429255886123361867960760e+03L}, {-807, -5.132284576091234098106531479232219e-1000L, -2.300949542097525834920977066378178e+03L}, {-809, 6.343985878975567488388790456405709e-1003L, -2.307645341014584326610412318840864e+03L}, {-811, -7.822424018465557938827115236011972e-1006L, -2.314343609068699739531612699514593e+03L}, {-813, 9.621677759490231167069022430519031e-1009L, -2.321044340178247550123104814824722e+03L}, {-815, -1.180573958219660265898039562026875e-1011L, -2.327747528291488412831770506524068e+03L}, {-817, 1.445010964773145980291358093056150e-1014L, -2.334453167386348415715252376469302e+03L}, {-819, -1.764360152348163590099338330959890e-1017L, -2.341161251470201485139201707128156e+03L}, {-821, 2.149037944394839939219656919561377e-1020L, -2.347871774579653913360816655357998e+03L}, {-823, -2.611224719799319488723762964230106e-1023L, -2.354584730780330983172726528323443e+03L}, {-825, 3.165120872484023622695470259672856e-1026L, -2.361300114166665664157385235804783e+03L}, {-827, -3.827232010258795190683760894404904e-1029L, -2.368017918861689355471869573651666e+03L}, {-829, 4.616685175221707105770519776121718e-1032L, -2.374738139016824650446459012391509e+03L}, {-831, -5.555577828184966432936846902673548e-1035L, -2.381460768811680098637723655177956e+03L}, {-833, 6.669361138277270627775326413773767e-1038L, -2.388185802453846941328183895282715e+03L}, {-835, -7.987258848236252248832726244040439e-1041L, -2.394913234178697796810044405392686e+03L}, {-837, 9.542722638275092292512217734815340e-1044L, -2.401643058249187272130159305427996e+03L}, {-839, -1.137392447946971667760693412969647e-1046L, -2.408375268955654478307365134236396e+03L}, {-841, 1.352428594467267143591787649191019e-1049L, -2.415109860615627426361731678301120e+03L}, {-843, -1.604304382523448568910780129526713e-1052L, -2.421846827573629281818233561862736e+03L}, {-845, 1.898585068075087063799739798256465e-1055L, -2.428586164200986455664941296079093e+03L}, {-847, -2.241540812367281067059905310810467e-1058L, -2.435327864895638510058170535978466e+03L}, {-849, 2.640212970986196780989287763027640e-1061L, -2.442071924081949857374211768362184e+03L}, {-851, -3.102482927128315841350514410138238e-1064L, -2.448818336210523231509386616865025e+03L}, {-853, 3.637142939189115874971294736387148e-1067L, -2.455567095758014910627336416778564e+03L}, {-855, -4.253968349928790497042449984078536e-1070L, -2.462318197226951670844736694017523e+03L}, {-857, 4.963790373312474325603792280138315e-1073L, -2.469071635145549450634138735925816e+03L}, {-859, -5.778568537034312369736661560114453e-1076L, -2.475827404067533706005455712362988e+03L}, {-861, 6.711461715487006236627946062850700e-1079L, -2.482585498571961436805823073716391e+03L}, {-863, -7.776896541699891351828442714774855e-1082L, -2.489345913263044864751256675621604e+03L}, {-865, 8.990631840115481331593575392803301e-1085L, -2.496108642769976744072790935343271e+03L}, {-867, -1.036981757798786774116906042999227e-1087L, -2.502873681746757285924685249815940e+03L}, {-869, 1.193304669503782248696094410816142e-1090L, -2.509641024872022677962920138935387e+03L}, {-871, -1.370039804252333236160843181189600e-1093L, -2.516410666848875180758643698373316e+03L}, {-873, 1.569346854813669228133840986471478e-1096L, -2.523182602404714782963550910468865e+03L}, {-875, -1.793539262644193403581532555967403e-1099L, -2.529956826291072397392458541211987e+03L}, {-877, 2.045084678043550061096388319233071e-1102L, -2.536733333283444580432650568821592e+03L}, {-879, -2.326603729287315200337188076488135e-1105L, -2.543512118181129757429985654321327e+03L}, {-881, 2.640866889088893530462188509067123e-1108L, -2.550293175807065936938349907152011e+03L}, {-883, -2.990789228866244088858650633145100e-1111L, -2.557076501007669896951874504032964e+03L}, {-885, 3.379422857475982021309209754966214e-1114L, -2.563862088652677826468486558976833e+03L}, {-887, -3.809946851720385593358748314505315e-1117L, -2.570649933634987405958889607629646e+03L}, {-889, 4.285654501372762197253935111929488e-1120L, -2.577440030870501310537042401180805e+03L}, {-891, -4.809937711978408751126750967373163e-1123L, -2.584232375297972119846685325706460e+03L}, {-893, 5.386268434466303192751120904113284e-1126L, -2.591026961878848618893515303808120e+03L}, {-895, -6.018177021750059433241475870517636e-1129L, -2.597823785597123474264293867571368e+03L}, {-897, 6.709227448996721776188936310499036e-1132L, -2.604622841459182270382549353081666e+03L}, {-899, -7.462989375969657148152320701333745e-1135L, -2.611424124493653890655661789438570e+03L}, {-901, 8.283007076547899165540866483167308e-1138L, -2.618227629751262228570055793195473e+03L}, {-903, -9.172765311791693428062975064415623e-1141L, -2.625033352304679213990029233689184e+03L}, {-905, 1.013565227822286566636792824797306e-1143L, -2.631841287248379140111469080061043e+03L}, {-907, -1.117491982163491253182792530096259e-1146L, -2.638651429698494276714405049015679e+03L}, {-909, 1.229364116791519530454117194825367e-1149L, -2.645463774792671755548079737756437e+03L}, {-911, -1.349466648508802997205397579391182e-1152L, -2.652278317689931713869023089143022e+03L}, {-913, 1.478057665398469876457171499880813e-1155L, -2.659095053570526682336560504944278e+03L}, {-915, -1.615363568741497132740078141946243e-1158L, -2.665913977635802203651307898617853e+03L}, {-917, 1.761574229816245510076421092634944e-1161L, -2.672735085108058668500562675372465e+03L}, {-919, -1.916838117319091958733864083389493e-1164L, -2.679558371230414355550135293406521e+03L}, {-921, 2.081257456372521127832642870129742e-1167L, -2.686383831266669662395129001210726e+03L}, {-923, -2.254883484693955718128540487681194e-1170L, -2.693211460501172514552511943184804e+03L}, {-925, 2.437711875344816992571395121817507e-1173L, -2.700041254238684939746081557522288e+03L}, {-927, -2.629678398430223292957276291065272e-1176L, -2.706873207804250794899640650311187e+03L}, {-929, 2.830654896049755966584796868746256e-1179L, -2.713707316543064633416931447058338e+03L}, {-931, -3.040445645595871070445539064174282e-1182L, -2.720543575820341700487151179977113e+03L}, {-933, 3.258784186062026870788359125588726e-1185L, -2.727381981021189044312742420779468e+03L}, {-935, -3.485330680280242642554394786725911e-1188L, -2.734222527550477731311654658308532e+03L}, {-937, 3.719669882903140493654636912194142e-1191L, -2.741065210832716153499450998905698e+03L}, {-939, -3.961309779449563891006003101378212e-1194L, -2.747910026311924416407525009451877e+03L}, {-941, 4.209680955844382455904360362782372e-1197L, -2.754756969451509796042336543353359e+03L}, {-943, -4.464136750630310133514698157775580e-1200L, -2.761606035734143253537010059558207e+03L}, {-945, 4.723954233471227654512908103466223e-1203L, -2.768457220661636996290901907345644e+03L}, {-947, -4.988336043792215052283957870608471e-1206L, -2.775310519754823074534871036028945e+03L}, {-949, 5.256413112531311962364549916341908e-1209L, -2.782165928553433002400016632327949e+03L}, {-951, -5.527248278161211316892271205406844e-1212L, -2.789023442615978392705611639734171e+03L}, {-953, 5.799840795552162976801963489409071e-1215L, -2.795883057519632594817897656044765e+03L}, {-955, -6.073131723091270132776925119800074e-1218L, -2.802744768860113325065348365330194e+03L}, {-957, 6.346010159969979240101280166980223e-1221L, -2.809608572251566279327988826177443e+03L}, {-959, -6.617320291939498686236997045860503e-1224L, -2.816474463326449717548409369048866e+03L}, {-961, 6.885869190363682295772109308907912e-1227L, -2.823342437735420010040267697697951e+03L}, {-963, -7.150435296327811314405097932406970e-1230L, -2.830212491147218135596362586988819e+03L}, {-965, 7.409777509147990999383521173478725e-1233L, -2.837084619248557121522818277375428e+03L}, {-967, -7.662644787123051705670652713007989e-1236L, -2.843958817744010415848570663101738e+03L}, {-969, 7.907786158021725186450621994848286e-1239L, -2.850835082355901182080224470388422e+03L}, {-971, -8.143961027828759203347705452984847e-1242L, -2.857713408824192506991484083735745e+03L}, {-973, 8.369949668888755604673900773879596e-1245L, -2.864593792906378512053778221398063e+03L}, {-975, -8.584563762962826261204000793722663e-1248L, -2.871476230377376359230428472743004e+03L}, {-977, 8.786656870995728005326510536051856e-1251L, -2.878360717029419141970781458411325e+03L}, {-979, -8.975134699689201231181318218643367e-1254L, -2.885247248671949652353161217529960e+03L}, {-981, 9.148965035361061397738346807995277e-1257L, -2.892135821131515015436329024456014e+03L}, {-983, -9.307187218068221157414391462863964e-1260L, -2.899026430251662181988388361725470e+03L}, {-985, 9.448921033571798129354712145039557e-1263L, -2.905919071892834270869768918387859e+03L}, {-987, -9.573374907367576625486030542086684e-1266L, -2.912813741932267752453090467037997e+03L}, {-989, 9.679853293597145222938352418692300e-1269L, -2.919710436263890464567370062383153e+03L}, {-991, -9.767763162055646037273816769618869e-1272L, -2.926609150798220452557218512631923e+03L}, {-993, 9.836619498545464287284810442717895e-1275L, -2.933509881462265625149398374708423e+03L}, {-995, -9.886049747281873655562623560520498e-1278L, -2.940412624199424217919409255333517e+03L}, {-997, 9.915797138697967558237335567222164e-1281L, -2.947317374969386056249649978808221e+03L}, {-999, -9.925722861559527085322658225447612e-1284L, -2.954224129748034609768203810190020e+03L}, {-1001, 9.915807054505022063259398826620990e-1287L, -2.961132884527349830353424593952994e+03L}, {-1003, -9.886148608678985107935592050469582e-1290L, -2.968043635315311765884290178944586e+03L}, {-1005, 9.836963789730333440731932388526948e-1293L, -2.974956378135804942009956255511099e+03L}, {-1007, -9.768583703803707488313736234882769e-1296L, -2.981871109028523504304109752082016e+03L}, {-1009, 9.681450647971959849666735614353587e-1299L, -2.988787824048877113260606872907396e+03L}, {-1011, -9.576113400565736745466602981556466e-1302L, -2.995706519267897584676506984698967e+03L}, {-1013, 9.453221520795396589799213209828694e-1305L, -3.002627190772146268056999795611655e+03L}, {-1015, -9.313518739699898118028781487515955e-1308L, -3.009549834663622155763889179720687e+03L}, {-1017, 9.157835535594786743391132239445383e-1311L, -3.016474447059670715715261801688148e+03L}, {-1019, -8.987080996658279434142426142733447e-1314L, -3.023401024092893440528751267655306e+03L}, {-1021, 8.802234080958158113753600531570466e-1317L, -3.030329561911058106084427414384290e+03L}, {-1023, -8.604334389988424353620332875435451e-1320L, -3.037260056677009732565813767523719e+03L}, {-1025, 8.394472575598462784019836951644343e-1323L, -3.044192504568582241118882049563209e+03L}, {-1027, -8.173780502043293850068000926625456e-1326L, -3.051126901778510799349108482546256e+03L}, {-1029, 7.943421284784542128345967858722503e-1329L, -3.058063244514344848955819786013508e+03L}, {-1031, -7.704579325688207689957291812533950e-1332L, -3.065001528998361808881124191118952e+03L}, {-1033, 7.458450460491972594343941735270039e-1335L, -3.071941751467481447427731155508592e+03L}, {-1035, -7.206232328977751298883035493014530e-1338L, -3.078883908173180916875929158147473e+03L}, {-1037, 6.949115071338236546656736251701572e-1341L, -3.085827995381410444204930081868771e+03L}, {-1039, -6.688272445946329688793778875554930e-1344L, -3.092774009372509671597717077795930e+03L}, {-1041, 6.424853454319240815363860591311171e-1347L, -3.099721946441124640481465999879238e+03L}, {-1043, -6.159974548724104329207920030020299e-1350L, -3.106671802896125412927563780897786e+03L}, {-1045, 5.894712486817324716945378019158181e-1353L, -3.113623575060524324306235511240865e+03L}, {-1047, -5.630097886167454361934458471020230e-1356L, -3.120577259271394861160830238000286e+03L}, {-1049, 5.367109519702053729203487579618903e-1359L, -3.127532851879791158335918130275245e+03L}, {-1051, -5.106669381257900788966210827420460e-1362L, -3.134490349250668109461532914339776e+03L}, {-1053, 4.849638538706458489046733929174226e-1365L, -3.141449747762802084963167382729031e+03L}, {-1055, -4.596813780764415629428183819122489e-1368L, -3.148411043808712251833510098327712e+03L}, {-1057, 4.348925052757252251114648835499044e-1371L, -3.155374233794582489467411687370640e+03L}, {-1059, -4.106633666437443107756986624644989e-1374L, -3.162339314140183895926202652724750e+03L}, {-1061, 3.870531259601737142089525565169641e-1377L, -3.169306281278797879061264523746790e+03L}, {-1063, -3.641139472814428167534831199595147e-1380L, -3.176275131657139826989695252491389e+03L}, {-1065, 3.418910303112139124445850891638635e-1383L, -3.183245861735283352477020711594051e+03L}, {-1067, -3.204227088202567126940816205846894e-1386L, -3.190218467986585105843199376793720e+03L}, {-1069, 2.997406069413065600505908518098123e-1389L, -3.197192946897610151068659007315391e+03L}, {-1071, -2.798698477509865173208131202705997e-1392L, -3.204169294968057899836804385150553e+03L}, {-1073, 2.608293082488224765338426097582477e-1395L, -3.211147508710688598308355752853946e+03L}, {-1075, -2.426319146500674200314814974495327e-1398L, -3.218127584651250361481030114033744e+03L}, {-1077, 2.252849718199326091285807775761678e-1401L, -3.225109519328406750045473452156271e+03L}, {-1079, -2.087905206857577471071184222207301e-1404L, -3.232093309293664884705002411821128e+03L}, {-1081, 1.931457175631431518104703258286125e-1407L, -3.239078951111304092982630115322711e+03L}, {-1083, -1.783432295135209157991415750956717e-1410L, -3.246066441358305083594043415423409e+03L}, {-1085, 1.643716401046275721651074424844901e-1413L, -3.253055776624279643519678691824620e+03L}, {-1087, -1.512158602618468925161981991577646e-1416L, -3.260046953511400852962820785835966e+03L}, {-1089, 1.388575392670770362866833784736130e-1419L, -3.267039968634333813433735163465741e+03L}, {-1091, -1.272754713722062660739536008007452e-1422L, -3.274034818620166884252247059282852e+03L}, {-1093, 1.164459939361447997016958836237376e-1425L, -3.281031500108343422812913172193420e+03L}, {-1095, -1.063433734576664837458409896107192e-1428L, -3.288030009750594024008001285621008e+03L}, {-1097, 9.694017635156470715208841350111144e-1432L, -3.295030344210869254253910632990574e+03L}, {-1099, -8.820762179396242688998035805378657e-1435L, -3.302032500165272875616440430970421e+03L}, {-1101, 8.011591443593317610352439423595511e-1438L, -3.309036474301995555579455108146502e+03L}, {-1103, -7.263455524563297924163589685943346e-1441L, -3.316042263321249058050011563481486e+03L}, {-1105, 6.573262918156830700600533652437417e-1444L, -3.323049863935200911240915344874150e+03L}, {-1107, -5.937906881803821771093526334631813e-1447L, -3.330059272867909548118967843957956e+03L}, {-1109, 5.354289343375853716044658552418227e-1450L, -3.337070486855259915153864214941207e+03L}, {-1111, -4.819342343272595604000592756452049e-1453L, -3.344083502644899545148810356786085e+03L}, {-1113, 4.330047028996042770890020446048562e-1456L, -3.351098316996175089979455423905480e+03L}, {-1115, -3.883450250220666162233202193765526e-1459L, -3.358114926680069309112692288448429e+03L}, {-1117, 3.476678827413309008266071793881402e-1462L, -3.365133328479138509821270370292175e+03L}, {-1119, -3.106951588394378023472807679965507e-1465L, -3.372153519187450435054001350134199e+03L}, {-1121, 2.771589284919159699797330669014726e-1468L, -3.379175495610522594964626427939806e+03L}, {-1123, -2.468022515511273107566634611767342e-1471L, -3.386199254565261038145161797406766e+03L}, {-1125, 2.193797791565576095614786321570971e-1474L, -3.393224792879899558651754565880290e+03L}, {-1127, -1.946581891362534246330777570160578e-1477L, -3.400252107393939334952772024198986e+03L}, {-1129, 1.724164651339711467077748069229918e-1480L, -3.407281194958088996970020407452300e+03L}, {-1131, -1.524460346012123313066090246887638e-1483L, -3.414312052434205117424652412163150e+03L}, {-1133, 1.345507807601167972697343554181499e-1486L, -3.421344676695233123739482958056169e+03L}, {-1135, -1.185469434009839623521888593992510e-1489L, -3.428379064625148626789097098966228e+03L}, {-1137, 1.042629229560105209781784163581803e-1492L, -3.435415213118899162828309580786804e+03L}, {-1139, -9.153900171730511060419527336100111e-1496L, -3.442453119082346344968229187401041e+03L}, {-1141, 8.022699537011841420174870583786249e-1499L, -3.449492779432208420607399472510605e+03L}, {-1143, -7.018984721795136850546693424134951e-1502L, -3.456534191096003231263237403792167e+03L}, {-1145, 6.130117660956451397857374169550176e-1505L, -3.463577351011991571286279398729325e+03L}, {-1147, -5.344479216178248821148538944681932e-1508L, -3.470622256129120941976576658724899e+03L}, {-1149, 4.651417942713880610225012136363735e-1511L, -3.477668903406969697657964958498974e+03L}, {-1151, -4.041197170038123901151183437327311e-1514L, -3.484717289815691580301874370753396e+03L}, {-1153, 3.504941170891694623721754932634268e-1517L, -3.491767412335960639327847953417242e+03L}, {-1155, -3.034581100339129544347839768514518e-1520L, -3.498819267958916533243011254308799e+03L}, {-1157, 2.622801296749463737552151917471493e-1523L, -3.505872853686110209817382557291035e+03L}, {-1159, -2.262986451034912629466912784703618e-1526L, -3.512928166529449961526142973826348e+03L}, {-1161, 1.949170069797513031409916265894589e-1529L, -3.519985203511147853023801552050462e+03L}, {-1163, -1.675984582800957034746273659410653e-1532L, -3.527043961663666517448599220381250e+03L}, {-1165, 1.438613375794812905361608291339616e-1535L, -3.534104438029666318388502204589145e+03L}, {-1167, -1.232744966405152446753734611259311e-1538L, -3.541166629661952874372746070059700e+03L}, {-1169, 1.054529483665656498506188717929265e-1541L, -3.548230533623424942785111173579888e+03L}, {-1171, -9.005375607734043539762499726125236e-1545L, -3.555296146987022660126944406759827e+03L}, {-1173, 7.677217056891767723582693713661753e-1548L, -3.562363466835676135589395939446433e+03L}, {-1175, -6.533801750546185296666122309499365e-1551L, -3.569432490262254394925418408782658e+03L}, {-1177, 5.551233432919443752477589048002858e-1554L, -3.576503214369514671642784751177646e+03L}, {-1179, -4.708425303578832699302450422394282e-1557L, -3.583575636270052042569724665662661e+03L}, {-1181, 3.986812280761077645472015598979070e-1560L, -3.590649753086249404874763476541430e+03L}, {-1183, -3.370086458800572819502971765831843e-1563L, -3.597725561950227791651975804168004e+03L}, {-1185, 2.843954817553226008019385456398180e-1566L, -3.604803060003797023212144754279634e+03L}, {-1187, -2.395918127677528229165446888288272e-1569L, -3.611882244398406691249250024918427e+03L}, {-1189, 2.015069913942412303755632370301322e-1572L, -3.618963112295097473080300060323826e+03L}, {-1191, -1.691914285426038878048389899497332e-1575L, -3.626045660864452773184778737590925e+03L}, {-1193, 1.418201412762815488724551466468845e-1578L, -3.633129887286550689297900569463099e+03L}, {-1195, -1.186779424906121747886653946835854e-1581L, -3.640215788750916300339464492390588e+03L}, {-1197, 9.914615078580799898802455696205962e-1585L, -3.647303362456474273487369363039764e+03L}, {-1199, -8.269070123920600416015392573983288e-1588L, -3.654392605611501787731808623069938e+03L}, {-1201, 6.885154141482598181528220294740456e-1591L, -3.661483515433581771272801460780156e+03L}, {-1203, -5.723320150858352603099102489393563e-1594L, -3.668576089149556450150047385104428e+03L}, {-1205, 4.749643278720624566887221982899222e-1597L, -3.675670323995481205520114555756365e+03L}, {-1207, -3.935081423960749434040780433222222e-1600L, -3.682766217216578737021693544906751e+03L}, {-1209, 3.254823344880686049661522277272309e-1603L, -3.689863766067193529695071441909781e+03L}, {-1211, -2.687715396268113996417442012611321e-1606L, -3.696962967810746621947110295041665e+03L}, {-1213, 2.215758776808008241069614190116505e-1609L, -3.704063819719690672077852696203994e+03L}, {-1215, -1.823669775150624066723962296392185e-1612L, -3.711166319075465320909429681721833e+03L}, {-1217, 1.498496117625820925820840013469339e-1615L, -3.718270463168452848082215813751332e+03L}, {-1219, -1.229283115361625041690598862567136e-1618L, -3.725376249297934119607167035722171e+03L}, {-1221, 1.006783878265049174193774662217146e-1621L, -3.732483674772044824286992320208090e+03L}, {-1223, -8.232084041414956452933562242168000e-1625L, -3.739592736907731996642253853285617e+03L}, {-1225, 6.720068605236699145251887544626939e-1628L, -3.746703433030710824001666077438955e+03L}, {-1227, -5.476828529125264177059403051855696e-1631L, -3.753815760475421735438774844885006e+03L}, {-1229, 4.456329153071817882066235192722291e-1634L, -3.760929716584987770259847663018353e+03L}, {-1231, -3.620088670245181057730491626906816e-1637L, -3.768045298711172223770197941242025e+03L}, {-1233, 2.936000543588954629140706915577304e-1640L, -3.775162504214336568068303621843850e+03L}, {-1235, -2.377328375375671764486402360791340e-1643L, -3.782281330463398645638966896050529e+03L}, {-1237, 1.921849939673138047280842652216119e-1646L, -3.789401774835791133538400121145037e+03L}, {-1239, -1.551129894812863637837645401304374e-1649L, -3.796523834717420275985516769499123e+03L}, {-1241, 1.249903219027287379401809348351631e-1652L, -3.803647507502624883194858412974434e+03L}, {-1243, -1.005553675806345437974102452414828e-1655L, -3.810772790594135594307502488046015e+03L}, {-1245, 8.076736351858196288948614075621108e-1659L, -3.817899681403034402296973964839455e+03L}, {-1247, -6.476933722420365909341310405470014e-1662L, -3.825028177348714438747630079385163e+03L}, {-1249, 5.185695534363783754476629628078474e-1665L, -3.832158275858840016423203961525892e+03L}, {-1251, -4.145240235302784775760695146345703e-1668L, -3.839289974369306927563183236918612e+03L}, {-1253, 3.308252382524169813057218791975820e-1671L, -3.846423270324202995864466394092077e+03L}, {-1255, -2.636057675318063596061528917909020e-1674L, -3.853558161175768880125285738664312e+03L}, {-1257, 2.097102366999255048577190865480525e-1677L, -3.860694644384359127547713917822919e+03L}, {-1259, -1.665688933279789554072431187832029e-1680L, -3.867832717418403474714184060034202e+03L}, {-1261, 1.320926989119579345021753519295820e-1683L, -3.874972377754368394272354269097471e+03L}, {-1263, -1.045864599461266306430525351778163e-1686L, -3.882113622876718885381338230562791e+03L}, {-1265, 8.267704343567322580478461278878762e-1690L, -3.889256450277880505990807686305793e+03L}, {-1267, -6.525417792870814980645983645523884e-1693L, -3.896400857458201645042752126087869e+03L}, {-1269, 5.142173201631847896490136836504243e-1696L, -3.903546841925916032703758812468409e+03L}, {-1271, -4.045769631496339808410807896541498e-1699L, -3.910694401197105486753554740165988e+03L}, {-1273, 3.178137966611421687675418614722307e-1702L, -3.917843532795662893273233839594240e+03L}, {-1275, -2.492657228714840539353269501742986e-1705L, -3.924994234253255419794080138115488e+03L}, {-1277, 1.951963374091496115390187550307742e-1708L, -3.932146503109287959085193127989679e+03L}, {-1279, -1.526163701400700637521647811030290e-1711L, -3.939300336910866801775227659160125e+03L}, {-1281, 1.191384622482982542952106019539649e-1714L, -3.946455733212763536020479646243917e+03L}, {-1283, -9.285928468300721301263491968352682e-1718L, -3.953612689577379172448283087463435e+03L}, {-1285, 7.226403477276825915380149391714150e-1721L, -3.960771203574708492621235641111423e+03L}, {-1287, -5.614921116765210501460877538239433e-1724L, -3.967931272782304619284141562604798e+03L}, {-1289, 4.356028795007921257921549680558133e-1727L, -3.975092894785243806671754410646060e+03L}, {-1291, -3.374150886915508333014368458991582e-1730L, -3.982256067176090449171419791636102e+03L}, {-1293, 2.609552116717330497304229279962554e-1733L, -3.989420787554862306650562703679350e+03L}, {-1295, -2.015098159627282237300563150550235e-1736L, -3.996587053528995944774636911427051e+03L}, {-1297, 1.553660878664057237702824325790466e-1739L, -4.003754862713312388656657346945880e+03L}, {-1299, -1.196043786500428974367070304688580e-1742L, -4.010924212729982988194772876756775e+03L}, {-1301, 9.193265076867248073536282126737744e-1746L, -4.018095101208495493469507959246674e+03L}, {-1303, -7.055460534817534975852864256897731e-1749L, -4.025267525785620338587309769444213e+03L}, {-1305, 5.406483168442555537052003261990599e-1752L, -4.032441484105377132371884291283646e+03L}, {-1307, -4.136559424975176386420813513382248e-1755L, -4.039616973819001354319492644986138e+03L}, {-1309, 3.160091233747269966708031713813788e-1758L, -4.046793992584911254248909475925419e+03L}, {-1311, -2.410443351447192957061809087577260e-1761L, -4.053972538068674954091120501426040e+03L}, {-1313, 1.835828904377146197305262062130434e-1764L, -4.061152607942977750278058187134518e+03L}, {-1315, -1.396067607891365929509704990213258e-1767L, -4.068334199887589615203744872731949e+03L}, {-1317, 1.060036148740596757410558079129277e-1770L, -4.075517311589332896245133330098614e+03L}, {-1319, -8.036665267176624392801804997189364e-1774L, -4.082701940742050210843707532714255e+03L}, {-1321, 6.083773858574280388192130959265226e-1777L, -4.089888085046572536162533135420420e+03L}, {-1323, -4.598468524999456075731013574652476e-1780L, -4.097075742210687491846929576618074e+03L}, {-1325, 3.470542283018457415646047980869793e-1783L, -4.104264909949107814430275564423556e+03L}, {-1327, -2.615329527519560976372304431702934e-1786L, -4.111455585983440021939658714485042e+03L}, {-1329, 1.967892797230670411115353221747881e-1789L, -4.118647768042153267269139966979810e+03L}, {-1331, -1.478506985147010075969461473890219e-1792L, -4.125841453860548378901325797713706e+03L}, {-1333, 1.109157528242318136511223911395513e-1795L, -4.133036641180727087570727804551594e+03L}, {-1335, -8.308296091702757576863100459891481e-1799L, -4.140233327751561437475041624662412e+03L}, {-1337, 6.214133202470274926599177606500734e-1802L, -4.147431511328663380652996927358058e+03L}, {-1339, -4.640876178095799048991170729276127e-1805L, -4.154631189674354553159819017114677e+03L}, {-1341, 3.460757776357791982842036338013518e-1808L, -4.161832360557636231683601935863626e+03L}, {-1343, -2.576885909425012645452000251685419e-1811L, -4.169035021754159469258024416022981e+03L}, {-1345, 1.915900304405213862789591265193620e-1814L, -4.176239171046195408738845128536702e+03L}, {-1347, -1.422346179959327292345650530952947e-1817L, -4.183444806222605772723493895564451e+03L}, {-1349, 1.054370778324186280463788384694550e-1820L, -4.190651925078813528604832377528851e+03L}, {-1351, -7.804372896552082016756390708323832e-1824L, -4.197860525416773727461792661325677e+03L}, {-1353, 5.768198740984539554143673842072308e-1827L, -4.205070605044944515501116613513602e+03L}, {-1355, -4.256973240578995980917840473854101e-1830L, -4.212282161778258316775814242920035e+03L}, {-1357, 3.137047340146644053734591358772367e-1833L, -4.219495193438093185917237046125564e+03L}, {-1359, -2.308349771999002247045321088132720e-1836L, -4.226709697852244329628823772898894e+03L}, {-1361, 1.696068899337988425455783312367906e-1839L, -4.233925672854895795700622614677425e+03L}, {-1363, -1.244364562977247560862643662779094e-1842L, -4.241143116286592328314626837379560e+03L}, {-1365, 9.116223904595220226099953573473219e-1846L, -4.248362025994211388421781682134717e+03L}, {-1367, -6.668781203068924817922423974742662e-1849L, -4.255582399830935337982230258316458e+03L}, {-1369, 4.871279184126314695341434605363523e-1852L, -4.262804235656223786870966449658521e+03L}, {-1371, -3.553084744074627786536422031629119e-1855L, -4.270027531335786101261554826276597e+03L}, {-1373, 2.587825742224783529888144232796154e-1858L, -4.277252284741554072310962466370012e+03L}, {-1375, -1.882055085254388021736832169306294e-1861L, -4.284478493751654743978826687947656e+03L}, {-1377, 1.366779292123738577877147544884745e-1864L, -4.291706156250383398824657203513219e+03L}, {-1379, -9.911379928380990412452121427735641e-1868L, -4.298935270128176700636542353585825e+03L}, {-1381, 7.176958673700934404382419571133701e-1871L, -4.306165833281585992754898046713977e+03L}, {-1383, -5.189413357701326395070440760038829e-1874L, -4.313397843613250750964666017144174e+03L}, {-1385, 3.746868850325867433263856144432368e-1877L, -4.320631299031872189839136174026924e+03L}, {-1387, -2.701419502758375943232772995264865e-1880L, -4.327866197452187021428237310316251e+03L}, {-1389, 1.944866452669817093760095748930788e-1883L, -4.335102536794941365193712402734432e+03L}, {-1391, -1.398178614428337234910205426981156e-1886L, -4.342340314986864808103070288993021e+03L}, {-1393, 1.003717598297442379691461182326745e-1889L, -4.349579529960644613803585763028333e+03L}, {-1395, -7.195108231522884442232696647503551e-1893L, -4.356820179654900079806906177159946e+03L}, {-1397, 5.150399593072930882056332603796386e-1896L, -4.364062262014157041624015561545628e+03L}, {-1399, -3.681486485398806920697878916223292e-1899L, -4.371305774988822522799408131914749e+03L}, {-1401, 2.627756235116921428049877884527689e-1902L, -4.378550716535159529802332908440407e+03L}, {-1403, -1.872955263803935444084018449413891e-1905L, -4.385797084615261990741891050375642e+03L}, {-1405, 1.333064244700309924614959750472520e-1908L, -4.393044877197029836881598448033562e+03L}, {-1407, -9.474514887706538199111298866187065e-1912L, -4.400294092254144225937769118010291e+03L}, {-1409, 6.724283099862695670057699692112892e-1915L, -4.407544727766042906154731018469884e+03L}, {-1411, -4.765615237322959369282565338138123e-1918L, -4.414796781717895720158456025311049e+03L}, {-1413, 3.372693020044557232330194860678077e-1921L, -4.422050252100580247598670961021297e+03L}, {-1415, -2.383528636073892036982469866203588e-1924L, -4.429305136910657585597917707501318e+03L}, {-1417, 1.682095014872189158068080357236124e-1927L, -4.436561434150348266034348511395093e+03L}, {-1419, -1.185408749029026890816124282759777e-1930L, -4.443819141827508308693278542723326e+03L}, {-1421, 8.342074236657472841774273629555084e-1934L, -4.451078257955605409330672520242574e+03L}, {-1423, -5.862314994137366719447838109314887e-1937L, -4.458338780553695261699816683580002e+03L}, {-1425, 4.113905259043766118910763585484131e-1940L, -4.465600707646398012600422474915265e+03L}, {-1427, -2.882904876695000784100044558853631e-1943L, -4.472864037263874849017324882500858e+03L}, {-1429, 2.017428185230931269489184435866782e-1946L, -4.480128767441804716423777374107387e+03L}, {-1431, -1.409803064452083346952609668670008e-1949L, -4.487394896221361167332107578957184e+03L}, {-1433, 9.838123269030588603995880451291055e-1953L, -4.494662421649189339182184219359353e+03L}, {-1435, -6.855835030683337006268906237833488e-1956L, -4.501931341777383060665757094809060e+03L}, {-1437, 4.770935999083741827605362726397695e-1959L, -4.509201654663462085592269017877382e+03L}, {-1439, -3.315452396861530109524227051006042e-1962L, -4.516473358370349453409202318443182e+03L}, {-1441, 2.300799720237009097518547571829314e-1965L, -4.523746450966348975497413686032317e+03L}, {-1443, -1.594455800580047884628238095515810e-1968L, -4.531020930525122846369230514381837e+03L}, {-1445, 1.103429619778579850953797989976339e-1971L, -4.538296795125669378904330342950809e+03L}, {-1447, -7.625636625974981692838963303222801e-1975L, -4.545574042852300862765603242170525e+03L}, {-1449, 5.262689182867482189674922914577502e-1978L, -4.552852671794621545144305838219623e+03L}, {-1451, -3.626939478199505299569209451810822e-1981L, -4.560132680047505732990855884852302e+03L}, {-1453, 2.496173075154511561988444220103800e-1984L, -4.567414065711076015894588620634650e+03L}, {-1455, -1.715582869522001073531576783576495e-1987L, -4.574696826890681608782701346826502e+03L}, {-1457, 1.177476231655457154105406165804046e-1990L, -4.581980961696876813615451461820817e+03L}, {-1459, -8.070433390373249856788253363975640e-1994L, -4.589266468245399599261446321148167e+03L}, {-1461, 5.523910602582648772613451994507625e-1997L, -4.596553344657150298743571477216341e+03L}, {-1463, -3.775742038675768128922386872527426e-2000L, -4.603841589058170423052747800969637e+03L}, {-1465, 2.577298319915200088001629264523841e-2003L, -4.611131199579621590733288400565675e+03L}, {-1467, -1.756849570494342254943169232804254e-2006L, -4.618422174357764572450143823405641e+03L}, {-1469, 1.195949333216026041486160131248641e-2009L, -4.625714511533938449754779442340822e+03L}, {-1471, -8.130179015744568602897077710731755e-2013L, -4.633008209254539887272822861151008e+03L}, {-1473, 5.519469800233923016223406456708592e-2016L, -4.640303265671002517542952296712946e+03L}, {-1475, -3.742013423887405434727733190988876e-2019L, -4.647599678939776437742769865753118e+03L}, {-1477, 2.533522968102508757432453074467756e-2022L, -4.654897447222307817543617174762016e+03L}, {-1479, -1.712997273902980904281577467523838e-2025L, -4.662196568685018617342445226649173e+03L}, {-1481, 1.156649070832532683512206257612315e-2028L, -4.669497041499286416124947053318012e+03L}, {-1483, -7.799386856591589234741781912422890e-2032L, -4.676798863841424348220200288087410e+03L}, {-1485, 5.252112361341137531812647752473326e-2035L, -4.684102033892661148213048726709369e+03L}, {-1487, -3.532019072858868548629890889356642e-2038L, -4.691406549839121303286377404034333e+03L}, {-1489, 2.372074595607030590080517722872157e-2041L, -4.698712409871805312271305441142524e+03L}, {-1491, -1.590928635551328363568422349344170e-2044L, -4.706019612186570050689135493655403e+03L}, {-1493, 1.065591852345163003059894406794487e-2047L, -4.713328154984109241074658647407807e+03L}, {-1495, -7.127704697960956542206651550464799e-2051L, -4.720638036469934027876119647014408e+03L}, {-1497, 4.761325783541053134406580862033934e-2054L, -4.727949254854353656232799983389316e+03L}, {-1499, -3.176334745524385012946351475673071e-2057L, -4.735261808352456253936776178323616e+03L}, {-1501, 2.116145733194127257126150216970734e-2060L, -4.742575695184089715890958151296986e+03L}, {-1503, -1.407947926276864442532368740499490e-2063L, -4.749890913573842690381008392547576e+03L}, {-1505, 9.355135722769863405530689305644452e-2067L, -4.757207461751025666484187347137591e+03L}, {-1507, -6.207787473636272996370729466253783e-2070L, -4.764525337949652161943564480843536e+03L}, {-1509, 4.113841930839147114891139473991904e-2073L, -4.771844540408420010841378487196094e+03L}, {-1511, -2.722595586260190016473288864322901e-2076L, -4.779165067370692750410624536519129e+03L}, {-1513, 1.799468331963113031376925885210113e-2079L, -4.786486917084481106329191886677672e+03L}, {-1515, -1.187767875883242925001271211359811e-2082L, -4.793810087802424575846072089514733e+03L}, {-1517, 7.829715727641680454853468763083788e-2086L, -4.801134577781773108094306948558802e+03L}, {-1519, -5.154519899698275480482862911839229e-2089L, -4.808460385284368880950446818370231e+03L}, {-1521, 3.388901972188215306037385214884437e-2092L, -4.815787508576628173805344283727207e+03L}, {-1523, -2.225149029670528762992373745820379e-2095L, -4.823115945929523335616116211680893e+03L}, {-1525, 1.459114117816740172454015571029757e-2098L, -4.830445695618564847614069119450771e+03L}, {-1527, -9.555429717201965765907109175047522e-2102L, -4.837776755923783480048299228543753e+03L}, {-1529, 6.249463516809657139245983763929053e-2105L, -4.845109125129712542349549957040594e+03L}, {-1531, -4.081948737302192775470923425165939e-2108L, -4.852442801525370226103736408768841e+03L}, {-1533, 2.662719332878142710679010714393959e-2111L, -4.859777783404242040229329115606646e+03L}, {-1535, -1.734670575164913818031928804165446e-2114L, -4.867114069064263337757528337507154e+03L}, {-1537, 1.128608051506124800281020692365287e-2117L, -4.874451656807801933618856078678546e+03L}, {-1539, -7.333385649812376869922161743764045e-2121L, -4.881790544941640812844446087058123e+03L}, {-1541, 4.758848572233859097937807750658043e-2124L, -4.889130731776960928594922911886297e+03L}, {-1543, -3.084153319659014321411411374373327e-2127L, -4.896472215629324089434330039739461e+03L}, {-1545, 1.996215740879620920007386002830632e-2130L, -4.903814994818655935271094646624663e+03L}, {-1547, -1.290378630174286308989906918442555e-2133L, -4.911159067669229001392503021427545e+03L}, {-1549, 8.330397870718439696513279008667235e-2137L, -4.918504432509645870023606657906879e+03L}, {-1551, -5.370985087503829591562397813454052e-2140L, -4.925851087672822408845884797391538e+03L}, {-1553, 3.458457879912317831012490543112719e-2143L, -4.933199031495971095915355246348419e+03L}, {-1555, -2.224088668753902142130218998786314e-2146L, -4.940548262320584430424152001247078e+03L}, {-1557, 1.428444873958832461226858701853766e-2149L, -4.947898778492418428753875992109364e+03L}, {-1559, -9.162571353167623227882352160704081e-2153L, -4.955250578361476205273274505587917e+03L}, {-1561, 5.869680559364268563665824574442076e-2156L, -4.962603660281991637337015963541083e+03L}, {-1563, -3.755393831966902471955102094972538e-2159L, -4.969958022612413113946500104484524e+03L}, {-1565, 2.399612672183324263230097185285966e-2162L, -4.977313663715387367537779629127007e+03L}, {-1567, -1.531341845681764048008996289269921e-2165L, -4.984670581957743388365768409126732e+03L}, {-1569, 9.759986269482243773161225553026904e-2169L, -4.992028775710476420957973797540569e+03L}, {-1571, -6.212594697315241103221658531525719e-2172L, -4.999388243348732042115016793161574e+03L}, {-1573, 3.949519833003967643497557871281449e-2175L, -5.006748983251790319939194167759069e+03L}, {-1575, -2.507631640002519138728608172242190e-2178L, -5.014110993803050053376291529642809e+03L}, {-1577, 1.590127863032669079726447794700184e-2181L, -5.021474273390013091759776029297989e+03L}, {-1579, -1.007047411673634629339105633122346e-2184L, -5.028838820404268733850382369300133e+03L}, {-1581, 6.369686348346835100184096351184982e-2188L, -5.036204633241478205867956313479471e+03L}, {-1583, -4.023806916201411939471949684892598e-2191L, -5.043571710301359218016236347517272e+03L}, {-1585, 2.538679442398367154240977719175140e-2194L, -5.050940049987670599005036869019797e+03L}, {-1587, -1.599671986388385100340880730419118e-2197L, -5.058309650708197008078045619920340e+03L}, {-1589, 1.006716165127995657860843757343687e-2200L, -5.065680510874733724058164354240617e+03L}, {-1591, -6.327568605455660954499332227175907e-2204L, -5.073052628903071510926005292424994e+03L}, {-1593, 3.972108352451764566540698196595045e-2207L, -5.080426003212981559450807078509481e+03L}, {-1595, -2.490350064233081232940876612285295e-2210L, -5.087800632228200504396653053453035e+03L}, {-1597, 1.559392651366988874728163188657041e-2213L, -5.095176514376415516830462008525488e+03L}, {-1599, -9.752299258079980454835291986598130e-2217L, -5.102553648089249471061777504577013e+03L}, {-1601, 6.091379923847583044869014357650300e-2220L, -5.109932031802246185747906650595145e+03L}, {-1603, -3.799987475887450433480358301715721e-2223L, -5.117311663954855738701453238942521e+03L}, {-1605, 2.367593442920529865096796449667115e-2226L, -5.124692542990419854940753642329693e+03L}, {-1607, -1.473300213391742293152953609002561e-2229L, -5.132074667356157367527157192736953e+03L}, {-1609, 9.156620344261916054399960279692735e-2233L, -5.139458035503149750736496185580324e+03L}, {-1611, -5.683811511025397923277442755861412e-2236L, -5.146842645886326725115464480484190e+03L}, {-1613, 3.523751711733042729868222415289158e-2239L, -5.154228496964451933976968196823835e+03L}, {-1615, -2.181889604788261752240385396463875e-2242L, -5.161615587200108690891827518206823e+03L}, {-1617, 1.349344220648275666196898822797696e-2245L, -5.169003915059685797737495412508597e+03L}, {-1619, -8.334430022534130118572568392820854e-2249L, -5.176393479013363432867717427005409e+03L}, {-1621, 5.141536102735428820834403696990040e-2252L, -5.183784277535099108970286912441074e+03L}, {-1623, -3.167921197002728786712509979661146e-2255L, -5.191176309102613700183252343290581e+03L}, {-1625, 1.949489967386294637976929218253013e-2258L, -5.198569572197377538043108108731824e+03L}, {-1627, -1.198211412038288038092765346191157e-2261L, -5.205964065304596575841647521554509e+03L}, {-1629, 7.355502836330804408181493837883101e-2265L, -5.213359786913198620971277099066987e+03L}, {-1631, -4.509811671570082408449720317524894e-2268L, -5.220756735515819634841684676685099e+03L}, {-1633, 2.761672793368084757164556226285912e-2271L, -5.228154909608790099953820884049422e+03L}, {-1635, -1.689096509705250616002786682743677e-2274L, -5.235554307692121453720194205071780e+03L}, {-1637, 1.031824379783292984729863581395038e-2277L, -5.242954928269492588623494514252379e+03L}, {-1639, -6.295450761337968180170003547254653e-2281L, -5.250356769848236418308548886105449e+03L}, {-1641, 3.836350250662990969024986927029039e-2284L, -5.257759830939326509205576863963969e+03L}, {-1643, -2.334966677214236743167977435805867e-2287L, -5.265164110057363777285650497427540e+03L}, {-1645, 1.419432630525371880345275036964053e-2290L, -5.272569605720563249552177560173981e+03L}, {-1647, -8.618291624319197816304037868634201e-2294L, -5.279976316450740889875114684988175e+03L}, {-1649, 5.226374544766038700002448677158400e-2297L, -5.287384240773300488777480941227752e+03L}, {-1651, -3.165581190046056147790701803245548e-2300L, -5.294793377217220616786581869477033e+03L}, {-1653, 1.915052141588660706467454206440138e-2303L, -5.302203724315041640965169414178206e+03L}, {-1655, -1.157131203376834263726558432894343e-2306L, -5.309615280602852804240554790351009e+03L}, {-1657, 6.983290304024346793763177024105873e-2310L, -5.317028044620279367152459315367895e+03L}, {-1659, -4.209337133227454366343084402716017e-2313L, -5.324442014910469811643132858889743e+03L}, {-1661, 2.534218623255541460772477063646007e-2316L, -5.331857190020083106515991038767192e+03L}, {-1663, -1.523883718133217955966612786317503e-2319L, -5.339273568499276034191720840814185e+03L}, {-1665, 9.152454763562870606406082800705723e-2323L, -5.346691148901690578393480186292288e+03L}, {-1667, -5.490374783181086146614326815060422e-2326L, -5.354109929784441372395470330754473e+03L}, {-1669, 3.289619402744808955430992699257293e-2329L, -5.361529909708103207471791067279586e+03L}, {-1671, -1.968653143473853354536799939711127e-2332L, -5.368951087236698601185097739453354e+03L}, {-1673, 1.176720348759027707433831404489616e-2335L, -5.376373460937685425157166255791059e+03L}, {-1675, -7.025196111994195268261680026803676e-2339L, -5.383797029381944591966037846453875e+03L}, {-1677, 4.189144968392483761634871810854905e-2342L, -5.391221791143767800816959421645709e+03L}, {-1679, -2.495023804879382824082711024928472e-2345L, -5.398647744800845341636858283334958e+03L}, {-1681, 1.484249735204867831102148140944957e-2348L, -5.406074888934253957244591810081032e+03L}, {-1683, -8.819071510427022169353227218924283e-2352L, -5.413503222128444763251693778750715e+03L}, {-1685, 5.233870332597639269645832177403136e-2355L, -5.420932742971231225350799404638590e+03L}, {-1687, -3.102472040662501048989823460227111e-2358L, -5.428363450053777193651371168700744e+03L}, {-1689, 1.836869177420071669028906726007762e-2361L, -5.435795341970584993724767250926284e+03L}, {-1691, -1.086262080082833630413309713783420e-2364L, -5.443228417319483574023094093898842e+03L}, {-1693, 6.416196574618036801023684074326163e-2368L, -5.450662674701616709338664469893972e+03L}, {-1695, -3.785366710689107257241111548275023e-2371L, -5.458098112721431259973242605957737e+03L}, {-1697, 2.230622693393699031962941395565718e-2374L, -5.465534729986665486288598619866005e+03L}, {-1699, -1.312903292168157170078246848478939e-2377L, -5.472972525108337418312215919255363e+03L}, {-1701, 7.718420294933316696521145493703345e-2381L, -5.480411496700733280074297498183419e+03L}, {-1703, -4.532249145586210626260214617559216e-2384L, -5.487851643381395968354500409636154e+03L}, {-1705, 2.658210642572557552058776901794262e-2387L, -5.495292963771113585519092276871887e+03L}, {-1707, -1.557241149720303193941872818860142e-2390L, -5.502735456493908026131469706918194e+03L}, {-1709, 9.112002046344664680759934574956943e-2394L, -5.510179120177023617021206060108426e+03L}, {-1711, -5.325541815514123133115099108683193e-2397L, -5.517623953450915810499005382514508e+03L}, {-1713, 3.108897732349167036261003566073084e-2400L, -5.525069954949239930407130593947370e+03L}, {-1715, -1.812768357054907892863558930654860e-2403L, -5.532517123308839970697047411510926e+03L}, {-1717, 1.055776562058769885185532283433232e-2406L, -5.539965457169737446228181144395713e+03L}, {-1719, -6.141806643739208174435906244521421e-2410L, -5.547414955175120295483821584821760e+03L}, {-1721, 3.568742965566070990375308683626625e-2413L, -5.554865615971331834902331906196105e+03L}, {-1723, -2.071237937066785252684450774014292e-2416L, -5.562317438207859764523920924339781e+03L}, {-1725, 1.200717644676397247933014941457560e-2419L, -5.569770420537325224655324441074966e+03L}, {-1727, -6.952620988282554996716936545787842e-2423L, -5.577224561615471903256810829889334e+03L}, {-1729, 4.021180444350812606545365266505403e-2426L, -5.584679860101155193757978697506230e+03L}, {-1731, -2.323038962652115890551915231949973e-2429L, -5.592136314656331403010850518050424e+03L}, {-1733, 1.340472569331861448673926850519315e-2432L, -5.599593923946047009090785741562702e+03L}, {-1735, -7.726066682028019877083151876192017e-2436L, -5.607052686638427968657740177742314e+03L}, {-1737, 4.447937065070823187727778857911351e-2439L, -5.614512601404669073592385599269543e+03L}, {-1739, -2.557755644089030010194237411104860e-2442L, -5.621973666919023356623574645610346e+03L}, {-1741, 1.469130180407254457320067438888489e-2445L, -5.629435881858791545665591385021257e+03L}, {-1743, -8.428744580649767397131769586279341e-2449L, -5.636899244904311566585567455224914e+03L}, {-1745, 4.830226120716199081450870823082717e-2452L, -5.644363754738948094123367696080639e+03L}, {-1747, -2.764868987244532960189393716704475e-2455L, -5.651829410049082150688157753209906e+03L}, {-1749, 1.580828466120373333441620192512564e-2458L, -5.659296209524100752757759411163823e+03L}, {-1751, -9.028146579785113269226842904126579e-2462L, -5.666764151856386604608777548096749e+03L}, {-1753, 5.150112139067377791914913236809229e-2465L, -5.674233235741307839107345729358974e+03L}, {-1755, -2.934536831377423243256360818694717e-2468L, -5.681703459877207805292185711844533e+03L}, {-1757, 1.670197399759489609138509287817141e-2471L, -5.689174822965394902483509649826985e+03L}, {-1759, -9.495152926432573104823816303679031e-2475L, -5.696647323710132460653112710498141e+03L}, {-1761, 5.391909668615884784113467520544594e-2478L, -5.704120960818628666792808256232632e+03L}, {-1763, -3.058371905057223360245869268601585e-2481L, -5.711595733001026537020147862119015e+03L}, {-1765, 1.732788614763299354246951426969737e-2484L, -5.719071638970393934162144341569430e+03L}, {-1767, -9.806387180324274783514156349574061e-2488L, -5.726548677442713630559477778562783e+03L}, {-1769, 5.543463640658154202099579621014166e-2491L, -5.734026847136873415835412439698570e+03L}, {-1771, -3.130131925837467081930874997749388e-2494L, -5.741506146774656249375386488851789e+03L}, {-1773, 1.765443838599812228951424138606536e-2497L, -5.748986575080730457264956776654797e+03L}, {-1775, -9.946162470984857627895347259755133e-2501L, -5.756468130782639973435487749853762e+03L}, {-1777, 5.597165149681968276812238187819434e-2504L, -5.763950812610794624768666844107423e+03L}, {-1779, -3.146242355076991723896704995963706e-2507L, -5.771434619298460459912608709087996e+03L}, {-1781, 1.766559435753504617572546320024540e-2510L, -5.778919549581750121563977386657541e+03L}, {-1783, -9.907792685100979347013720246912733e-2514L, -5.786405602199613261972209240066701e+03L}, {-1785, 5.550584137311473023537098177542147e-2517L, -5.793892775893827001423560131998167e+03L}, {-1787, -3.106090731567696151951369993028622e-2520L, -5.801381069408986429464328188112612e+03L}, {-1789, 1.736216171921574148659234205158537e-2523L, -5.808870481492495148624218575637925e+03L}, {-1791, -9.694115979461608870235813540807017e-2527L, -5.816361010894555860402419187403638e+03L}, {-1793, 5.406645833497829821659684071838827e-2530L, -5.823852656368160993280546063347724e+03L}, {-1795, -3.012058960165921906217094190439458e-2533L, -5.831345416669083372528194915566555e+03L}, {-1797, 1.676159688461837454767442509983004e-2536L, -5.838839290555866931568400359976359e+03L}, {-1799, -9.317174477275361060408240744763780e-2540L, -5.846334276789817464671857507034563e+03L}, {-1801, 5.173333968503809583791360768886052e-2543L, -5.853830374134993420750301534066573e+03L}, {-1803, -2.869292273157964272762817952793152e-2546L, -5.861327581358196738020969859810075e+03L}, {-1805, 1.589635608397764140034802189913104e-2549L, -5.868825897228963719315588674007077e+03L}, {-1807, -8.797097998880819812035429938644734e-2553L, -5.876325320519555947808830946367518e+03L}, {-1809, 4.862961856761094423457949109256349e-2556L, -5.883825850004951242942686754074650e+03L}, {-1811, -2.685235702242459648513500336419850e-2559L, -5.891327484462834656324668928243857e+03L}, {-1813, 1.481100773437650109494484465758329e-2562L, -5.898830222673589507379247729401774e+03L}, {-1815, -8.160334839876860107407627910514207e-2566L, -5.906334063420288458533367621127853e+03L}, {-1817, 4.491103379128706718441182119160268e-2569L, -5.913839005488684629718347319501145e+03L}, {-1819, -2.468995810406105947466290334887448e-2572L, -5.921345047667202751971901252936041e+03L}, {-1821, 1.355846134215324518103399415094700e-2575L, -5.928852188746930359925446470407811e+03L}, {-1823, -7.437444510232169600128356637930333e-2579L, -5.936360427521609022963273983029266e+03L}, {-1825, 4.075312060401188821988140623523470e-2582L, -5.943869762787625614841567610553157e+03L}, {-1827, -2.230603207663485945258971331977816e-2585L, -5.951380193344003621556646725802807e+03L}, {-1829, 1.219575291232086356073795151436750e-2588L, -5.958891717992394487253191940501070e+03L}, {-1831, -6.660706123605059290408493454051066e-2592L, -5.966404335537068997964584848772894e+03L}, {-1833, 3.633773117078592084238130635052409e-2595L, -5.973918044784908702978854532121154e+03L}, {-1835, -1.980257829470622389230588901935918e-2598L, -5.981432844545397373625074723393538e+03L}, {-1837, 1.077984664926849422553396244929732e-2601L, -5.988948733630612499276396417748249e+03L}, {-1839, -5.861798069205271465760719113266623e-2605L, -5.996465710855216820367231395578747e+03L}, {-1841, 3.184029369475975809755958236429453e-2608L, -6.003983775036449898223422674586395e+03L}, {-1843, -1.727633949797056869102527529261776e-2611L, -6.011502924994119721505548423639987e+03L}, {-1845, 9.363869646596514195677655985158676e-2615L, -6.019023159550594349066806436820096e+03L}, {-1847, -5.069772412883873414010642114325217e-2618L, -6.026544477530793589028216968351664e+03L}, {-1849, 2.741899628385004550573630132139111e-2621L, -6.034066877762180713875162653378355e+03L}, {-1851, -1.481307200640196947905796937946576e-2624L, -6.041590359074754211380555470293888e+03L}, {-1853, 7.994102539882336470079853955459123e-2628L, -6.049114920301039571161182321363970e+03L}, {-1855, -4.309489239828752814059220461163948e-2631L, -6.056640560276081106675032902579668e+03L}, {-1857, 2.320672719347739802939806387271916e-2634L, -6.064167277837433812468656183206741e+03L}, {-1859, -1.248344658067638409327491332583064e-2637L, -6.071695071825155256484825101667836e+03L}, {-1861, 6.707924008960980168336869062778419e-2641L, -6.079223941081797507242013087760499e+03L}, {-1863, -3.600603332775620058151835245721105e-2644L, -6.086753884452399095698400821539999e+03L}, {-1865, 1.930618408994970540563986726928207e-2647L, -6.094284900784477011614337315478327e+03L}, {-1867, -1.034075205674863706783067341686238e-2650L, -6.101816988928018734228376036983226e+03L}, {-1869, 5.532772636034583770909937622719305e-2654L, -6.109350147735474297063194450504262e+03L}, {-1871, -2.957120596490958723094568478203798e-2657L, -6.116884376061748386678884129000956e+03L}, {-1873, 1.578815054186310049703453538816763e-2660L, -6.124419672764192475192268539497637e+03L}, {-1875, -8.420346955660320265085085540356072e-2664L, -6.131956036702596986382066822067465e+03L}, {-1877, 4.486066572008694866854067949044257e-2667L, -6.139493466739183495200874430418595e+03L}, {-1879, -2.387475557215909987681781771710621e-2670L, -6.147031961738596960516075459128617e+03L}, {-1881, 1.269258669439611902010516625045519e-2673L, -6.154571520567897990902936920612315e+03L}, {-1883, -6.740619593412702612907682554676149e-2677L, -6.162112142096555143314262226536254e+03L}, {-1885, 3.575925513746791837086303742533766e-2680L, -6.169653825196437254452099745343407e+03L}, {-1887, -1.895032068758236267666297690796908e-2683L, -6.177196568741805804668112620869234e+03L}, {-1889, 1.003193260327282301570300524508686e-2686L, -6.184740371609307314220318117087064e+03L}, {-1891, -5.305093920292344270599156660543026e-2690L, -6.192285232677965771714998670515032e+03L}, {-1893, 2.802479619805781442471820739853685e-2693L, -6.199831150829175094563672653785620e+03L}, {-1895, -1.478881065860570682043177171426747e-2696L, -6.207378124946691621286090649702500e+03L}, {-1897, 7.795893863260783774608208600035566e-2700L, -6.214926153916626635491292872519148e+03L}, {-1899, -4.105262697872977237813695945253063e-2703L, -6.222475236627438921369825319258448e+03L}, {-1901, 2.159527984152013276072433427276729e-2706L, -6.230025371969927350531266355105530e+03L}, {-1903, -1.134801883421972294310264544023505e-2709L, -6.237576558837223500022261799071936e+03L}, {-1905, 5.956965267306941177481703643168004e-2713L, -6.245128796124784301361305244449801e+03L}, {-1907, -3.123736375095407014935345381839540e-2716L, -6.252682082730384720427531387636673e+03L}, {-1909, 1.636320783182507603423439173305155e-2719L, -6.260236417554110468041813612691774e+03L}, {-1911, -8.562641460923639996982936542674802e-2723L, -6.267791799498350741079473050857149e+03L}, {-1913, 4.476027946117950860942465521523681e-2726L, -6.275348227467790993954914867019734e+03L}, {-1915, -2.337351407894491311197109932910538e-2729L, -6.282905700369405740319508680890113e+03L}, {-1917, 1.219275643137449823264011441267887e-2732L, -6.290464217112451384815023871133393e+03L}, {-1919, -6.353703195088326332798392085814938e-2736L, -6.298023776608459084725917096832194e+03L}, {-1921, 3.307497759025677424673811601153013e-2739L, -6.305584377771227641374748762943683e+03L}, {-1923, -1.719967633398688208358716381254817e-2742L, -6.313146019516816421105977414718608e+03L}, {-1925, 8.934896796876302381084240941583465e-2746L, -6.320708700763538305704346229706468e+03L}, {-1927, -4.636687491892217115248697945813941e-2749L, -6.328272420431952672095033943749278e+03L}, {-1929, 2.403674179311672947251787426549477e-2752L, -6.335837177444858401173693757489748e+03L}, {-1931, -1.244782071109100438763224974909103e-2755L, -6.343402970727286915615448080068424e+03L}, {-1933, 6.439638236467151778392265778112274e-2759L, -6.350969799206495246512844434000853e+03L}, {-1935, -3.327978416778889807954659316853889e-2762L, -6.358537661811959128693708526321270e+03L}, {-1937, 1.718109662766592569930128712882751e-2765L, -6.366106557475366124570754442037939e+03L}, {-1939, -8.860802799208832232749503418683604e-2769L, -6.373676485130608776375729192330907e+03L}, {-1941, 4.565070993925209805641166109574242e-2772L, -6.381247443713777786631779506783487e+03L}, {-1943, -2.349496136863206281853405100141144e-2775L, -6.388819432163155226718632850812213e+03L}, {-1945, 1.207967165482368268305092596473596e-2778L, -6.396392449419207773386082230379072e+03L}, {-1947, -6.204248410284377341063649699402135e-2782L, -6.403966494424579973072155469567679e+03L}, {-1949, 3.183298312100757999519573986353071e-2785L, -6.411541566124087533883234365720056e+03L}, {-1951, -1.631623942645186058185327517351651e-2788L, -6.419117663464710645094267494111651e+03L}, {-1953, 8.354449271096702806888517753976706e-2792L, -6.426694785395587324028092501653481e+03L}, {-1955, -4.273375586238722663370085807660719e-2795L, -6.434272930868006790173749548436390e+03L}, {-1957, 2.183635966396894564828863468400981e-2798L, -6.441852098835402866404527178183331e+03L}, {-1959, -1.114668691371564351622697023175590e-2801L, -6.449432288253347407157335374491452e+03L}, {-1961, 5.684185065637758039891366767851045e-2805L, -6.457013498079543753435847939301513e+03L}, {-1963, -2.895662285093101395767379912303131e-2808L, -6.464595727273820214500697663042563e+03L}, {-1965, 1.473619483507939641611898174200066e-2811L, -6.472178974798123576110843091623881e+03L}, {-1967, -7.491710643151701279165725339095407e-2815L, -6.479763239616512635181055082692017e+03L}, {-1969, 3.804830189513306896478275946721893e-2818L, -6.487348520695151760721294830700004e+03L}, {-1971, -1.930405981488232824189891398641244e-2821L, -6.494934817002304480924572675268210e+03L}, {-1973, 9.784115466235341227520990363108183e-2825L, -6.502522127508327096270688837534246e+03L}, {-1975, -4.953982514549539862035944487649713e-2828L, -6.510110451185662318514063301742180e+03L}, {-1977, 2.505808049848022186158798425720644e-2831L, -6.517699787008832935424662420829923e+03L}, {-1979, -1.266199115638212322465284702233777e-2834L, -6.525290133954435501151824521434509e+03L}, {-1981, 6.391716888633075832737429087500134e-2838L, -6.532881491001134052081575861324747e+03L}, {-1983, -3.223256121347995881360276897377778e-2841L, -6.540473857129653848058811796150148e+03L}, {-1985, 1.623806610250879537209207504976211e-2844L, -6.548067231322775138846495987513552e+03L}, {-1987, -8.172152039511220620076535002396632e-2848L, -6.555661612565326955694802975274266e+03L}, {-1989, 4.108673725244454811501525893613188e-2851L, -6.563256999844180927893896487807550e+03L}, {-1991, -2.063623166873156610498003964647508e-2854L, -6.570853392148245124184797518424148e+03L}, {-1993, 1.035435608064805123180132445884349e-2857L, -6.578450788468457918903552497634620e+03L}, {-1995, -5.190153423883734953283871909194733e-2861L, -6.586049187797781882734662882380101e+03L}, {-1997, 2.598975174703923361684462648570222e-2864L, -6.593648589131197697950483207309507e+03L}, }; /** * @brief This returns Bernoulli numbers from a table or by summation * for larger values. * * Upward recursion is unstable. * * @param __n the order n of the Bernoulli number. * @return The Bernoulli number of order n. */ template _GLIBCXX14_CONSTEXPR _Tp __bernoulli_series(unsigned int __n) { constexpr unsigned long _S_num_bern_tab = 13; constexpr _Tp _S_bernoulli_2n[_S_num_bern_tab] { _Tp{1ULL}, _Tp{1ULL} / _Tp{6ULL}, -_Tp{1ULL} / _Tp{30ULL}, _Tp{1ULL} / _Tp{42ULL}, -_Tp{1ULL} / _Tp{30ULL}, _Tp{5ULL} / _Tp{66ULL}, -_Tp{691ULL} / _Tp{2730ULL}, _Tp{7ULL} / _Tp{6ULL}, -_Tp{3617ULL} / _Tp{510ULL}, _Tp{43867ULL} / _Tp{798ULL}, -_Tp{174611ULL} / _Tp{330ULL}, _Tp{854513ULL} / _Tp{138ULL}, -_Tp{23749461029ULL} / _Tp{2730ULL} }; constexpr _Tp _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi; if (__n == 0) return _Tp{1}; else if (__n == 1) return -_Tp{1} / _Tp{2}; // Take care of the rest of the odd ones. else if (__n % 2 == 1) return _Tp{0}; // Take care of some small evens that are painful for the series. else if (__n / 2 < _S_num_bern_tab) return _S_bernoulli_2n[__n / 2]; else { auto __fact = _Tp{1}; if ((__n / 2) % 2 == 0) __fact *= -_Tp{1}; for (unsigned int __k = 1; __k <= __n; ++__k) __fact *= __k / _S_2pi; __fact *= _Tp{2}; // Riemann zeta function minus-1 for even integer argument. auto __sum = _Tp{0}; for (unsigned int __i = 2; __i < 1000; ++__i) { auto __term = std::pow(_Tp(__i), -_Tp(__n)); __sum += __term; if (__term < __gnu_cxx::__epsilon<_Tp>() * __sum) break; } return __fact + __fact * __sum; } } /** * @brief This returns Bernoulli number @f$ B_n @f$. * * @param __n the order n of the Bernoulli number. * @return The Bernoulli number of order n. */ template _GLIBCXX14_CONSTEXPR _Tp __bernoulli(int __n) { return __bernoulli_series<_Tp>(__n); } /** * @brief This returns Bernoulli number @f$ B_2n @f$ at even integer * arguments @f$ 2n @f$. * * @param __n the half-order n of the Bernoulli number. * @return The Bernoulli number of order 2n. */ template _GLIBCXX14_CONSTEXPR _Tp __bernoulli_2n(int __n) { return __bernoulli_series<_Tp>(2 * __n); } /** * @brief Return @f$log(\Gamma(x))@f$ by asymptotic expansion * with Bernoulli number coefficients. This is like * Sterling's approximation. * * @param __x The argument of the log of the gamma function. * @return The logarithm of the gamma function. */ template _GLIBCXX14_CONSTEXPR _Tp __log_gamma_bernoulli(_Tp __x) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_eps = _Real{0.01L} * __gnu_cxx::__epsilon<_Real>(); constexpr auto _S_ln2pi = __gnu_cxx::__math_constants<_Real>::__ln_2 + __gnu_cxx::__math_constants<_Real>::__ln_pi; auto __lg = (__x - _Real{0.5L}) * std::log(__x) - __x + _Real{0.5L} * _S_ln2pi; const auto __xx = _Real{1} / (__x * __x); auto __xk = _Real{1} / __x; for ( unsigned int __i = 1; __i < 100; ++__i ) { const auto __2i = _Tp(2 * __i); const auto __term = __bernoulli<_Tp>(__2i) * __xk / (__2i * (__2i - _Tp{1})); __lg += __term; if (std::abs(__term) < _S_eps * std::abs(__lg)) break; __xk *= __xx; } return __lg; } /** * A struct for Spouge algorithm Chebyshev arrays of coefficients. */ template struct _GammaSpouge { }; template<> struct _GammaSpouge { static constexpr std::array _S_cheby { 2.901419e+03F, -5.929168e+03F, 4.148274e+03F, -1.164761e+03F, 1.174135e+02F, -2.786588e+00F, 3.775392e-03F, }; }; template<> struct _GammaSpouge { static constexpr std::array _S_cheby { 2.785716565770350e+08, -1.693088166941517e+09, 4.549688586500031e+09, -7.121728036151557e+09, 7.202572947273274e+09, -4.935548868770376e+09, 2.338187776097503e+09, -7.678102458920741e+08, 1.727524819329867e+08, -2.595321377008346e+07, 2.494811203993971e+06, -1.437252641338402e+05, 4.490767356961276e+03, -6.505596924745029e+01, 3.362323142416327e-01, -3.817361443986454e-04, 3.273137866873352e-08, -7.642333165976788e-15, }; }; template<> struct _GammaSpouge { static constexpr std::array _S_cheby { 1.681473171108908244e+10L, -1.269150315503303974e+11L, 4.339449429013039995e+11L, -8.893680202692714895e+11L, 1.218472425867950986e+12L, -1.178403473259353616e+12L, 8.282455311246278274e+11L, -4.292112878930625978e+11L, 1.646988347276488710e+11L, -4.661514921989111004e+10L, 9.619972564515443397e+09L, -1.419382551781042824e+09L, 1.454145470816386107e+08L, -9.923020719435758179e+06L, 4.253557563919127284e+05L, -1.053371059784341875e+04L, 1.332425479537961437e+02L, -7.118343974029489132e-01L, 1.172051640057979518e-03L, -3.323940885824119041e-07L, 4.503801674404338524e-12L, -5.320477002211632680e-20L, }; }; #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) template<> struct _GammaSpouge<__float128> { static constexpr std::array<__float128, 40> _S_cheby { 1.488707141702962349642653219904701e+18Q, -2.109024888057172629401888926607933e+19Q, 1.417814156004491800291266261243181e+20Q, -6.017978256631943800541949222618531e+20Q, 1.810303371559858936645834474459794e+21Q, -4.106765117367170106628989406117407e+21Q, 7.299495565278381248758472830920901e+21Q, -1.042658085606638732437326916809544e+22Q, 1.218085331069918351049721248713456e+22Q, -1.178425136120009375043789561151657e+22Q, 9.524552911654596104822221145923981e+21Q, -6.470848515795635226546940452396693e+21Q, 3.710085524031367371144056238201665e+21Q, -1.799208570324458717498947049552296e+21Q, 7.385190850868692826830617550673786e+20Q, -2.564085902302497902610094974644620e+20Q, 7.515077439232198453710859556732366e+19Q, -1.853282816124970754507275065198273e+19Q, 3.827869971220176147395256318872661e+18Q, -6.582119247090799001499961431273749e+17Q, 9.351471019350666459087977506154173e+16Q, -1.087561099332606693611359806619008e+16Q, 1.023682895113200510083891964414548e+15Q, -7.692392155137210713863610487671446e+13Q, 4.538847752507923706006970038411543e+12Q, -2.061098065296257001203592871224284e+11Q, 7.029050529288024691234709461995537e+09Q, -1.746978910485928115412705762596253e+08Q, 3.048305382188066788914727298031581e+06Q, -3.562744619669248206793629956902640e+04Q, 2.625939669969919276517969162685481e+02Q, -1.127892258247142779807411800956670e+00Q, 2.538684230850237447901013114737673e-03Q, -2.583211865372192597501314906164821e-06Q, 9.590040155479072110068965236664741e-10Q, -9.347057516377501180809930331336725e-14Q, 1.386220962446620618073769872331415e-18Q, -1.138134595144440607620794028391791e-24Q, 5.491908932091769529804906638081618e-33Q, -1.332629445370080503706686280760692e-46Q, }; }; #endif /** * @brief Return @f$\Gamma(z)@f$ by the Spouge algorithm: * @f[ * \Gamma(z+1) = (z+a)^{z+1/2}e^{-z-a}\left[ \sqrt{2\pi} + * \sum_{k=1}^{\lceil a \rceil + 1}\frac{c_k(a)}{z+k}\right] * @f] * where * @f[ * c_k(a) = \frac{(-1)^{k-1}}{(k-1)!}(a-k)^{k-1/2}e^{a-k} * @f] * and the error is bounded by * @f[ * \epsilon(a) < a^{-1/2}(2\pi)^{-a-1/2} * @f] * @see Spouge, J.L., Computation of the gamma, digamma, * and trigamma functions. * SIAM Journal on Numerical Analysis 31, 3 (1994), pp. 931-944 * * @param __z The argument of the gamma function. * @return The the gamma function. */ template _GLIBCXX14_CONSTEXPR _Tp __log_gamma1p_spouge(_Tp __z) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_ln_pi = __gnu_cxx::__math_constants<_Real>::__ln_pi; constexpr auto _S_sqrt_pi = __gnu_cxx::__math_constants<_Real>::__root_pi; constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Real>::__root_2; constexpr auto _S_sqrt_2pi = _S_sqrt_2 * _S_sqrt_pi; auto __a = _Real{_GammaSpouge<_Real>::_S_cheby.size() + 1}; const auto& __c = _GammaSpouge<_Real>::_S_cheby; // Reflection; move the transition upwards to prevent instability. if (std::real(__z) < _Real{-0.5L}) return _S_ln_pi - std::log(__sin_pi(__z)) - __log_gamma1p_spouge(-_Real{1} - __z); else { _Val __sum = _S_sqrt_2pi; for (int __k = 0; __k < __c.size(); ++__k) __sum += __c[__k] / (__z + _Real(__k + 1)); return std::log(__sum) + (__z + _Real{0.5L}) * std::log(__z + __a) - (__z + __a); } } /** * A struct for Lanczos algorithm Chebyshev arrays of coefficients. */ template struct _GammaLanczos { }; template<> struct _GammaLanczos { static constexpr float _S_g = 6.5F; static constexpr std::array _S_cheby { 3.307139e+02F, -2.255998e+02F, 6.989520e+01F, -9.058929e+00F, 4.110107e-01F, -4.150391e-03F, -3.417969e-03F, }; }; template<> struct _GammaLanczos { static constexpr double _S_g = 9.5; static constexpr std::array _S_cheby { 5.557569219204146e+03, -4.248114953727554e+03, 1.881719608233706e+03, -4.705537221412237e+02, 6.325224688788239e+01, -4.206901076213398e+00, 1.202512485324405e-01, -1.141081476816908e-03, 2.055079676210880e-06, 1.280568540096283e-09, }; }; template<> struct _GammaLanczos { static constexpr long double _S_g = 10.5L; static constexpr std::array _S_cheby { 1.440399692024250728e+04L, -1.128006201837065341e+04L, 5.384108670160999829e+03L, -1.536234184127325861e+03L, 2.528551924697309561e+02L, -2.265389090278717887e+01L, 1.006663776178612579e+00L, -1.900805731354182626e-02L, 1.150508317664389324e-04L, -1.208915136885480024e-07L, -1.518856151960790157e-10L, }; }; #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) template<> struct _GammaLanczos<__float128> { static constexpr __float128 _S_g = 13.5Q; static constexpr std::array<__float128, 14> _S_cheby { 2.564476893267270739326759539239521e+05Q, -2.115503710351143292058877626137631e+05Q, 1.184019145386031178030546551084647e+05Q, -4.454725318050137764345651484051269e+04Q, 1.108444304734911694218772523380670e+04Q, -1.779039702565864879298077142685014e+03Q, 1.775917720477127714789670669062174e+02Q, -1.046153541164985987873520383376722e+01Q, 3.366596234159295518095091028749941e-01Q, -5.260241043537793269590387229607226e-03Q, 3.290526994052737279641248387319708e-05Q, -5.791840871423216610203896349432783e-08Q, 1.318192361117106013253744235732287e-11Q, -3.352799410216973507737605805778536e-17Q, }; }; #endif /** * @brief Return @f$log(\Gamma(x))@f$ by the Lanczos method. * This method dominates all others on the positive axis I think. * * @param __x The argument of the log of the gamma function. * @return The logarithm of the gamma function. */ template _GLIBCXX14_CONSTEXPR _Tp __log_gamma1p_lanczos(_Tp __z) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_ln_2 = __gnu_cxx::__math_constants<_Real>::__ln_2; constexpr auto _S_ln_pi = __gnu_cxx::__math_constants<_Real>::__ln_pi; constexpr auto _S_log_sqrt_2pi = (_S_ln_2 + _S_ln_pi) / _Real{2}; const auto& __c = _GammaLanczos<_Real>::_S_cheby; auto __g = _GammaLanczos<_Real>::_S_g; // Reflection; move the transition upwards to prevent instability. if (std::real(__z) < _Real{-0.5L}) return _S_ln_pi - std::log(__sin_pi(__z)) - __log_gamma1p_lanczos(-_Real{1} - __z); else { auto __fact = _Val{1}; auto __sum = _Val{0.5L} * __c[0]; for (unsigned int __k = 1, __n = __c.size(); __k < __n; ++__k) { __fact *= (__z - _Real(__k - 1)) / (__z + _Real(__k)); __sum += __fact * __c[__k]; } return _S_log_sqrt_2pi + std::log(__sum) + (__z + _Real{0.5L}) * std::log(__z + __g + _Real{0.5L}) - (__z + __g + _Real{0.5L}); } } /** * @brief Return @f$ log(|\Gamma(x)|) @f$. * This will return values even for @f$ x < 0 @f$. * To recover the sign of @f$ \Gamma(x) @f$ for * any argument use @a __log_gamma_sign. * * @param __x The argument of the log of the gamma function. * @return The logarithm of the gamma function. */ template _Tp __log_gamma(_Tp __x) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_eps = _Real{3} * __gnu_cxx::__epsilon<_Real>(); constexpr auto _S_logpi = __gnu_cxx::__math_constants<_Real>::__ln_pi; if (std::real(__x) >= _Real{0.5L}) return __log_gamma1p_spouge(__x - _Real{1}); else { const auto __sin_fact = std::abs(__sin_pi(__x)); if (__sin_fact < _S_eps * std::abs(__x)) return __gnu_cxx::__infinity<_Real>(); else return _S_logpi - std::log(__sin_fact) - __log_gamma(_Val{1} - __x); } } /** * @brief Return @f$ log(\Gamma(x)) @f$ for complex argument. * * @param __x The complex argument of the log of the gamma function. * @return The complex logarithm of the gamma function. */ template std::complex<_Tp> __log_gamma(std::complex<_Tp> __x) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; using _Cmplx = std::complex<_Real>; constexpr auto _S_eps = _Real{3} * __gnu_cxx::__epsilon<_Real>(); constexpr auto _S_logpi = __gnu_cxx::__math_constants<_Real>::__ln_pi; if (std::real(__x) >= _Real{0.5L}) return __log_gamma1p_spouge(__x - _Real{1}); else { const auto __sin_fact = __sin_pi(__x); if (std::abs(__sin_fact) < _S_eps * std::abs(__x)) return _Cmplx(__gnu_cxx::__quiet_NaN<_Real>(), _Real{0}); else return _S_logpi - std::log(__sin_fact) - __log_gamma(_Val{1} - __x); } } /** * @brief Return the sign of @f$ \Gamma(x) @f$. * At nonpositive integers zero is returned indicating @f$ \Gamma(x) @f$ * is undefined. * * @param __x The argument of the gamma function. * @return The sign of the gamma function. */ template _Tp __log_gamma_sign(_Tp __x) { if (__x >= _Tp{0}) return _Tp{1}; else if (__x == std::nearbyint(__x)) return _Tp{0}; else return (int(-__x) % 2 == 0) ? -_Tp{1} : _Tp{1}; } template std::complex<_Tp> __log_gamma_sign(std::complex<_Tp> __x) { return std::complex<_Tp>{1}; } /** * @brief Return the logarithm of the binomial coefficient. * The binomial coefficient is given by: * @f[ * \binom{n}{k} = \frac{n!}{(n-k)! k!} * @f] * The binomial coefficients are generated by: * @f[ * \left(1 + t\right)^n = \sum_{k=0}^n \binom{n}{k} t^k * @f] * * @param __n The first argument of the binomial coefficient. * @param __k The second argument of the binomial coefficient. * @return The logarithm of the binomial coefficient. */ template _Tp __log_bincoef(unsigned int __n, unsigned int __k) { if (__k > __n) return -__gnu_cxx::__infinity<_Tp>(); else if (__k == 0 || __k == __n) return _Tp{0}; else return __log_gamma(_Tp(1 + __n)) - __log_gamma(_Tp(1 + __k)) - __log_gamma(_Tp(1 + __n - __k)); } /** * @brief Return the logarithm of the binomial coefficient * for non-integral degree. * The binomial coefficient is given by: * @f[ * \binom{\nu}{k} = \frac{\Gamma(\nu+1)}{\Gamma(\nu-k+1) \Gamma(k+1)} * @f] * The binomial coefficients are generated by: * @f[ * \left(1 + t\right)^\nu = \sum_{k=0}^\infty \binom{\nu}{k} t^k * @f] * * @param __nu The first argument of the binomial coefficient. * @param __k The second argument of the binomial coefficient. * @return The logarithm of the binomial coefficient. */ template _Tp __log_bincoef(_Tp __nu, unsigned int __k) { auto __n = std::nearbyint(__nu); if (__n >= 0 && __nu == __n) return __log_bincoef<_Tp>((unsigned int)__n, __k); else { return __log_gamma(_Tp(1) + __nu) - __log_gamma(_Tp(1 + __k)) - __log_gamma(_Tp(1 - __k) + __nu); } } /** * @brief Return the sign of @f$ \Gamma(x) @f$. * At nonpositive integers zero is returned. * * @param __x The argument of the gamma function. * @return The sign of the gamma function. */ template _Tp __log_bincoef_sign(_Tp __nu, unsigned int __k) { auto __n = std::nearbyint(__nu); if (__n >= 0 && __nu == __n) return _Tp{1}; else { return __log_gamma_sign(_Tp(1) + __nu) * __log_gamma_sign(_Tp(1 + __k)) * __log_gamma_sign(_Tp(1 - __k) + __nu); } } template std::complex<_Tp> __log_bincoef_sign(std::complex<_Tp> __nu, unsigned int __k) { return std::complex<_Tp>{1}; } /** * @brief Return the binomial coefficient. * The binomial coefficient is given by: * @f[ * \binom{n}{k} = \frac{n!}{(n-k)! k!} * @f] * The binomial coefficients are generated by: * @f[ * \left(1 + t\right)^n = \sum_{k=0}^n \binom{n}{k} t^k * @f] * * @param __n The first argument of the binomial coefficient. * @param __k The second argument of the binomial coefficient. * @return The binomial coefficient. */ template _Tp __bincoef(unsigned int __n, unsigned int __k) { // Max e exponent before overflow. constexpr auto __max_bincoeff = std::numeric_limits<_Tp>::max_exponent10 * std::log(_Tp(10)) - _Tp(1); if (__k > __n) return _Tp{0}; else if (__k == 0 || __k == __n) return _Tp{1}; else { const auto __log_coeff = __log_bincoef<_Tp>(__n, __k); if (__log_coeff > __max_bincoeff) return __gnu_cxx::__quiet_NaN<_Tp>(); else return std::exp(__log_coeff); } } /** * @brief Return the binomial coefficient for non-integral degree. * The binomial coefficient is given by: * @f[ * \binom{\nu}{k} = \frac{\Gamma(\nu+1)}{\Gamma(\nu-k+1) \Gamma(k+1)} * @f] * The binomial coefficients are generated by: * @f[ * \left(1 + t\right)^\nu = \sum_{k=0}^\infty \binom{\nu}{k} t^k * @f] * * @param __nu The real first argument of the binomial coefficient. * @param __k The second argument of the binomial coefficient. * @return The binomial coefficient. */ template _Tp __bincoef(_Tp __nu, unsigned int __k) { // Max e exponent before overflow. auto __n = std::nearbyint(__nu); if (__n >= 0 && __nu == __n) return __bincoef<_Tp>((unsigned int)__n, __k); else { constexpr auto __max_bincoeff = std::numeric_limits<_Tp>::max_exponent10 * std::log(_Tp(10)) - _Tp(1); const auto __log_coeff = __log_bincoef(__nu, __k); const auto __sign = __log_bincoef_sign(__nu, __k); if (__log_coeff > __max_bincoeff || __sign == _Tp{0}) return __gnu_cxx::__quiet_NaN<_Tp>(); else return std::exp(__log_coeff) * __sign; } } /** * @brief Return the gamma function @f$ \Gamma(x) @f$. * The gamma function is defined by: * @f[ * \Gamma(a) = \int_0^\infty e^{-t}t^{a-1}dt (a > 0) * @f] * * @param __x The argument of the gamma function. * @return The gamma function. */ template _Tp __gamma(_Tp __x) { const auto __sign = __log_gamma_sign(__x); if (__sign == _Tp{0}) return __gnu_cxx::__quiet_NaN<_Tp>(); else return __sign * std::exp(__log_gamma(__x)); } /** * @brief Return the incomplete gamma function by series summation. */ template std::pair<_Tp, _Tp> __gamma_series(_Tp __a, _Tp __x) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_eps = _Real{3} * __gnu_cxx::__epsilon<_Real>(); const auto _S_itmax = 10 * int(10 + std::sqrt(std::abs(__a))); auto __lngam = __log_gamma(__a); if (std::real(__x) < _Real{0}) std::__throw_domain_error(__N("__gamma_series: argument less than 0")); else if (__x == _Real{0}) return std::make_pair(_Val{0}, __lngam); else { auto __aa = __a; _Val __term, __sum; __term = __sum = _Tp{1} / __a; for (unsigned int __n = 1; __n <= _S_itmax; ++__n) { __aa += _Real{1}; __term *= __x / __aa; __sum += __term; if (std::abs(__term) < _S_eps * std::abs(__sum)) { auto __gamser = std::exp(-__x + __a * std::log(__x) - __lngam) * __sum; return std::make_pair(__gamser, __lngam); } } std::__throw_logic_error(__N("__gamma_series: " "a too large, itmax too small in routine.")); } } /** * @brief Return the incomplete gamma function by continued fraction. */ template std::pair<_Tp, _Tp> __gamma_cont_frac(_Tp __a, _Tp __x) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_fpmin = _Real{3} * __gnu_cxx::__min<_Real>(); constexpr auto _S_eps = _Real{3} * __gnu_cxx::__epsilon<_Real>(); const auto _S_itmax = 10 * int(10 + std::sqrt(std::abs(__a))); auto __lngam = __log_gamma(__a); auto __b = __x + _Real{1} - __a; auto __c = _Real{1} / _S_fpmin; auto __d = _Real{1} / __b; auto __h = __d; for (unsigned int __n = 1; __n <= _S_itmax; ++__n) { auto __an = -_Real{__n} * (_Real{__n} - __a); __b += _Real{2}; __d = __an * __d + __b; if (std::abs(__d) < _S_fpmin) __d = _S_fpmin; __c = __b + __an / __c; if (std::abs(__c) < _S_fpmin) __c = _S_fpmin; __d = _Real{1} / __d; auto __del = __d * __c; __h *= __del; if (std::abs(__del - _Real{1}) < _S_eps) { auto __gamcf = std::exp(-__x + __a * std::log(__x) - __lngam) * __h; return std::make_pair(__gamcf, __lngam); } } std::__throw_logic_error(__N("__gamma_cont_fraction: " "a too large, itmax too small in routine.")); } /** * @brief Return the regularized lower incomplete gamma function. * The regularized lower incomplete gamma function is defined by * @f[ * P(a,x) = \frac{\gamma(a,x)}{\Gamma(a)} * @f] * where @f$ \Gamma(a) @f$ is the gamma function and * @f[ * \gamma(a,x) = \int_0^x e^{-t}t^{a-1}dt (a > 0) * @f] * is the lower incomplete gamma function. */ template _Tp __pgamma(_Tp __a, _Tp __x) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>(); if (__isnan(__a) || __isnan(__x)) return _S_NaN; if (std::real(__x) < _Real{0} || std::real(__a) <= _Real{0}) std::__throw_domain_error("pgamma: invalid arguments"); if (std::real(__x) < std::real(__a + _Real{1})) return __gamma_series(__a, __x).first; else return _Val{1} - __gamma_cont_frac(__a, __x).first; } /** * @brief Return the regularized upper incomplete gamma function. * The regularized upper incomplete gamma function is defined by * @f[ * Q(a,x) = \frac{\Gamma(a,x)}{\Gamma(a)} * @f] * where @f$ \Gamma(a) @f$ is the gamma function and * @f[ * \Gamma(a,x) = \int_x^\infty e^{-t}t^{a-1}dt (a > 0) * @f] * is the upper incomplete gamma function. */ template _Tp __qgamma(_Tp __a, _Tp __x) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>(); if (__isnan(__a) || __isnan(__x)) return _S_NaN; if (std::real(__x) < _Real{0} || std::real(__a) <= _Real{0}) std::__throw_domain_error("__qgamma: invalid arguments"); if (std::real(__x) < std::real(__a + _Real{1})) return _Val{1} - __gamma_series(__a, __x).first; else return __gamma_cont_frac(__a, __x).first; } /** * @brief Return the lower incomplete gamma function. * The lower incomplete gamma function is defined by * @f[ * \gamma(a,x) = \int_0^x e^{-t}t^{a-1}dt (a > 0) * @f] */ template _Tp __tgamma_lower(_Tp __a, _Tp __x) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>(); if (__isnan(__a) || __isnan(__x)) return _S_NaN; if (std::real(__x) < _Real{0} || std::real(__a) <= _Real{0}) std::__throw_domain_error("__tgamma_lower: invalid arguments"); if (std::real(__x) < std::real(__a + _Real{1})) { std::pair<_Tp, _Tp> __gp = __gamma_series(__a, __x); return std::exp(__gp.second) * __gp.first; } else { std::pair<_Tp, _Tp> __gp = __gamma_cont_frac(__a, __x); return std::exp(__gp.second) * (_Tp{1} - __gp.first); } } /** * @brief Return the upper incomplete gamma function. * The lower incomplete gamma function is defined by * @f[ * \Gamma(a,x) = \int_x^\infty e^{-t}t^{a-1}dt (a > 0) * @f] */ template _Tp __tgamma(_Tp __a, _Tp __x) { using _Val = _Tp; using _Real = std::__detail::__num_traits_t<_Val>; constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>(); if (__isnan(__a) || __isnan(__x)) return _S_NaN; if (std::real(__x) < _Real{0} || std::real(__a) <= _Real{0}) std::__throw_domain_error("__tgamma: invalid arguments"); if (std::real(__x) < std::real(__a + _Real{1})) { auto __gp = __gamma_series(__a, __x); return std::exp(__gp.second) * (_Tp{1} - __gp.first); } else { auto __gp = __gamma_cont_frac(__a, __x); return std::exp(__gp.second) * __gp.first; } } /** * @brief Return the logarithm of the (upper) Pochhammer symbol * or the rising factorial function. * The Pochammer symbol is defined for integer order by * @f[ * (a)_n = \prod_{k=0}^{n-1} (a + k), (a)_0 = 1 * = \Gamma(a + n) / \Gamma(n) * @f] * Thus this function returns * @f[ * ln[(a)_n] = \Gamma(a + n) - \Gamma(n), ln[(a)_0] = 0 * @f] * Many notations exist: @f[ a^{\overline{n}} @f], * @f[ \left[ \begin{array}{c} * a \\ * n \end{array} \right] @f], and others. */ template _Tp __log_pochhammer(_Tp __a, _Tp __n) { if (__isnan(__n) || __isnan(__a)) return __gnu_cxx::__quiet_NaN<_Tp>(); else if (__n == _Tp{0}) return _Tp{0}; else return __log_gamma(__a + __n) - __log_gamma(__a); } /** * @brief Return the (upper) Pochhammer function * or the rising factorial function. * The Pochammer symbol is defined by * @f[ * (a)_n = \prod_{k=0}^{n-1} (a + k), (a)_0 = 1 * = \Gamma(a + n) / \Gamma(n) * @f] * Many notations exist: @f[ a^{\overline{n}} @f], * @f[ \left[ \begin{array}{c} * a \\ * n \end{array} \right] @f], and others. */ template _Tp __pochhammer(_Tp __a, _Tp __n) { constexpr auto __log10{2.3025850929940456840179914546843642L}; if (__isnan(__n) || __isnan(__a)) return __gnu_cxx::__quiet_NaN<_Tp>(); else if (__n == _Tp{0}) return _Tp{1}; else { _Tp __logpoch = __log_gamma(__a + __n) - __log_gamma(__a); if (std::abs(__logpoch) > std::numeric_limits<_Tp>::max_digits10 * __log10) return __gnu_cxx::__infinity<_Tp>(); else return std::exp(__logpoch); } } /** * @brief Return the logarithm of the lower Pochhammer symbol * or the falling factorial function. * The lower Pochammer symbol is defined by * @f[ * (a)_n = \prod_{k=0}^{n-1} (a - k), (a)_0 = 1 * = \Gamma(a + 1) / \Gamma(a - n + 1) * @f] * In particular, $f[ (n)_n = n! $f]. * Thus this function returns * @f[ * ln[(a)_n] = \Gamma(a + 1) - \Gamma(a - n + 1), ln[(a)_0] = 0 * @f] * Many notations exist: @f[ a^{\underline{n}} @f], * @f[ \{ \begin{array}{c} * a \\ * n \end{array} \} @f], and others. */ template _Tp __log_pochhammer_lower(_Tp __a, _Tp __n) { if (__isnan(__n) || __isnan(__a)) return __gnu_cxx::__quiet_NaN<_Tp>(); else if (__n == _Tp{0}) return _Tp{0}; else return __log_gamma(__a + _Tp{1}) - __log_gamma(__a - __n + _Tp{1}); } /** * @brief Return the logarithm of the lower Pochhammer symbol * or the falling factorial function. * The lower Pochammer symbol is defined by * @f[ * (a)_n = \prod_{k=0}^{n-1} (a - k), (a)_0 = 1 * = \Gamma(a + 1) / \Gamma(a - n + 1) * @f] * In particular, $f[ (n)_n = n! $f]. */ template _Tp __pochhammer_lower(_Tp __a, _Tp __n) { constexpr auto __log10{2.3025850929940456840179914546843642L}; if (__isnan(__n) || __isnan(__a)) return __gnu_cxx::__quiet_NaN<_Tp>(); else if (__n == _Tp{0}) return _Tp{1}; else { auto __logpoch = __log_gamma(__a + _Tp{1}) - __log_gamma(__a - __n + _Tp{1}); auto __sign = __log_gamma_sign(__a + _Tp{1}) * __log_gamma_sign(__a - __n + _Tp{1}); if (__sign == _Tp{0}) return __gnu_cxx::__quiet_NaN<_Tp>(); else if (__logpoch > __gnu_cxx::__log_max<_Tp>()) return __sign * __gnu_cxx::__infinity<_Tp>(); else return __sign * std::exp(__logpoch); } } constexpr unsigned long long _S_num_harmonic_numer = 29; constexpr unsigned long long _S_harmonic_numer[_S_num_harmonic_numer] { 1ULL, 3ULL, 11ULL, 25ULL, 137ULL, 49ULL, 363ULL, 761ULL, 7129ULL, 7381ULL, 83711ULL, 86021ULL, 1145993ULL, 1171733ULL, 1195757ULL, 2436559ULL, 42142223ULL, 14274301ULL, 275295799ULL, 55835135ULL, 18858053ULL, 19093197ULL, 444316699ULL, 1347822955ULL, 34052522467ULL, 34395742267ULL, 312536252003ULL, 315404588903ULL, 9227046511387ULL }; constexpr unsigned long long _S_harmonic_denom[_S_num_harmonic_numer] { 1ULL, 2ULL, 6ULL, 12ULL, 60ULL, 20ULL, 140ULL, 280ULL, 2520ULL, 2520ULL, 27720ULL, 27720ULL, 360360ULL, 360360ULL, 360360ULL, 720720ULL, 12252240ULL, 4084080ULL, 77597520ULL, 15519504ULL, 5173168ULL, 5173168ULL, 118982864ULL, 356948592ULL, 8923714800ULL, 8923714800ULL, 80313433200ULL, 80313433200ULL, 2329089562800ULL }; template _Tp __harmonic_number(unsigned int __n) { if (__n <= _S_num_harmonic_numer) return _Tp(_S_harmonic_numer[__n - 1]) / _Tp(_S_harmonic_denom[__n - 1]); else { unsigned int __k = _S_num_harmonic_numer - 1; auto _H_k = _Tp(_S_harmonic_numer[__k]) / _Tp(_S_harmonic_denom[__k]); for (__k = _S_num_harmonic_numer; __k <= __n; ++__k) _H_k += _Tp{1} / _Tp(__k); return _H_k; } } /** * @brief Return the digamma function of integral argument. * The digamma or @f$ \psi(x) @f$ function is defined as the logarithmic * derivative of the gamma function: * @f[ * \psi(x) = \frac{\Gamma'(x)}{\Gamma(x)} * @f] * The digamma series for integral argument is given by: * @f[ * \psi(n) = -\gamma_E + \sum_{k=1}^{\infty} \frac{1}{k} * @f] * The latter sum is called the harmonic number, @f$ H_n @f$. */ template _Tp __psi(unsigned int __n) { constexpr _Tp __gamma_E = __gnu_cxx::__math_constants<_Tp>::__gamma_e; return -__gamma_E + __harmonic_number<_Tp>(__n); } /** * @brief Return the digamma function by series expansion. * The digamma or @f$ \psi(x) @f$ function is defined by * @f[ * \psi(x) = \frac{\Gamma'(x)}{\Gamma(x)} * @f] * * The series is given by: * @f[ * \psi(x) = -\gamma_E - \frac{1}{x} * \sum_{k=1}^{\infty} \frac{x - 1}{(k + 1)(x + k)} * @f] */ template _Tp __psi_series(_Tp __x) { _Tp __sum = -__gnu_cxx::__math_constants<_Tp>::__gamma_e; const unsigned int _S_max_iter = 100000; for (unsigned int __k = 0; __k < _S_max_iter; ++__k) { const auto __term = (__x - _Tp{1}) / (_Tp(__k + 1) * (_Tp(__k) + __x)); __sum += __term; if (std::abs(__term) < __gnu_cxx::__epsilon<_Tp>()) break; } return __sum; } /** * @brief Return the digamma function for large argument. * The digamma or @f$ \psi(x) @f$ function is defined by * @f[ * \psi(x) = \frac{\Gamma'(x)}{\Gamma(x)} * @f] * * The asymptotic series is given by: * @f[ * \psi(x) = \ln(x) - \frac{1}{2x} * - \sum_{n=1}^{\infty} \frac{B_{2n}}{2 n x^{2n}} * @f] */ template _Tp __psi_asymp(_Tp __x) { auto __sum = std::log(__x) - _Tp{0.5L} / __x; const auto __xx = __x * __x; auto __xp = __xx; const unsigned int __max_iter = 100; for (unsigned int __k = 1; __k < __max_iter; ++__k) { const _Tp __term = __bernoulli<_Tp>(2 * __k) / (2 * __k * __xp); __sum -= __term; if (std::abs(__term / __sum) < __gnu_cxx::__epsilon<_Tp>()) break; __xp *= __xx; } return __sum; } /** * @brief Return the digamma function. * The digamma or @f$ \psi(x) @f$ function is defined by * @f[ * \psi(x) = \frac{\Gamma'(x)}{\Gamma(x)} * @f] * For negative argument the reflection formula is used: * @f[ * \psi(x) = \psi(1-x) - \pi \cot(\pi x) * @f] */ template _Tp __psi(_Tp __x) { constexpr auto _S_eps = _Tp{4} * __gnu_cxx::__epsilon<_Tp>(); constexpr auto _S_x_asymp = _Tp{20}; constexpr auto __gamma_E = __gnu_cxx::__math_constants<_Tp>::__gamma_e; constexpr auto __2_ln_2 = 2 * __gnu_cxx::__math_constants<_Tp>::__ln_2; const auto __n = std::nearbyint(__x); const bool __integral = (std::abs(__x - _Tp{__n}) < _S_eps); const auto __m = std::nearbyint(2 * __x); const bool __half_integral = !__integral && (std::abs(2 * __x - _Tp{__m}) < _S_eps); if (__integral) { if (__n <= 0) return __gnu_cxx::__quiet_NaN<_Tp>(); else { _Tp __sum = -__gamma_E; for (int __k = 1; __k < __n; ++__k) __sum += _Tp{1} / __k; return __sum; } } if (__half_integral) { _Tp __sum = -__gamma_E - __2_ln_2; for (int __k = 1; __k < __m / 2; ++__k) __sum += _Tp{2} / (2 * __k - 1); return __sum; } else if (__x < _Tp{0}) { constexpr auto __pi = __gnu_cxx::__math_constants<_Tp>::__pi; return __psi(_Tp{1} - __x) - __pi / std::tan(__pi * __x); } else if (__x > _S_x_asymp) return __psi_asymp(__x); else { //return __psi_series(__x); // The series does not converge quickly enough. // Reflect to larger argument and use asymptotic expansion. auto __w = _Tp{0}; auto __y = __x; while (__y <= _S_x_asymp) { __w += 1 / __y; __y += 1; } return __psi_asymp(__y) - __w; } } /** * @brief Return the polygamma function @f$ \psi^{(n)}(x) @f$. * * The polygamma function is related to the Hurwitz zeta function: * @f[ * \psi^{(n)}(x) = (-1)^{n+1} m! \zeta(m+1,x) * @f] */ template _Tp __psi(unsigned int __n, _Tp __x) { if (__x <= _Tp{0}) std::__throw_domain_error(__N("__psi: argument out of range")); else if (__n == 0) return __psi(__x); else { const auto __hzeta = __hurwitz_zeta(_Tp{__n + 1}, __x); const auto __ln_nfact = __log_gamma(_Tp{__n + 1}); auto __result = std::exp(__ln_nfact) * __hzeta; if (__n % 2 == 1) __result = -__result; return __result; } } /** * @brief Return the factorial of the integer n. * * The factorial is: * @f[ * n! = 1 2 ... (n-1) n, 0! = 1 * @f] */ template _GLIBCXX14_CONSTEXPR _Tp __factorial(unsigned int __n) { if (__n <= _S_num_factorials<_Tp>) return _S_factorial_table[__n].__factorial; else return __gnu_cxx::__infinity<_Tp>(); } /** * @brief Return the logarithm of the factorial of the integer n. * * The factorial is: * @f[ * n! = 1 2 ... (n-1) n, 0! = 1 * @f] */ template _GLIBCXX14_CONSTEXPR _Tp __log_factorial(unsigned int __n) { if (__n <= _S_num_factorials<_Tp>) return _S_factorial_table[__n].__log_factorial; else return __log_gamma(_Tp(__n + 1)); } template _GLIBCXX14_CONSTEXPR _Tp __log_double_factorial(_Tp __x) { constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi; return (__x / _Tp{2}) * std::log(_Tp{2}) + (__cos_pi(__x) - _Tp{1}) * std::log(_S_pi / 2) / _Tp{4} + __log_gamma(_Tp{1} + __x / _Tp{2}); } /** * @brief Return the double factorial of the integer n. * * The double factorial is defined for integral n by: * @f[ * n!! = 1 3 5 ... (n-2) n, n odd * n!! = 2 4 6 ... (n-2) n, n even * -1!! = 1 * 0!! = 1 * @f] * The double factorial is defined for odd negative integers * in the obvious way: * @f[ * (-2m - 1)!! = 1 / (1 (-1) (-3) ... (-2m + 1) (-2m - 1)) * = \frac{(-1)^m}{(2m-1)!!} * @f] * for $f[ n = -2m - 1 $f]. */ // I must watch neg log double factorial. Or do the log_t thing. template _GLIBCXX14_CONSTEXPR _Tp __double_factorial(int __n) { if (__n < 0 && __n % 2 == 1) { if (-__n <= _S_num_neg_double_factorials<_Tp>) return _S_neg_double_factorial_table[-(1 + __n) / 2].__factorial; else return std::exp(__log_double_factorial(_Tp(__n))); } else if (__n <= _S_num_double_factorials<_Tp>) return _S_double_factorial_table[__n].__factorial; else return __gnu_cxx::__quiet_NaN<_Tp>(); } /** * @brief Return the logarithm of the double factorial of the integer n. * * The double factorial is defined for integral n by: * @f[ * n!! = 1 3 5 ... (n-2) n, n odd * n!! = 2 4 6 ... (n-2) n, n even * -1!! = 1 * 0!! = 1 * @f] * The double factorial is defined for odd negative integers * in the obvious way: * @f[ * (-2m - 1)!! = 1 / (1 (-1) (-3) ... (-2m + 1) (-2m - 1)) * = \frac{(-1)^m}{(2m-1)!!} * @f] * for $f[ n = -2m - 1 $f]. */ // I should do a signed version. Or do the log_t thing. template _GLIBCXX14_CONSTEXPR _Tp __log_double_factorial(int __n) { if (__n < 0 && __n % 2 == 1) { if (-__n <= _S_num_neg_double_factorials<_Tp>) return _S_neg_double_factorial_table[-(1 + __n) / 2] .__log_factorial; else return __log_double_factorial(_Tp(__n)); } else if (__n <= _S_num_double_factorials<_Tp>) return _S_double_factorial_table[__n].__log_factorial; else return __log_double_factorial(_Tp(__n)); } _GLIBCXX_END_NAMESPACE_VERSION } // namespace __detail } // namespace std #endif // _GLIBCXX_BITS_SF_GAMMA_TCC