Skip to content

Instantly share code, notes, and snippets.

@fhunleth
Last active February 24, 2018 20:21
Show Gist options
  • Save fhunleth/c937537d593e504af008c33df76c1ede to your computer and use it in GitHub Desktop.
Save fhunleth/c937537d593e504af008c33df76c1ede to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <math.h>
/*
Experiment with the lgamma function. This function makes it possible to approximate
factorials of very large numbers and runs incredibly fast.
See https://github.com/bminor/musl/blob/master/src/math/lgamma_r.c for how lgamma is
calculated.
Output:
$ ./lgamma_demo
log(factorial(2^1)) = 6.931472e-01; factorial(2) = 2
log(factorial(2^2)) = 3.178054e+00; factorial(4) = 24
log(factorial(2^3)) = 1.060460e+01; factorial(8) = 40320
log(factorial(2^4)) = 3.067186e+01; factorial(16) = 20922789888000
log(factorial(2^5)) = 8.155796e+01; factorial(32) = 263130836933693530736719244554141696
log(factorial(2^6)) = 2.051682e+02; factorial(64) = 126886932185884162380333265956903167456522182075982934342667270431996346574638836258701312
log(factorial(2^7)) = 4.964055e+02; factorial(128) = 385620482362580413060467580659848871904392759652224579069219142907619930025256406010544077183012054968323646314062715475761903434441646247809484619302669507047808322407521301710243154285924041536446318899976728477696
log(factorial(2^8)) = 1.167257e+03; factorial(256) = 857817775342842620376491471158359845786857088718785516649048318965592362739509410490368855543723906448720393861830071928258120682643429606680682352638870163953998469286995629858408829816963472019822451191339246263040820753766573125529006846046912738939146389896836892843786970641010479912056915831257813605235404727029197336982651497596131782285320141988091665156525178058906137219286573033163897216055890243762801036237023065256741055522879072697505063596560886510810413984238111285267388137561389141065728
log(factorial(2^9)) = 2.686060e+03; factorial(512) = 347728979313260627411713206894611749654770420590759468823108993971476853704638600971459242604864866707665857372865660407546356268762467537239021312774197262507038704479832567839733202689687470821906962929579309887715067275719168492052123081802159780389522592456335244911855315356379523874327042387021530744009581251343557927749134943209363840324924067836376157196804954148574967951998677720858609239276460928692446997803299151333445752798341346327846386459491695423243177265648830260793443531250312376517777865490073321368498417437646559156517005643693282771812945297087357079456953089634028758252801719930662369778967835758968312256274421912235916723151311754801565440114661857353066347329646811278966483135430723035998087803520061255008573577094965040163243579732894417538009703271190136202366257837555411882547478965642786569622255320400151438993227674448978454894331661592373570971461986093282703183689145024866730897612823798042334256754839981469030535418019216155166255961674441597890274534502302314902788803801787952597985514612613529061000266759196465157711722259161251171561386724180323473157418822678018797032178970186962965037941677590932047499944758607872
log(factorial(2^10)) = 6.078212e+03; factorial(1024) = 541852879605885690876564069225147304279103025311836456084075417510784290926318349395292102021742618103514151386842019490478106680569113018986941037451659898282293266212900022135522116654509325359472021417412532956271631439956928165471448486709417021083287353740418198178307915485249869092609068089216094551537772909007688826911161386213982246839684347038812088305266980884016310621775792369819434353635394253414865731359160889542088962802051647651733762661120131794057269803462841407621192110508620607364096169480687453968035602764583773973385588819673476764277874283365901327415860623512314533187475868659203210519827328013387317389114586787851279685825276378175544841274244267003995276429880865394368345392063721109730923175156079720815721505461269671706355540536107389469124234167571104677336800855594979838820728288949464113106311124190426254191181055188913660037539012015615339433092874747488545004193813690030475709443896367082931116082473962470849355709179108630461952231307904315881953603169026214299237709575928663514188271176531809958657111083955032259377699041220945831639644877837039367771325240525702177319221607656225530474809353074336207263958421958405300842976727653822347866661955995594825648880260200349623117602291542928392034990108470125576669797815963231914923609194600438172075103518222436832125319352191180632451593731690033568119245754601457079012116197415214849622248942569071189248037619060390563439192161848603503612130892285450240234905560161570852360412123881981919936297021881178224171129967840551601427659291831736758713193086703001396967518640952530349802495115212738580262251285069041178869184953261541665175430922459008348976255255850990188633198061771486429470586359592132566816037005584916373604038867147973725617755729964131018868864595560396863740731929415753927117075246046985093710959055678265532298442791012400700855266115410790363336818860323253349407645362306742311664864355951305126638726110668252781380209013956927686010183647362835829764332428361544618899866519042025918326388009040489796562935154502528534524822444157992131869250517150183104132120355170318259048901588801877882420753682200499100115551889764006988598346606703115878507130464146788975545273345635497876817246213181543371646082114526917836843359534581304422417045693364303285107743967517087330790933310016707118904908283812674434386272842116653812538806976562567233949116867340080854564877315647501114680967382032867349751552165357244729341115429902870331437188483583097405664271720120111109906855815500322356796459150618138028840935010830469586462577090724947161742536363480426437120037939754542762109433651517228353271669719040
log(factorial(2^11)) = 1.357195e+04; factorial(2048) = inf
log(factorial(2^12)) = 2.997865e+04; factorial(4096) = inf
log(factorial(2^13)) = 6.563083e+04; factorial(8192) = inf
log(factorial(2^14)) = 1.426131e+05; factorial(16384) = inf
log(factorial(2^15)) = 3.079338e+05; factorial(32768) = inf
log(factorial(2^16)) = 6.612880e+05; factorial(65536) = inf
log(factorial(2^17)) = 1.413422e+06; factorial(131072) = inf
log(factorial(2^18)) = 3.008542e+06; factorial(262144) = inf
log(factorial(2^19)) = 6.380486e+06; factorial(524288) = inf
log(factorial(2^20)) = 1.348778e+07; factorial(1048576) = inf
log(factorial(2^21)) = 2.842919e+07; factorial(2097152) = inf
log(factorial(2^22)) = 5.976564e+07; factorial(4194304) = inf
log(factorial(2^23)) = 1.253458e+08; factorial(8388608) = inf
log(factorial(2^24)) = 2.623207e+08; factorial(16777216) = inf
log(factorial(2^25)) = 5.478996e+08; factorial(33554432) = inf
log(factorial(2^26)) = 1.142315e+09; factorial(67108864) = inf
log(factorial(2^27)) = 2.377664e+09; factorial(134217728) = inf
log(factorial(2^28)) = 4.941392e+09; factorial(268435456) = inf
log(factorial(2^29)) = 1.025492e+10; factorial(536870912) = inf
log(factorial(2^30)) = 2.125409e+10; factorial(1073741824) = inf
log(factorial(2^31)) = 4.399671e+10; factorial(2147483648) = inf
log(factorial(2^32)) = 9.097046e+10; factorial(4294967296) = inf
log(factorial(2^33)) = 1.878950e+11; factorial(8589934592) = inf
log(factorial(2^34)) = 3.876982e+11; factorial(17179869184) = inf
log(factorial(2^35)) = 7.992127e+11; factorial(34359738368) = inf
log(factorial(2^36)) = 1.646058e+12; factorial(68719476736) = inf
log(factorial(2^37)) = 3.387382e+12; factorial(137438953472) = inf
log(factorial(2^38)) = 6.965294e+12; factorial(274877906944) = inf
log(factorial(2^39)) = 1.431165e+13; factorial(549755813888) = inf
log(factorial(2^40)) = 2.938542e+13; factorial(1099511627776) = inf
log(factorial(2^41)) = 6.029509e+13; factorial(2199023255552) = inf
log(factorial(2^42)) = 1.236387e+14; factorial(4398046511104) = inf
log(factorial(2^43)) = 2.533744e+14; factorial(8796093022208) = inf
log(factorial(2^44)) = 5.189427e+14; factorial(17592186044416) = inf
log(factorial(2^45)) = 1.062273e+15; factorial(35184372088832) = inf
log(factorial(2^46)) = 2.173323e+15; factorial(70368744177664) = inf
log(factorial(2^47)) = 4.444197e+15; factorial(140737488355328) = inf
log(factorial(2^48)) = 9.083497e+15; factorial(281474976710656) = inf
log(factorial(2^49)) = 1.855720e+16; factorial(562949953421312) = inf
log(factorial(2^50)) = 3.789482e+16; factorial(1125899906842624) = inf
log(factorial(2^51)) = 7.735046e+16; factorial(2251799813685248) = inf
log(factorial(2^52)) = 1.578226e+17; factorial(4503599627370496) = inf
log(factorial(2^53)) = 3.218885e+17; factorial(9007199254740992) = inf
log(factorial(2^54)) = 6.562636e+17; factorial(18014398509481984) = inf
log(factorial(2^55)) = 1.337500e+18; factorial(36028797018963968) = inf
log(factorial(2^56)) = 2.724947e+18; factorial(72057594037927936) = inf
log(factorial(2^57)) = 5.549788e+18; factorial(144115188075855872) = inf
log(factorial(2^58)) = 1.129936e+19; factorial(288230376151711744) = inf
log(factorial(2^59)) = 2.299830e+19; factorial(576460752303423488) = inf
log(factorial(2^60)) = 4.679574e+19; factorial(1152921504606846976) = inf
log(factorial(2^61)) = 9.518976e+19; factorial(2305843009213693952) = inf
log(factorial(2^62)) = 1.935761e+20; factorial(4611686018427387904) = inf
log(factorial(2^63)) = 3.935454e+20; factorial(9223372036854775808) = inf
log(factorial(2^64)) = 7.998770e+20; factorial(18446744073709551616) = inf
log(factorial(2^65)) = 1.625327e+21; factorial(36893488147419103232) = inf
log(factorial(2^66)) = 3.301799e+21; factorial(73786976294838206464) = inf
log(factorial(2^67)) = 6.705887e+21; factorial(147573952589676412928) = inf
log(factorial(2^68)) = 1.361636e+22; factorial(295147905179352825856) = inf
log(factorial(2^69)) = 2.764187e+22; factorial(590295810358705651712) = inf
log(factorial(2^70)) = 5.610207e+22; factorial(1180591620717411303424) = inf
log(factorial(2^71)) = 1.138408e+23; factorial(2361183241434822606848) = inf
log(factorial(2^72)) = 2.309549e+23; factorial(4722366482869645213696) = inf
log(factorial(2^73)) = 4.684563e+23; factorial(9444732965739290427392) = inf
log(factorial(2^74)) = 9.500059e+23; factorial(18889465931478580854784) = inf
log(factorial(2^75)) = 1.926198e+24; factorial(37778931862957161709568) = inf
log(factorial(2^76)) = 3.904769e+24; factorial(75557863725914323419136) = inf
log(factorial(2^77)) = 7.914283e+24; factorial(151115727451828646838272) = inf
log(factorial(2^78)) = 1.603806e+25; factorial(302231454903657293676544) = inf
log(factorial(2^79)) = 3.249510e+25; factorial(604462909807314587353088) = inf
log(factorial(2^80)) = 6.582816e+25; factorial(1208925819614629174706176) = inf
log(factorial(2^81)) = 1.333322e+26; factorial(2417851639229258349412352) = inf
log(factorial(2^82)) = 2.700163e+26; factorial(4835703278458516698824704) = inf
log(factorial(2^83)) = 5.467364e+26; factorial(9671406556917033397649408) = inf
log(factorial(2^84)) = 1.106880e+27; factorial(19342813113834066795298816) = inf
log(factorial(2^85)) = 2.240575e+27; factorial(38685626227668133590597632) = inf
log(factorial(2^86)) = 4.534780e+27; factorial(77371252455336267181195264) = inf
log(factorial(2^87)) = 9.176819e+27; factorial(154742504910672534362390528) = inf
log(factorial(2^88)) = 1.856816e+28; factorial(309485009821345068724781056) = inf
log(factorial(2^89)) = 3.756535e+28; factorial(618970019642690137449562112) = inf
log(factorial(2^90)) = 7.598878e+28; factorial(1237940039285380274899124224) = inf
log(factorial(2^91)) = 1.536937e+29; factorial(2475880078570760549798248448) = inf
log(factorial(2^92)) = 3.108197e+29; factorial(4951760157141521099596496896) = inf
log(factorial(2^93)) = 6.285040e+29; factorial(9903520314283042199192993792) = inf
log(factorial(2^94)) = 1.270737e+30; factorial(19807040628566084398385987584) = inf
log(factorial(2^95)) = 2.568933e+30; factorial(39614081257132168796771975168) = inf
log(factorial(2^96)) = 5.192782e+30; factorial(79228162514264337593543950336) = inf
log(factorial(2^97)) = 1.049540e+31; factorial(158456325028528675187087900672) = inf
log(factorial(2^98)) = 2.121046e+31; factorial(316912650057057350374175801344) = inf
log(factorial(2^99)) = 4.286026e+31; factorial(633825300114114700748351602688) = inf
log(factorial(2^100)) = 8.659919e+31; factorial(1267650600228229401496703205376) = inf
log(factorial(2^101)) = 1.749557e+32; factorial(2535301200456458802993406410752) = inf
log(factorial(2^102)) = 3.534261e+32; factorial(5070602400912917605986812821504) = inf
log(factorial(2^103)) = 7.138816e+32; factorial(10141204801825835211973625643008) = inf
log(factorial(2^104)) = 1.441822e+33; factorial(20282409603651670423947251286016) = inf
log(factorial(2^105)) = 2.911761e+33; factorial(40564819207303340847894502572032) = inf
log(factorial(2^106)) = 5.879757e+33; factorial(81129638414606681695789005144064) = inf
log(factorial(2^107)) = 1.187198e+34; factorial(162259276829213363391578010288128) = inf
log(factorial(2^108)) = 2.396891e+34; factorial(324518553658426726783156020576256) = inf
log(factorial(2^109)) = 4.838769e+34; factorial(649037107316853453566312041152512) = inf
log(factorial(2^110)) = 9.767514e+34; factorial(1298074214633706907132624082305024) = inf
log(factorial(2^111)) = 1.971498e+35; factorial(2596148429267413814265248164610048) = inf
log(factorial(2^112)) = 3.978986e+35; factorial(5192296858534827628530496329220096) = inf
log(factorial(2^113)) = 8.029953e+35; factorial(10384593717069655257060992658440192) = inf
log(factorial(2^114)) = 1.620387e+36; factorial(20769187434139310514121985316880384) = inf
log(factorial(2^115)) = 3.269565e+36; factorial(41538374868278621028243970633760768) = inf
log(factorial(2^116)) = 6.596715e+36; factorial(83076749736557242056487941267521536) = inf
log(factorial(2^117)) = 1.330860e+37; factorial(166153499473114484112975882535043072) = inf
log(factorial(2^118)) = 2.684754e+37; factorial(332306998946228968225951765070086144) = inf
log(factorial(2^119)) = 5.415575e+37; factorial(664613997892457936451903530140172288) = inf
log(factorial(2^120)) = 1.092328e+38; factorial(1329227995784915872903807060280344576) = inf
log(factorial(2^121)) = 2.203084e+38; factorial(2658455991569831745807614120560689152) = inf
log(factorial(2^122)) = 4.443022e+38; factorial(5316911983139663491615228241121378304) = inf
log(factorial(2^123)) = 8.959752e+38; factorial(10633823966279326983230456482242756608) = inf
log(factorial(2^124)) = 1.806692e+39; factorial(21267647932558653966460912964485513216) = inf
log(factorial(2^125)) = 3.642867e+39; factorial(42535295865117307932921825928971026432) = inf
log(factorial(2^126)) = 7.344701e+39; factorial(85070591730234615865843651857942052864) = inf
log(factorial(2^127)) = 1.480733e+40; factorial(170141183460469231731687303715884105728) = inf
log(factorial(2^128)) = 2.985054e+40; factorial(340282366920938463463374607431768211456) = inf
log(factorial(2^129)) = 6.017280e+40; factorial(680564733841876926926749214863536422912) = inf
log(factorial(2^130)) = 1.212891e+41; factorial(1361129467683753853853498429727072845824) = inf
log(factorial(2^131)) = 2.444651e+41; factorial(2722258935367507707706996859454145691648) = inf
log(factorial(2^132)) = 4.927040e+41; factorial(5444517870735015415413993718908291383296) = inf
log(factorial(2^133)) = 9.929557e+41; factorial(10889035741470030830827987437816582766592) = inf
log(factorial(2^134)) = 2.001007e+42; factorial(21778071482940061661655974875633165533184) = inf
log(factorial(2^135)) = 4.032204e+42; factorial(43556142965880123323311949751266331066368) = inf
log(factorial(2^136)) = 8.124790e+42; factorial(87112285931760246646623899502532662132736) = inf
log(factorial(2^137)) = 1.637034e+43; factorial(174224571863520493293247799005065324265472) = inf
log(factorial(2^138)) = 3.298221e+43; factorial(348449143727040986586495598010130648530944) = inf
log(factorial(2^139)) = 6.644748e+43; factorial(696898287454081973172991196020261297061888) = inf
log(factorial(2^140)) = 1.338611e+44; factorial(1393796574908163946345982392040522594123776) = inf
log(factorial(2^141)) = 2.696543e+44; factorial(2787593149816327892691964784081045188247552) = inf
log(factorial(2^142)) = 5.431731e+44; factorial(5575186299632655785383929568162090376495104) = inf
log(factorial(2^143)) = 1.094075e+45; factorial(11150372599265311570767859136324180752990208) = inf
log(factorial(2^144)) = 2.203608e+45; factorial(22300745198530623141535718272648361505980416) = inf
log(factorial(2^145)) = 4.438131e+45; factorial(44601490397061246283071436545296723011960832) = inf
log(factorial(2^146)) = 8.938093e+45; factorial(89202980794122492566142873090593446023921664) = inf
log(factorial(2^147)) = 1.799985e+46; factorial(178405961588244985132285746181186892047843328) = inf
log(factorial(2^148)) = 3.624702e+46; factorial(356811923176489970264571492362373784095686656) = inf
log(factorial(2^149)) = 7.298868e+46; factorial(713623846352979940529142984724747568191373312) = inf
log(factorial(2^150)) = 1.469667e+47; factorial(1427247692705959881058285969449495136382746624) = inf
log(factorial(2^151)) = 2.959119e+47; factorial(2854495385411919762116571938898990272765493248) = inf
log(factorial(2^152)) = 5.957810e+47; factorial(5708990770823839524233143877797980545530986496) = inf
log(factorial(2^153)) = 1.199476e+48; factorial(11417981541647679048466287755595961091061972992) = inf
log(factorial(2^154)) = 2.414781e+48; factorial(22835963083295358096932575511191922182123945984) = inf
log(factorial(2^155)) = 4.861220e+48; factorial(45671926166590716193865151022383844364247891968) = inf
log(factorial(2^156)) = 9.785755e+48; factorial(91343852333181432387730302044767688728495783936) = inf
log(factorial(2^157)) = 1.969814e+49; factorial(182687704666362864775460604089535377456991567872) = inf
log(factorial(2^158)) = 3.964954e+49; factorial(365375409332725729550921208179070754913983135744) = inf
log(factorial(2^159)) = 7.980559e+49; factorial(730750818665451459101842416358141509827966271488) = inf
log(factorial(2^160)) = 1.606242e+50; factorial(1461501637330902918203684832716283019655932542976) = inf
log(factorial(2^161)) = 3.232745e+50; factorial(2923003274661805836407369665432566039311865085952) = inf
log(factorial(2^162)) = 6.506012e+50; factorial(5846006549323611672814739330865132078623730171904) = inf
log(factorial(2^163)) = 1.309307e+51; factorial(11692013098647223345629478661730264157247460343808) = inf
log(factorial(2^164)) = 2.634822e+51; factorial(23384026197294446691258957323460528314494920687616) = inf
log(factorial(2^165)) = 5.302061e+51; factorial(46768052394588893382517914646921056628989841375232) = inf
log(factorial(2^166)) = 1.066896e+52; factorial(93536104789177786765035829293842113257979682750464) = inf
log(factorial(2^167)) = 2.146758e+52; factorial(187072209578355573530071658587684226515959365500928) = inf
log(factorial(2^168)) = 4.319450e+52; factorial(374144419156711147060143317175368453031918731001856) = inf
log(factorial(2^169)) = 8.690767e+52; factorial(748288838313422294120286634350736906063837462003712) = inf
log(factorial(2^170)) = 1.748527e+53; factorial(1496577676626844588240573268701473812127674924007424) = inf
log(factorial(2^171)) = 3.517801e+53; factorial(2993155353253689176481146537402947624255349848014848) = inf
log(factorial(2^172)) = 7.077095e+53; factorial(5986310706507378352962293074805895248510699696029696) = inf
log(factorial(2^173)) = 1.423718e+54; factorial(11972621413014756705924586149611790497021399392059392) = inf
log(factorial(2^174)) = 2.864033e+54; factorial(23945242826029513411849172299223580994042798784118784) = inf
log(factorial(2^175)) = 5.761262e+54; factorial(47890485652059026823698344598447161988085597568237568) = inf
log(factorial(2^176)) = 1.158891e+55; factorial(95780971304118053647396689196894323976171195136475136) = inf
log(factorial(2^177)) = 2.331061e+55; factorial(191561942608236107294793378393788647952342390272950272) = inf
log(factorial(2^178)) = 4.688678e+55; factorial(383123885216472214589586756787577295904684780545900544) = inf
log(factorial(2^179)) = 9.430468e+55; factorial(766247770432944429179173513575154591809369561091801088) = inf
log(factorial(2^180)) = 1.896716e+56; factorial(1532495540865888858358347027150309183618739122183602176) = inf
log(factorial(2^181)) = 3.814677e+56; factorial(3064991081731777716716694054300618367237478244367204352) = inf
log(factorial(2^182)) = 7.671844e+56; factorial(6129982163463555433433388108601236734474956488734408704) = inf
log(factorial(2^183)) = 1.542867e+57; factorial(12259964326927110866866776217202473468949912977468817408) = inf
log(factorial(2^184)) = 3.102729e+57; factorial(24519928653854221733733552434404946937899825954937634816) = inf
log(factorial(2^185)) = 6.239450e+57; factorial(49039857307708443467467104868809893875799651909875269632) = inf
log(factorial(2^186)) = 1.254688e+58; factorial(98079714615416886934934209737619787751599303819750539264) = inf
log(factorial(2^187)) = 2.522974e+58; factorial(196159429230833773869868419475239575503198607639501078528) = inf
log(factorial(2^188)) = 5.073141e+58; factorial(392318858461667547739736838950479151006397215279002157056) = inf
log(factorial(2^189)) = 1.020067e+59; factorial(784637716923335095479473677900958302012794430558004314112) = inf
log(factorial(2^190)) = 2.051011e+59; factorial(1569275433846670190958947355801916604025588861116008628224) = inf
log(factorial(2^191)) = 4.123777e+59; factorial(3138550867693340381917894711603833208051177722232017256448) = inf
log(factorial(2^192)) = 8.291063e+59; factorial(6277101735386680763835789423207666416102355444464034512896) = inf
log(factorial(2^193)) = 1.666915e+60; factorial(12554203470773361527671578846415332832204710888928069025792) = inf
log(factorial(2^194)) = 3.351233e+60; factorial(25108406941546723055343157692830665664409421777856138051584) = inf
log(factorial(2^195)) = 6.737274e+60; factorial(50216813883093446110686315385661331328818843555712276103168) = inf
log(factorial(2^196)) = 1.354416e+61; factorial(100433627766186892221372630771322662657637687111424552206336) = inf
log(factorial(2^197)) = 2.722756e+61; factorial(200867255532373784442745261542645325315275374222849104412672) = inf
log(factorial(2^198)) = 5.473357e+61; factorial(401734511064747568885490523085290650630550748445698208825344) = inf
log(factorial(2^199)) = 1.100241e+62; factorial(803469022129495137770981046170581301261101496891396417650688) = inf
log(factorial(2^200)) = 2.211620e+62; factorial(1606938044258990275541962092341162602522202993782792835301376) = inf
log(factorial(2^201)) = 4.445516e+62; factorial(3213876088517980551083924184682325205044405987565585670602752) = inf
log(factorial(2^202)) = 8.935587e+62; factorial(6427752177035961102167848369364650410088811975131171341205504) = inf
log(factorial(2^203)) = 1.796028e+63; factorial(12855504354071922204335696738729300820177623950262342682411008) = inf
log(factorial(2^204)) = 3.609878e+63; factorial(25711008708143844408671393477458601640355247900524685364822016) = inf
log(factorial(2^205)) = 7.255398e+63; factorial(51422017416287688817342786954917203280710495801049370729644032) = inf
log(factorial(2^206)) = 1.458208e+64; factorial(102844034832575377634685573909834406561420991602098741459288064) = inf
log(factorial(2^207)) = 2.930674e+64; factorial(205688069665150755269371147819668813122841983204197482918576128) = inf
log(factorial(2^208)) = 5.889862e+64; factorial(411376139330301510538742295639337626245683966408394965837152256) = inf
log(factorial(2^209)) = 1.183675e+65; factorial(822752278660603021077484591278675252491367932816789931674304512) = inf
log(factorial(2^210)) = 2.378756e+65; factorial(1645504557321206042154969182557350504982735865633579863348609024) = inf
log(factorial(2^211)) = 4.780324e+65; factorial(3291009114642412084309938365114701009965471731267159726697218048) = inf
log(factorial(2^212)) = 9.606271e+65; factorial(6582018229284824168619876730229402019930943462534319453394436096) = inf
log(factorial(2^213)) = 1.930379e+66; factorial(13164036458569648337239753460458804039861886925068638906788872192) = inf
log(factorial(2^214)) = 3.879007e+66; factorial(26328072917139296674479506920917608079723773850137277813577744384) = inf
log(factorial(2^215)) = 7.794513e+66; factorial(52656145834278593348959013841835216159447547700274555627155488768) = inf
log(factorial(2^216)) = 1.566202e+67; factorial(105312291668557186697918027683670432318895095400549111254310977536) = inf
log(factorial(2^217)) = 3.147004e+67; factorial(210624583337114373395836055367340864637790190801098222508621955072) = inf
log(factorial(2^218)) = 6.323206e+67; factorial(421249166674228746791672110734681729275580381602196445017243910144) = inf
log(factorial(2^219)) = 1.270481e+68; factorial(842498333348457493583344221469363458551160763204392890034487820288) = inf
log(factorial(2^220)) = 2.552642e+68; factorial(1684996666696914987166688442938726917102321526408785780068975640576) = inf
log(factorial(2^221)) = 5.128642e+68; factorial(3369993333393829974333376885877453834204643052817571560137951281152) = inf
log(factorial(2^222)) = 1.030400e+69; factorial(6739986666787659948666753771754907668409286105635143120275902562304) = inf
log(factorial(2^223)) = 2.070144e+69; factorial(13479973333575319897333507543509815336818572211270286240551805124608) = inf
log(factorial(2^224)) = 4.158975e+69; factorial(26959946667150639794667015087019630673637144422540572481103610249216) = inf
log(factorial(2^225)) = 8.355325e+69; factorial(53919893334301279589334030174039261347274288845081144962207220498432) = inf
log(factorial(2^226)) = 1.678540e+70; factorial(107839786668602559178668060348078522694548577690162289924414440996864) = inf
log(factorial(2^227)) = 3.372030e+70; factorial(215679573337205118357336120696157045389097155380324579848828881993728) = inf
log(factorial(2^228)) = 6.773959e+70; factorial(431359146674410236714672241392314090778194310760649159697657763987456) = inf
log(factorial(2^229)) = 1.360772e+71; factorial(862718293348820473429344482784628181556388621521298319395315527974912) = inf
log(factorial(2^230)) = 2.733503e+71; factorial(1725436586697640946858688965569256363112777243042596638790631055949824) = inf
log(factorial(2^231)) = 5.490926e+71; factorial(3450873173395281893717377931138512726225554486085193277581262111899648) = inf
log(factorial(2^232)) = 1.102969e+72; factorial(6901746346790563787434755862277025452451108972170386555162524223799296) = inf
log(factorial(2^233)) = 2.215506e+72; factorial(13803492693581127574869511724554050904902217944340773110325048447598592) = inf
log(factorial(2^234)) = 4.450148e+72; factorial(27606985387162255149739023449108101809804435888681546220650096895197184) = inf
log(factorial(2^235)) = 8.938567e+72; factorial(55213970774324510299478046898216203619608871777363092441300193790394368) = inf
log(factorial(2^236)) = 1.795368e+73; factorial(110427941548649020598956093796432407239217743554726184882600387580788736) = inf
log(factorial(2^237)) = 3.606044e+73; factorial(220855883097298041197912187592864814478435487109452369765200775161577472) = inf
log(factorial(2^238)) = 7.242705e+73; factorial(441711766194596082395824375185729628956870974218904739530401550323154944) = inf
log(factorial(2^239)) = 1.454664e+74; factorial(883423532389192164791648750371459257913741948437809479060803100646309888) = inf
log(factorial(2^240)) = 2.921576e+74; factorial(1766847064778384329583297500742918515827483896875618958121606201292619776) = inf
log(factorial(2^241)) = 5.867645e+74; factorial(3533694129556768659166595001485837031654967793751237916243212402585239552) = inf
log(factorial(2^242)) = 1.178428e+75; factorial(7067388259113537318333190002971674063309935587502475832486424805170479104) = inf
log(factorial(2^243)) = 2.366653e+75; factorial(14134776518227074636666380005943348126619871175004951664972849610340958208) = inf
log(factorial(2^244)) = 4.752901e+75; factorial(28269553036454149273332760011886696253239742350009903329945699220681916416) = inf
log(factorial(2^245)) = 9.544992e+75; factorial(56539106072908298546665520023773392506479484700019806659891398441363832832) = inf
log(factorial(2^246)) = 1.916836e+76; factorial(113078212145816597093331040047546785012958969400039613319782796882727665664) = inf
log(factorial(2^247)) = 3.849349e+76; factorial(226156424291633194186662080095093570025917938800079226639565593765455331328) = inf
log(factorial(2^248)) = 7.730049e+76; factorial(452312848583266388373324160190187140051835877600158453279131187530910662656) = inf
log(factorial(2^249)) = 1.552280e+77; factorial(904625697166532776746648320380374280103671755200316906558262375061821325312) = inf
log(factorial(2^250)) = 3.117101e+77; factorial(1809251394333065553493296640760748560207343510400633813116524750123642650624) = inf
log(factorial(2^251)) = 6.259284e+77; factorial(3618502788666131106986593281521497120414687020801267626233049500247285301248) = inf
log(factorial(2^252)) = 1.256873e+78; factorial(7237005577332262213973186563042994240829374041602535252466099000494570602496) = inf
log(factorial(2^253)) = 2.523779e+78; factorial(14474011154664524427946373126085988481658748083205070504932198000989141204992) = inf
log(factorial(2^254)) = 5.067623e+78; factorial(28948022309329048855892746252171976963317496166410141009864396001978282409984) = inf
log(factorial(2^255)) = 1.017538e+79; factorial(57896044618658097711785492504343953926634992332820282019728792003956564819968) = inf
*/
int main()
{
for (int i = 1; i < 256; i++) {
long double x = exp2l(i);
long double y = lgammal(x + 1);
printf("log(factorial(2^%d)) = %Le; factorial(%.0Lf) = %.0Lf\n", i, y, x, expl(y));
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment