// 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