From 745a66460c0e334b16e994b05406af4707088f68 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Sat, 30 Jan 2021 12:34:48 +0300 Subject: [PATCH 1/6] pi [CI SKIP] --- .../constants/high_precision_constants.hpp | 278 ++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 include/boost/math/constants/high_precision_constants.hpp diff --git a/include/boost/math/constants/high_precision_constants.hpp b/include/boost/math/constants/high_precision_constants.hpp new file mode 100644 index 0000000000..aac3c360db --- /dev/null +++ b/include/boost/math/constants/high_precision_constants.hpp @@ -0,0 +1,278 @@ +// Copyright Matt Borland 2021. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_MATH_HIGH_PRECISION_CONSTANTS +#define BOOST_MATH_HIGH_PRECISION_CONSTANTS + +namespace boost { namespace math { namespace numbers { + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// pi and functions of pi +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +template +const T pi = T("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982\ +14808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612\ +84756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540\ +91715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379\ +96274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675\ +23846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589\ +23542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908\ +30264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235\ +37875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353\ +01852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060\ +40092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425\ +90694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816\ +36009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665\ +49911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854\ +81613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016\ +53466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285\ +02221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009946576\ +40789512694683983525957098258226205224894077267194782684826014769909026401363944374553050682034962524517493996514314298\ +09190659250937221696461515709858387410597885959772975498930161753928468138268683868942774155991855925245953959431049972\ +52468084598727364469584865383673622262609912460805124388439045124413654976278079771569143599770012961608944169486855584\ +84063534220722258284886481584560285060168427394522674676788952521385225499546667278239864565961163548862305774564980355\ +93634568174324112515076069479451096596094025228879710893145669136867228748940560101503308617928680920874760917824938589\ +00971490967598526136554978189312978482168299894872265880485756401427047755513237964145152374623436454285844479526586782\ +10511413547357395231134271661021359695362314429524849371871101457654035902799344037420073105785390621983874478084784896\ +83321445713868751943506430218453191048481005370614680674919278191197939952061419663428754440643745123718192179998391015\ +91956181467514269123974894090718649423196156794520809514655022523160388193014209376213785595663893778708303906979207734\ +67221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962\ +68561005508106658796998163574736384052571459102897064140110971206280439039759515677157700420337869936007230558763176359\ +42187312514712053292819182618612586732157919841484882916447060957527069572209175671167229109816909152801735067127485832\ +22871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351\ +55650884909989859982387345528331635507647918535893226185489632132933089857064204675259070915481416549859461637180270981\ +99430992448895757128289059232332609729971208443357326548938239119325974636673058360414281388303203824903758985243744170\ +29132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576\ +85726243344189303968642624341077322697802807318915441101044682325271620105265227211166039666557309254711055785376346682\ +06531098965269186205647693125705863566201855810072936065987648611791045334885034611365768675324944166803962657978771855\ +60845529654126654085306143444318586769751456614068007002378776591344017127494704205622305389945613140711270004078547332\ +69939081454664645880797270826683063432858785698305235808933065757406795457163775254202114955761581400250126228594130216\ +47155097925923099079654737612551765675135751782966645477917450112996148903046399471329621073404375189573596145890193897\ +13111790429782856475032031986915140287080859904801094121472213179476477726224142548545403321571853061422881375850430633\ +21751829798662237172159160771669254748738986654949450114654062843366393790039769265672146385306736096571209180763832716\ +64162748888007869256029022847210403172118608204190004229661711963779213375751149595015660496318629472654736425230817703\ +67515906735023507283540567040386743513622224771589150495309844489333096340878076932599397805419341447377441842631298608\ +09988868741326047215695162396586457302163159819319516735381297416772947867242292465436680098067692823828068996400482435\ +40370141631496589794092432378969070697794223625082216889573837986230015937764716512289357860158816175578297352334460428\ +15126272037343146531977774160319906655418763979293344195215413418994854447345673831624993419131814809277771038638773431\ +77207545654532207770921201905166096280490926360197598828161332316663652861932668633606273567630354477628035045077723554\ +71058595487027908143562401451718062464362679456127531813407833033625423278394497538243720583531147711992606381334677687\ +96959703098339130771098704085913374641442822772634659470474587847787201927715280731767907707157213444730605700733492436\ +93113835049316312840425121925651798069411352801314701304781643788518529092854520116583934196562134914341595625865865570\ +55269049652098580338507224264829397285847831630577775606888764462482468579260395352773480304802900587607582510474709164\ +39613626760449256274204208320856611906254543372131535958450687724602901618766795240616342522577195429162991930645537799\ +14037340432875262888963995879475729174642635745525407909145135711136941091193932519107602082520261879853188770584297259\ +16778131496990090192116971737278476847268608490033770242429165130050051683233643503895170298939223345172201381280696501\ +17844087451960121228599371623130171144484640903890644954440061986907548516026327505298349187407866808818338510228334508\ +50486082503930213321971551843063545500766828294930413776552793975175461395398468339363830474611996653858153842056853386\ +21867252334028308711232827892125077126294632295639898989358211674562701021835646220134967151881909730381198004973407239\ +61036854066431939509790190699639552453005450580685501956730229219139339185680344903982059551002263535361920419947455385\ +93810234395544959778377902374216172711172364343543947822181852862408514006660443325888569867054315470696574745855033232\ +33421073015459405165537906866273337995851156257843229882737231989875714159578111963583300594087306812160287649628674460\ +47746491599505497374256269010490377819868359381465741268049256487985561453723478673303904688383436346553794986419270563\ +87293174872332083760112302991136793862708943879936201629515413371424892830722012690147546684765357616477379467520049075\ +71555278196536213239264061601363581559074220202031872776052772190055614842555187925303435139844253223415762336106425063\ +90497500865627109535919465897514131034822769306247435363256916078154781811528436679570611086153315044521274739245449454\ +23682886061340841486377670096120715124914043027253860764823634143346235189757664521641376796903149501910857598442391986\ +29164219399490723623464684411739403265918404437805133389452574239950829659122850855582157250310712570126683024029295252\ +20118726767562204154205161841634847565169998116141010029960783869092916030288400269104140792886215078424516709087000699\ +28212066041837180653556725253256753286129104248776182582976515795984703562226293486003415872298053498965022629174878820\ +27342092222453398562647669149055628425039127577102840279980663658254889264880254566101729670266407655904290994568150652\ +65305371829412703369313785178609040708667114965583434347693385781711386455873678123014587687126603489139095620099393610\ +31029161615288138437909904231747336394804575931493140529763475748119356709110137751721008031559024853090669203767192203\ +32290943346768514221447737939375170344366199104033751117354719185504644902636551281622882446257591633303910722538374218\ +21408835086573917715096828874782656995995744906617583441375223970968340800535598491754173818839994469748676265516582765\ +84835884531427756879002909517028352971634456212964043523117600665101241200659755851276178583829204197484423608007193045\ +76189323492292796501987518721272675079812554709589045563579212210333466974992356302549478024901141952123828153091140790\ +73860251522742995818072471625916685451333123948049470791191532673430282441860414263639548000448002670496248201792896476\ +69758318327131425170296923488962766844032326092752496035799646925650493681836090032380929345958897069536534940603402166\ +54437558900456328822505452556405644824651518754711962184439658253375438856909411303150952617937800297412076651479394259\ +02989695946995565761218656196733786236256125216320862869222103274889218654364802296780705765615144632046927906821207388\ +37781423356282360896320806822246801224826117718589638140918390367367222088832151375560037279839400415297002878307667094\ +44745601345564172543709069793961225714298946715435784687886144458123145935719849225284716050492212424701412147805734551\ +05008019086996033027634787081081754501193071412233908663938339529425786905076431006383519834389341596131854347546495569\ +78103829309716465143840700707360411237359984345225161050702705623526601276484830840761183013052793205427462865403603674\ +53286510570658748822569815793678976697422057505968344086973502014102067235850200724522563265134105592401902742162484391\ +40359989535394590944070469120914093870012645600162374288021092764579310657922955249887275846101264836999892256959688159\ +20560010165525637568"); + +template +const T inv_pi = T("0.31830988618379067153776752674502872406891929148091289749533468811779359526845307018022760553250617\ +19121456854535159160737858236922291573057559348214633996784584799338748181551461554927938506153774347857924347953233867\ +24780483447258023664760228445399511431880923780173805347912240978821873875688171057446199892886800497344695478919221796\ +64619356614981233397292560939889730437576314957313392848207799174827869721996773619839992488575117034235771686223503753\ +43210930950739760194789207295186675361186049889932706106543135510064406495556327943320458934962391963316812120336060719\ +96267823974997665573308870559510140032481355128777699142621760244398752295362755529475781266136092915956963522624854628\ +13992155004900059551971417811380559357026305042003263549204184962321248112291240629296817849691838287042315081511240174\ +30532136044343182815149491654451954925707997503106587816279635448187165095941466574380813999518153154156986940787179656\ +17434685128073379023325091411886655262537300052245435942306422519900877335890075251121672634233905195162564498832466686\ +29021224707375712622727338433428413949392025850115667210623921718901967911343741990949302086324763103516167888595994199\ +90105087751322588917666136921015705830302820809785977012776321552393986146820779991573837811961874755441237508644543786\ +02732510522477560775077762213628135308681656557053866853599112141580772120705477992490251991498552594047188191168602329\ +65928237115542481150889891404357953958481898065458954043329920713063630708800768137974943538317752638193301392880955394\ +13753673135562095595909007067915166037636773758755322496299061199311604381671975020702542580864631609974393737555189313\ +26924420684088817109957007585477388587073238755658574718756869406460474291675847114237272683858920366364583928330017566\ +15866270699558199491729858053490121978737818917661006740610761094624643161886395352064566262837961949964487667034871397\ +96950020790013677600795734471992160480054780217499097095758471365222798978065379948541669922298416578075535694860710091\ +36912167342958616913446654070970785112404173678648199124423506636788041941587141549930997617372132721937323934074949084\ +20566243850369244966998232229913311207593935227986256599215521655598020156607200467654597581708047752311489086185202382\ +01086759967780930984249659032141457060104544204720350466263463595186221006563102187478272792906115852143601672359097534\ +49291960947954584896218401874251573836665791772567980871737333279513468902819007274654383486227761327661451846055194690\ +12109642555607413067556606434197546993313698160065397701348358292936701656323370662867232146199029970623963946751688841\ +96833119083045012867886257288807677671230175954329003412941350375491211832174337157158784524695126634222659973118831937\ +81439701377488460115038395411380076436785124406774847072513616708313034594217623443591873665129770374999497417106233196\ +61220278428908920322976905540502282214049704347949020773347280774572019934978634712362414234809577987377731138461569700\ +46114114288127277264047370402148201149718456223144393600795649519060033391704424606928375473008709352929131319438022461\ +69534198619417182567293338383553877582866631133013396264328304201791423457247685214135690352022269016013989536844713979\ +24976103155196190679416170950119507253129806878890841163577287136608400063019118948687850508970134982858172950288460664\ +26649139023269891355078788480721810876671056584868440698968732302932645720495533332099062813146871510602818165597618295\ +73386869845475205269995659914036323928642466280951525794968165782348194956527579836339987897499543039796374533258920366\ +10791665504184727013707778456936494519945056601533713875167319445839648859494812327636622791661348869703385719476647478\ +53248048690039956198808043792269668547227352899827654308332126849658727483701224522172264239972669256941988367988548591\ +18312566679809607642350023224233344103825158607105858482268806232268224990636771853916980887693615698194796561771059409\ +03061079828019773976817673096733044493372481745080280801823574842440904615066947945076298807768381173684623189264548867\ +81322503247862125663906477667842630691127630235040702174919116402247508719536310680374814788680726795607763442009063383\ +65903897591835347908355758487055234814492118783205464565758936387298257899429906865105447183318596144959971612253801466\ +43768905358867009116039049851326124097532322687306798405750904171106882881981025965454909318236264446568102333231301419\ +67511486745909726240822434327618312123223314640001666122292123625606525173919032049264332277153229609439865415542632882\ +40318992022126566104151916697006101581911699659643734805796771027664791404161527951008584519695294142032853948769008618\ +33172905672064986720870931447511583227326482409156199394313268044317610915886265655601104922641778037484242184897820820\ +10430993619422744150801142192681328627149087983195388715778415868512355660444740229728498504784974574262640435334721513\ +29119654521914831320468757487258264219497179430142614782081452870828359411444530959607630255191582480050689360964405234\ +68459800204096612492606759294935638100362366075030760575904686683910042713795418258112286357575841724114899985157951380\ +36984206484129427703822776295128041952110979158757028280829061030316792856465308120412066237831731405441725005398327875\ +03055774721216229113896842064481554545484330272846873398543268061881061496130537018603317842738428286258742682123143074\ +28124079569523685300595615721253393992161836844695267009549343803490090289233276569241648173471902047426058088875588170\ +70068908852668261252614919027660620458629386893366570353265648303042035884528879143624343404351298439288987930644443753\ +16976489023818802681008864279717257242166358787921688779603829574779544662057262026297391042524103655612698914237325556\ +51319766201070310463331968788180443612628909042425957946894297748251653644772047205421996238304113764694479671602673213\ +67572657735857239464734507213370433712640238979561467916838381331916773570588248374364345597501220789212963917149124012\ +17842456832788747693099179864056962472866932239414648619091718146723757258126370033021253515370243271517739261490399844\ +00215533536618939629951245364869587342621682420439041798963824888097502342118368827981577891155036924323808306186908760\ +56178772561464751572305355942286646483939715611275260361768773281214350736642725259342448521885708022192643652553024023\ +40451058585793111892164098768181381521384007909292383280043134672035819263745783997268682173806401159327420625722471397\ +76352807285050816741962162967038062426372494456362101690247380381293264471877744909261474545617579660082037897182734748\ +51788362481134583824760066126899964392631607727621084915786900169106560627023768682014746121191308874724977542585257961\ +48470781481235738115688862105485252835356601164429729245787238593385984066093386656876316107129728146368881199099378707\ +54636734532262602172471760425760865786891242809595789084674721170126540879963865271833374683887313567802563824405632459\ +00066602447218371751184039181624483073589981908977621995178397816231623270777832678805847444099696750448472418201668195\ +13358342016833591404466357942142058577697940261990679908488306701212516878429048677292806864881314634955106810808962012\ +35522513816949292286595308780001676530422904203247328622395974638055023828824272339240913872052672204711924280934058024\ +31359283747149367174634466200949192667954649540898377702688307275201830751285348769003324427874386134974125763190929639\ +55038441542047348657812538141823583882555242449023447093542312808667154412333231293489492546112458266640619066811027683\ +43638921064300285265600175910362659350994569340376731485068500339884621383126862132520868244104276631759422301509081265\ +81314049697729739480574407451973856229872125480768466574988466435715755014711437140875747593868046738058228939228972995\ +39438869054934885920617887438508105331778142132412515101986075995331673587222562749022099430123075674871591117359442587\ +17528926187514406442640492113132225994262055173822569208650368686538310585691714699194300851307986042243698944642647610\ +33099605819839353630236044966385025474439958426866213528437496885243197024335279355870596597039170907842139157611737062\ +46555090866458323978106378107450783164445846519455626685563651212976466752143936202896290639667247582153425100350576527\ +03672984207145174820713147789389750889388036351846121874165629300371485064993842552924849566442153094750113639766912820\ +70916054522504571006308650079183697837965260997518230812642070852778002567485231037575463675172471035075701391319914005\ +60231682517740300060340518334926041684824898256784761051545029474282462046034512793661110716652568076727631537365692866\ +09136119880374002143904185940355981166432835159736233173094295497929433095897662428086367215968862811146235869935552747\ +97978604555312141170608167495505281894870140790429049403367768141817412294388874451300564629174599173947663379425370387\ +80845942214427015139560745250916282190076540777974729032569640360936576411658270678027671298288600803141301977585343083\ +49014133737775668761111670023934917246816119065449455687658518791543168073771881979878510483376757587145593590330815334\ +78540625128375219243804860939869719783981200259554938429065940843355634523035701306017105119995880419938910863090549171\ +34088073733608572968090257623646195869939254436729858710324059744939166598963865956671606918046454105225084228874168719\ +16988867672767766355036823217634225025584667491544386796416380108126585875550613813214830609995365294248815537634497346\ +84337176301982668441518618943477103186816179142488212694417863898257615671526231658801099417836046733192154141855198021\ +05405630173779565709886807452854585242069740279857377071001241230286861573307921719900117429878283304130604140170531248\ +14940732147321066761052753351440376789945540944443072677022709669272492397108519877438667349640844194899913345405010892\ +84648791501373918266038749383828596199868484611003453304241848291192519211088551819039936486261685593874226414042099646\ +47639149435197103900372926188059518872638890018383012320984575286463842594068921871685185345527736287266197137065572048\ +6642821046615213176829917"); + +template +const T inv_sqrtpi = T("0.5641895835477562869480794515607725858440506293289988568440857217106424684414934144867436602021\ +07363443028347906361707351689931494826162866365489520017768993292837637059598439760352464350217972571211580245772820220\ +55450852717321662220846330811139951276345448602306823769091874515874661585130106639835777199937733416035779887616674407\ +62330393802163506016436216962350504583125319468794566562883258155216244345488657031898774308817781829483894751085009184\ +58534221631782589335251833012024622562223724947270033897431264299659426350428304490363315803937695985608159337829220557\ +38292378823157923310576196477746825309017156180805952222961763246535904008534429486250289473921641811927430977422556987\ +87957790498748191369372396920728606334247679699486095887630436337264558787515430809344197384832884913791753618956635092\ +41348925308830394965405841057254148274823475174742009396988341677714885589167833739498591581650137685988686204396412907\ +28692896380737732673111842867880211552486621897190889680753149512014745527175912981527212206323434675741526025618498227\ +78949869525301669496968566386230922044248614331310611017397043165544353646163002668108893047720541302748321433658647102\ +91854949083838769247696374058754103158473317076216953144890497317398112138525262894966581881072472305017305600073055507\ +38026907023920932512936518565440802730304560855889331865258630525883472098109161522555134016344809607734062906765209247\ +77444579156599362869138106506973992211606350183812016348279452555880458971952799030922988561155456281974443223184094895\ +48225698923189346820367003206229210032439562925718525419045578836831335596305728880148673271426404156118265947052921488\ +28210962155611587788457586937076931656897573303633060580804267765542888724683958653812819175444600411692598232070101487\ +97759873966552412012310208559725807741632324365196870579371869956866413163707074601646745623266478527632936125560367304\ +58147509675836925881775102516171791588543511319449779511302064465744235464169847898040837501074701352751880478226229284\ +69596822727604371352963566243917919851346226220302225583139481689744215628304289589197458305603292803761633107007468446\ +80775433523880430932501820934432769717566045853581461892934830008475218835631561348503005256313175115024028152535734802\ +81037755873096872058049839116785448367821638308739616614732338613368580643691303623270229201209584205184540016221297602\ +22492050209138562077926845204513809206519104822871344651158875977646633495516427975277152900630459262666213210247412162\ +61926726525758317489453916400215060275831214343237622136886592658866772232700513072836778402675885270261262620462330482\ +78337730934597251048975207110619022526431266585290657052824558964508055413035731525022451056993474245131940271984820050\ +17901051218365393350015086788334128533820394325989186458860182128103237819376135272641860975261957333921775530690182470\ +88074319470477060395265852520227572767322440535283556765678274866618052856818438953401448180643066469363446540074729187\ +17723921069499452622932578218405277303568848640315123325669925234703110275749332529030597442967643631627729904643588447\ +08667222896394685960201086760903071360480516376504524067957805736895016949964236950047089706313626078166185619663218284\ +70077473994228790887305322713081103249830070880023707584235452060590031438474125329400855281254969596518192161570790379\ +67580283015392015320483751079082919226883262167583964171674616727539955837750815025172996039494252228402058994736122154\ +19053715828613438487398090522305169387544617795294705631402716509359410261616481055491159842227135691346046233610415171\ +33657611298141423340680331967921295711865120336373619553472597941091947381321879147326759846271855255188757975593493234\ +52104804612075076018870380506146390742524842846386194346431950463765654025596606039427342166597987318477168491626967600\ +61385456542842668296423244647412313445991707051854082795130309956986576268273713346144038281470730274602574072210808368\ +59974862867126026549202070692085178793490447591511984407375981021536704441546689965988927299340956237075687086989389062\ +16128822472324601488367878054113283461908087165869220924808386987263385065800030557901657325244469347100881811038098731\ +11778766773278115075262361972407994788907458748710947494173554596600935718451739462183954924577707449183853086537527561\ +39282126061989737372495637531576547439766536141467693968557484431154537909180601540973538398263168515041222468747467103\ +21706494285370660279210011757992209440180033762166763375770317699488438769626837886929922427192391544322146157395534878\ +71275598873589396924354559840837624070484088807241062153876063344730857065896876916585669281509326281416842018881377099\ +61612878811905694141026682215012119913270906073045220732651128697632464721372219984363364189315540120769674351539157948\ +62586597550450277349636655577769202422822262966642097614382704526325198176719573501027844823759082722975085103506472762\ +03060623166558525608966580786840710316141399464391830066379930928702784472551007654723726806244302893128132180457443551\ +64150132180154788766702909772851108109554933457865349362388966131785638871137975824104870413313603958132928488569752878\ +15691007847452209357537007948992568141919938160995363290439358140096579772977766478880806114527831681013416139350365128\ +59286861680551295885587664116213501206060215913393041424193581433120163847397278261400943217309678227731657372659580538\ +76995045619484601635658721745291251099774187116592284295646174526022773304899217460982249994133645505570040009107913909\ +40266198221239243234247239224288163835888581929845178443226574359527941362516838621843003845847141863096038486203138842\ +23599144544790690239680790322856835049907159632422296292072556747456395004396306275410564563213492694072240005675845072\ +29688963661109264708546676111982838300217050505296160092243993059136677188379845630240767995143386354165090582598450101\ +10104155869787980124907271958576697140286126161683095093464974280203995685470067565786804818578110494277094680772664605\ +48959234783947674284597729947283724066842704096514497651208435546344586199241560190818160196901488584783200289028251761\ +70736550526933861077411284669060923496818383917909732752432403843155538402872343063547661958302330772772542757974112115\ +53971404751227790656006586063479579973616684696500352814033855220846450263565757191318998735787169125123154869995970894\ +33813921910212313899342074502805830929449871406692805292351731421992395545477344609761584906031639614048942972666301071\ +32847404860681764987242118170971613124086426295328762027290986084540695245479528348851809043601244519419698388166489200\ +21075497082438266826489262967741193232803413289170274762962641175726398394569519472729773487939501067609226437749071187\ +52078897549561400641000759898506470614273580237479767044447054471927497150909129511858371599719765968104244868344376282\ +44812859766421509702621384280246770028936045169187343184051940744367696350401635171710877284071961576187030265189190903\ +30455789183809218228905111391115838637919343834365193142011687173149554549022572820530329855598511935955771547963806317\ +98561406946303956263451132003060823529879699361648933264550451032214731154092208702505292267199740819150784721171925635\ +47799996407478463985576196272558034263520793278317195249563579948670720034330315762493511821750675423743791481213608046\ +06113554154346566749313754769011440569552078098334676039036670115157197108307518345731128648283782016474927463387043045\ +11161152004594782198832498817584966808755129613399252637064415108473363874672382723788891628471922444458232732427141042\ +42858384450912145303601857706631726345071049117051196799426052580659164517827529765737310631807220794028768261153302517\ +15856232977724272411712199078944942651028303478677595409297342589489356885911482456600562795656849736794876201781980670\ +92822374125164044546658422771090338989251192383919047911397751108629317181946147533284126721958545813500358355215286650\ +62162613058101955501750773220203831911783833007292416881508858521588134038075398884202490310202084828055573999778167370\ +14514161828196515876341742096576824896084995762210329167932067642452114444296281790356887191303992723776827860987701083\ +54856605057984957821407380783030713352876450241251052784051093673990966871281774215199117706363912149542121376398460995\ +05190980499459165461496306677781777024352159514061930700789996035823549055192911004152307146373001344802076335566456032\ +82561174643952107484425488562784161532978908061027660409047438099652664236735347895990819480066109618006016324172980866\ +92226979086904646734764226386570194265245360198206740364521330422644369039915643166603668270735411348526634638673965388\ +47627315928550702143212441997014873505629718410971334453516811603985038657722126277725884026711659983408453285785278427\ +08946839583424225622541460674836168492883080245215649617030476781478934908995627635356751069675942662900350990609926258\ +82196592453308411485613143891835429474753071213431922507493266488639823235551469584404098425929283762672361692485916515\ +89046476193188137878024949768269241089326908623031748402876271348784548855508372842268649370960574285674735532882115758\ +05515594278944745366989841316369874953596775961189051551466593118395815850606186856678046758055381412337170032875684254\ +61861343147202485100888443557069074093880630420745513950380294309663415827363183806062191374664329701042625983659711922\ +25359310343957163615982378601403853416107066367393174987809634972276063688664912044089042358932493776742320743437219281\ +01691941975542279987572515460630953295889100121209966564266312372865830232882909216820029819709418375091953249196229316\ +37593287161764533163958803732389823047734690441058247778739521371717374609775245714449555490149260025099685498803310968\ +92065568366603587174704011749907474766039787755773499668422994163373679776418584332569078700779801563319095286335060547\ +11130199233525046527066977098880588581208729507668255431661256177634077922713749838948737092764807116748405372985026480\ +22979016117433124471050702942068467773027534941037534231738164795692164197614856666316219792467656522201380743571758834\ +45520779346459337942028177437"); + +}}} // Namespaces + +#endif // BOOST_MATH_HIGH_PRECISION_CONSTANTS From a0cc4e91b4cacbefc2d3524dc7781d43a8a05337 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Sat, 30 Jan 2021 13:47:29 +0300 Subject: [PATCH 2/6] Change interface and add test cases [CI SKIP] --- .../constants/high_precision_constants.hpp | 360 +++++------------- test/test_high_precision_constants.cpp | 37 ++ 2 files changed, 137 insertions(+), 260 deletions(-) create mode 100644 test/test_high_precision_constants.cpp diff --git a/include/boost/math/constants/high_precision_constants.hpp b/include/boost/math/constants/high_precision_constants.hpp index aac3c360db..725f6214d9 100644 --- a/include/boost/math/constants/high_precision_constants.hpp +++ b/include/boost/math/constants/high_precision_constants.hpp @@ -6,272 +6,112 @@ #ifndef BOOST_MATH_HIGH_PRECISION_CONSTANTS #define BOOST_MATH_HIGH_PRECISION_CONSTANTS +#include +#include + namespace boost { namespace math { namespace numbers { -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // pi and functions of pi -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -template -const T pi = T("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982\ -14808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612\ -84756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540\ -91715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379\ -96274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675\ -23846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589\ -23542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908\ -30264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235\ -37875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353\ -01852968995773622599413891249721775283479131515574857242454150695950829533116861727855889075098381754637464939319255060\ -40092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425\ -90694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816\ -36009341721641219924586315030286182974555706749838505494588586926995690927210797509302955321165344987202755960236480665\ -49911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854\ -81613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016\ -53466804988627232791786085784383827967976681454100953883786360950680064225125205117392984896084128488626945604241965285\ -02221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009946576\ -40789512694683983525957098258226205224894077267194782684826014769909026401363944374553050682034962524517493996514314298\ -09190659250937221696461515709858387410597885959772975498930161753928468138268683868942774155991855925245953959431049972\ -52468084598727364469584865383673622262609912460805124388439045124413654976278079771569143599770012961608944169486855584\ -84063534220722258284886481584560285060168427394522674676788952521385225499546667278239864565961163548862305774564980355\ -93634568174324112515076069479451096596094025228879710893145669136867228748940560101503308617928680920874760917824938589\ -00971490967598526136554978189312978482168299894872265880485756401427047755513237964145152374623436454285844479526586782\ -10511413547357395231134271661021359695362314429524849371871101457654035902799344037420073105785390621983874478084784896\ -83321445713868751943506430218453191048481005370614680674919278191197939952061419663428754440643745123718192179998391015\ -91956181467514269123974894090718649423196156794520809514655022523160388193014209376213785595663893778708303906979207734\ -67221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962\ -68561005508106658796998163574736384052571459102897064140110971206280439039759515677157700420337869936007230558763176359\ -42187312514712053292819182618612586732157919841484882916447060957527069572209175671167229109816909152801735067127485832\ -22871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351\ -55650884909989859982387345528331635507647918535893226185489632132933089857064204675259070915481416549859461637180270981\ -99430992448895757128289059232332609729971208443357326548938239119325974636673058360414281388303203824903758985243744170\ -29132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576\ -85726243344189303968642624341077322697802807318915441101044682325271620105265227211166039666557309254711055785376346682\ -06531098965269186205647693125705863566201855810072936065987648611791045334885034611365768675324944166803962657978771855\ -60845529654126654085306143444318586769751456614068007002378776591344017127494704205622305389945613140711270004078547332\ -69939081454664645880797270826683063432858785698305235808933065757406795457163775254202114955761581400250126228594130216\ -47155097925923099079654737612551765675135751782966645477917450112996148903046399471329621073404375189573596145890193897\ -13111790429782856475032031986915140287080859904801094121472213179476477726224142548545403321571853061422881375850430633\ -21751829798662237172159160771669254748738986654949450114654062843366393790039769265672146385306736096571209180763832716\ -64162748888007869256029022847210403172118608204190004229661711963779213375751149595015660496318629472654736425230817703\ -67515906735023507283540567040386743513622224771589150495309844489333096340878076932599397805419341447377441842631298608\ -09988868741326047215695162396586457302163159819319516735381297416772947867242292465436680098067692823828068996400482435\ -40370141631496589794092432378969070697794223625082216889573837986230015937764716512289357860158816175578297352334460428\ -15126272037343146531977774160319906655418763979293344195215413418994854447345673831624993419131814809277771038638773431\ -77207545654532207770921201905166096280490926360197598828161332316663652861932668633606273567630354477628035045077723554\ -71058595487027908143562401451718062464362679456127531813407833033625423278394497538243720583531147711992606381334677687\ -96959703098339130771098704085913374641442822772634659470474587847787201927715280731767907707157213444730605700733492436\ -93113835049316312840425121925651798069411352801314701304781643788518529092854520116583934196562134914341595625865865570\ -55269049652098580338507224264829397285847831630577775606888764462482468579260395352773480304802900587607582510474709164\ -39613626760449256274204208320856611906254543372131535958450687724602901618766795240616342522577195429162991930645537799\ -14037340432875262888963995879475729174642635745525407909145135711136941091193932519107602082520261879853188770584297259\ -16778131496990090192116971737278476847268608490033770242429165130050051683233643503895170298939223345172201381280696501\ -17844087451960121228599371623130171144484640903890644954440061986907548516026327505298349187407866808818338510228334508\ -50486082503930213321971551843063545500766828294930413776552793975175461395398468339363830474611996653858153842056853386\ -21867252334028308711232827892125077126294632295639898989358211674562701021835646220134967151881909730381198004973407239\ -61036854066431939509790190699639552453005450580685501956730229219139339185680344903982059551002263535361920419947455385\ -93810234395544959778377902374216172711172364343543947822181852862408514006660443325888569867054315470696574745855033232\ -33421073015459405165537906866273337995851156257843229882737231989875714159578111963583300594087306812160287649628674460\ -47746491599505497374256269010490377819868359381465741268049256487985561453723478673303904688383436346553794986419270563\ -87293174872332083760112302991136793862708943879936201629515413371424892830722012690147546684765357616477379467520049075\ -71555278196536213239264061601363581559074220202031872776052772190055614842555187925303435139844253223415762336106425063\ -90497500865627109535919465897514131034822769306247435363256916078154781811528436679570611086153315044521274739245449454\ -23682886061340841486377670096120715124914043027253860764823634143346235189757664521641376796903149501910857598442391986\ -29164219399490723623464684411739403265918404437805133389452574239950829659122850855582157250310712570126683024029295252\ -20118726767562204154205161841634847565169998116141010029960783869092916030288400269104140792886215078424516709087000699\ -28212066041837180653556725253256753286129104248776182582976515795984703562226293486003415872298053498965022629174878820\ -27342092222453398562647669149055628425039127577102840279980663658254889264880254566101729670266407655904290994568150652\ -65305371829412703369313785178609040708667114965583434347693385781711386455873678123014587687126603489139095620099393610\ -31029161615288138437909904231747336394804575931493140529763475748119356709110137751721008031559024853090669203767192203\ -32290943346768514221447737939375170344366199104033751117354719185504644902636551281622882446257591633303910722538374218\ -21408835086573917715096828874782656995995744906617583441375223970968340800535598491754173818839994469748676265516582765\ -84835884531427756879002909517028352971634456212964043523117600665101241200659755851276178583829204197484423608007193045\ -76189323492292796501987518721272675079812554709589045563579212210333466974992356302549478024901141952123828153091140790\ -73860251522742995818072471625916685451333123948049470791191532673430282441860414263639548000448002670496248201792896476\ -69758318327131425170296923488962766844032326092752496035799646925650493681836090032380929345958897069536534940603402166\ -54437558900456328822505452556405644824651518754711962184439658253375438856909411303150952617937800297412076651479394259\ -02989695946995565761218656196733786236256125216320862869222103274889218654364802296780705765615144632046927906821207388\ -37781423356282360896320806822246801224826117718589638140918390367367222088832151375560037279839400415297002878307667094\ -44745601345564172543709069793961225714298946715435784687886144458123145935719849225284716050492212424701412147805734551\ -05008019086996033027634787081081754501193071412233908663938339529425786905076431006383519834389341596131854347546495569\ -78103829309716465143840700707360411237359984345225161050702705623526601276484830840761183013052793205427462865403603674\ -53286510570658748822569815793678976697422057505968344086973502014102067235850200724522563265134105592401902742162484391\ -40359989535394590944070469120914093870012645600162374288021092764579310657922955249887275846101264836999892256959688159\ -20560010165525637568"); +template::value, bool>::type = true> +constexpr T pi_v() noexcept +{ + return T(3.1415926535897932385L); +} -template -const T inv_pi = T("0.31830988618379067153776752674502872406891929148091289749533468811779359526845307018022760553250617\ -19121456854535159160737858236922291573057559348214633996784584799338748181551461554927938506153774347857924347953233867\ -24780483447258023664760228445399511431880923780173805347912240978821873875688171057446199892886800497344695478919221796\ -64619356614981233397292560939889730437576314957313392848207799174827869721996773619839992488575117034235771686223503753\ -43210930950739760194789207295186675361186049889932706106543135510064406495556327943320458934962391963316812120336060719\ -96267823974997665573308870559510140032481355128777699142621760244398752295362755529475781266136092915956963522624854628\ -13992155004900059551971417811380559357026305042003263549204184962321248112291240629296817849691838287042315081511240174\ -30532136044343182815149491654451954925707997503106587816279635448187165095941466574380813999518153154156986940787179656\ -17434685128073379023325091411886655262537300052245435942306422519900877335890075251121672634233905195162564498832466686\ -29021224707375712622727338433428413949392025850115667210623921718901967911343741990949302086324763103516167888595994199\ -90105087751322588917666136921015705830302820809785977012776321552393986146820779991573837811961874755441237508644543786\ -02732510522477560775077762213628135308681656557053866853599112141580772120705477992490251991498552594047188191168602329\ -65928237115542481150889891404357953958481898065458954043329920713063630708800768137974943538317752638193301392880955394\ -13753673135562095595909007067915166037636773758755322496299061199311604381671975020702542580864631609974393737555189313\ -26924420684088817109957007585477388587073238755658574718756869406460474291675847114237272683858920366364583928330017566\ -15866270699558199491729858053490121978737818917661006740610761094624643161886395352064566262837961949964487667034871397\ -96950020790013677600795734471992160480054780217499097095758471365222798978065379948541669922298416578075535694860710091\ -36912167342958616913446654070970785112404173678648199124423506636788041941587141549930997617372132721937323934074949084\ -20566243850369244966998232229913311207593935227986256599215521655598020156607200467654597581708047752311489086185202382\ -01086759967780930984249659032141457060104544204720350466263463595186221006563102187478272792906115852143601672359097534\ -49291960947954584896218401874251573836665791772567980871737333279513468902819007274654383486227761327661451846055194690\ -12109642555607413067556606434197546993313698160065397701348358292936701656323370662867232146199029970623963946751688841\ -96833119083045012867886257288807677671230175954329003412941350375491211832174337157158784524695126634222659973118831937\ -81439701377488460115038395411380076436785124406774847072513616708313034594217623443591873665129770374999497417106233196\ -61220278428908920322976905540502282214049704347949020773347280774572019934978634712362414234809577987377731138461569700\ -46114114288127277264047370402148201149718456223144393600795649519060033391704424606928375473008709352929131319438022461\ -69534198619417182567293338383553877582866631133013396264328304201791423457247685214135690352022269016013989536844713979\ -24976103155196190679416170950119507253129806878890841163577287136608400063019118948687850508970134982858172950288460664\ -26649139023269891355078788480721810876671056584868440698968732302932645720495533332099062813146871510602818165597618295\ -73386869845475205269995659914036323928642466280951525794968165782348194956527579836339987897499543039796374533258920366\ -10791665504184727013707778456936494519945056601533713875167319445839648859494812327636622791661348869703385719476647478\ -53248048690039956198808043792269668547227352899827654308332126849658727483701224522172264239972669256941988367988548591\ -18312566679809607642350023224233344103825158607105858482268806232268224990636771853916980887693615698194796561771059409\ -03061079828019773976817673096733044493372481745080280801823574842440904615066947945076298807768381173684623189264548867\ -81322503247862125663906477667842630691127630235040702174919116402247508719536310680374814788680726795607763442009063383\ -65903897591835347908355758487055234814492118783205464565758936387298257899429906865105447183318596144959971612253801466\ -43768905358867009116039049851326124097532322687306798405750904171106882881981025965454909318236264446568102333231301419\ -67511486745909726240822434327618312123223314640001666122292123625606525173919032049264332277153229609439865415542632882\ -40318992022126566104151916697006101581911699659643734805796771027664791404161527951008584519695294142032853948769008618\ -33172905672064986720870931447511583227326482409156199394313268044317610915886265655601104922641778037484242184897820820\ -10430993619422744150801142192681328627149087983195388715778415868512355660444740229728498504784974574262640435334721513\ -29119654521914831320468757487258264219497179430142614782081452870828359411444530959607630255191582480050689360964405234\ -68459800204096612492606759294935638100362366075030760575904686683910042713795418258112286357575841724114899985157951380\ -36984206484129427703822776295128041952110979158757028280829061030316792856465308120412066237831731405441725005398327875\ -03055774721216229113896842064481554545484330272846873398543268061881061496130537018603317842738428286258742682123143074\ -28124079569523685300595615721253393992161836844695267009549343803490090289233276569241648173471902047426058088875588170\ -70068908852668261252614919027660620458629386893366570353265648303042035884528879143624343404351298439288987930644443753\ -16976489023818802681008864279717257242166358787921688779603829574779544662057262026297391042524103655612698914237325556\ -51319766201070310463331968788180443612628909042425957946894297748251653644772047205421996238304113764694479671602673213\ -67572657735857239464734507213370433712640238979561467916838381331916773570588248374364345597501220789212963917149124012\ -17842456832788747693099179864056962472866932239414648619091718146723757258126370033021253515370243271517739261490399844\ -00215533536618939629951245364869587342621682420439041798963824888097502342118368827981577891155036924323808306186908760\ -56178772561464751572305355942286646483939715611275260361768773281214350736642725259342448521885708022192643652553024023\ -40451058585793111892164098768181381521384007909292383280043134672035819263745783997268682173806401159327420625722471397\ -76352807285050816741962162967038062426372494456362101690247380381293264471877744909261474545617579660082037897182734748\ -51788362481134583824760066126899964392631607727621084915786900169106560627023768682014746121191308874724977542585257961\ -48470781481235738115688862105485252835356601164429729245787238593385984066093386656876316107129728146368881199099378707\ -54636734532262602172471760425760865786891242809595789084674721170126540879963865271833374683887313567802563824405632459\ -00066602447218371751184039181624483073589981908977621995178397816231623270777832678805847444099696750448472418201668195\ -13358342016833591404466357942142058577697940261990679908488306701212516878429048677292806864881314634955106810808962012\ -35522513816949292286595308780001676530422904203247328622395974638055023828824272339240913872052672204711924280934058024\ -31359283747149367174634466200949192667954649540898377702688307275201830751285348769003324427874386134974125763190929639\ -55038441542047348657812538141823583882555242449023447093542312808667154412333231293489492546112458266640619066811027683\ -43638921064300285265600175910362659350994569340376731485068500339884621383126862132520868244104276631759422301509081265\ -81314049697729739480574407451973856229872125480768466574988466435715755014711437140875747593868046738058228939228972995\ -39438869054934885920617887438508105331778142132412515101986075995331673587222562749022099430123075674871591117359442587\ -17528926187514406442640492113132225994262055173822569208650368686538310585691714699194300851307986042243698944642647610\ -33099605819839353630236044966385025474439958426866213528437496885243197024335279355870596597039170907842139157611737062\ -46555090866458323978106378107450783164445846519455626685563651212976466752143936202896290639667247582153425100350576527\ -03672984207145174820713147789389750889388036351846121874165629300371485064993842552924849566442153094750113639766912820\ -70916054522504571006308650079183697837965260997518230812642070852778002567485231037575463675172471035075701391319914005\ -60231682517740300060340518334926041684824898256784761051545029474282462046034512793661110716652568076727631537365692866\ -09136119880374002143904185940355981166432835159736233173094295497929433095897662428086367215968862811146235869935552747\ -97978604555312141170608167495505281894870140790429049403367768141817412294388874451300564629174599173947663379425370387\ -80845942214427015139560745250916282190076540777974729032569640360936576411658270678027671298288600803141301977585343083\ -49014133737775668761111670023934917246816119065449455687658518791543168073771881979878510483376757587145593590330815334\ -78540625128375219243804860939869719783981200259554938429065940843355634523035701306017105119995880419938910863090549171\ -34088073733608572968090257623646195869939254436729858710324059744939166598963865956671606918046454105225084228874168719\ -16988867672767766355036823217634225025584667491544386796416380108126585875550613813214830609995365294248815537634497346\ -84337176301982668441518618943477103186816179142488212694417863898257615671526231658801099417836046733192154141855198021\ -05405630173779565709886807452854585242069740279857377071001241230286861573307921719900117429878283304130604140170531248\ -14940732147321066761052753351440376789945540944443072677022709669272492397108519877438667349640844194899913345405010892\ -84648791501373918266038749383828596199868484611003453304241848291192519211088551819039936486261685593874226414042099646\ -47639149435197103900372926188059518872638890018383012320984575286463842594068921871685185345527736287266197137065572048\ -6642821046615213176829917"); +constexpr double pi = pi_v(); -template -const T inv_sqrtpi = T("0.5641895835477562869480794515607725858440506293289988568440857217106424684414934144867436602021\ -07363443028347906361707351689931494826162866365489520017768993292837637059598439760352464350217972571211580245772820220\ -55450852717321662220846330811139951276345448602306823769091874515874661585130106639835777199937733416035779887616674407\ -62330393802163506016436216962350504583125319468794566562883258155216244345488657031898774308817781829483894751085009184\ -58534221631782589335251833012024622562223724947270033897431264299659426350428304490363315803937695985608159337829220557\ -38292378823157923310576196477746825309017156180805952222961763246535904008534429486250289473921641811927430977422556987\ -87957790498748191369372396920728606334247679699486095887630436337264558787515430809344197384832884913791753618956635092\ -41348925308830394965405841057254148274823475174742009396988341677714885589167833739498591581650137685988686204396412907\ -28692896380737732673111842867880211552486621897190889680753149512014745527175912981527212206323434675741526025618498227\ -78949869525301669496968566386230922044248614331310611017397043165544353646163002668108893047720541302748321433658647102\ -91854949083838769247696374058754103158473317076216953144890497317398112138525262894966581881072472305017305600073055507\ -38026907023920932512936518565440802730304560855889331865258630525883472098109161522555134016344809607734062906765209247\ -77444579156599362869138106506973992211606350183812016348279452555880458971952799030922988561155456281974443223184094895\ -48225698923189346820367003206229210032439562925718525419045578836831335596305728880148673271426404156118265947052921488\ -28210962155611587788457586937076931656897573303633060580804267765542888724683958653812819175444600411692598232070101487\ -97759873966552412012310208559725807741632324365196870579371869956866413163707074601646745623266478527632936125560367304\ -58147509675836925881775102516171791588543511319449779511302064465744235464169847898040837501074701352751880478226229284\ -69596822727604371352963566243917919851346226220302225583139481689744215628304289589197458305603292803761633107007468446\ -80775433523880430932501820934432769717566045853581461892934830008475218835631561348503005256313175115024028152535734802\ -81037755873096872058049839116785448367821638308739616614732338613368580643691303623270229201209584205184540016221297602\ -22492050209138562077926845204513809206519104822871344651158875977646633495516427975277152900630459262666213210247412162\ -61926726525758317489453916400215060275831214343237622136886592658866772232700513072836778402675885270261262620462330482\ -78337730934597251048975207110619022526431266585290657052824558964508055413035731525022451056993474245131940271984820050\ -17901051218365393350015086788334128533820394325989186458860182128103237819376135272641860975261957333921775530690182470\ -88074319470477060395265852520227572767322440535283556765678274866618052856818438953401448180643066469363446540074729187\ -17723921069499452622932578218405277303568848640315123325669925234703110275749332529030597442967643631627729904643588447\ -08667222896394685960201086760903071360480516376504524067957805736895016949964236950047089706313626078166185619663218284\ -70077473994228790887305322713081103249830070880023707584235452060590031438474125329400855281254969596518192161570790379\ -67580283015392015320483751079082919226883262167583964171674616727539955837750815025172996039494252228402058994736122154\ -19053715828613438487398090522305169387544617795294705631402716509359410261616481055491159842227135691346046233610415171\ -33657611298141423340680331967921295711865120336373619553472597941091947381321879147326759846271855255188757975593493234\ -52104804612075076018870380506146390742524842846386194346431950463765654025596606039427342166597987318477168491626967600\ -61385456542842668296423244647412313445991707051854082795130309956986576268273713346144038281470730274602574072210808368\ -59974862867126026549202070692085178793490447591511984407375981021536704441546689965988927299340956237075687086989389062\ -16128822472324601488367878054113283461908087165869220924808386987263385065800030557901657325244469347100881811038098731\ -11778766773278115075262361972407994788907458748710947494173554596600935718451739462183954924577707449183853086537527561\ -39282126061989737372495637531576547439766536141467693968557484431154537909180601540973538398263168515041222468747467103\ -21706494285370660279210011757992209440180033762166763375770317699488438769626837886929922427192391544322146157395534878\ -71275598873589396924354559840837624070484088807241062153876063344730857065896876916585669281509326281416842018881377099\ -61612878811905694141026682215012119913270906073045220732651128697632464721372219984363364189315540120769674351539157948\ -62586597550450277349636655577769202422822262966642097614382704526325198176719573501027844823759082722975085103506472762\ -03060623166558525608966580786840710316141399464391830066379930928702784472551007654723726806244302893128132180457443551\ -64150132180154788766702909772851108109554933457865349362388966131785638871137975824104870413313603958132928488569752878\ -15691007847452209357537007948992568141919938160995363290439358140096579772977766478880806114527831681013416139350365128\ -59286861680551295885587664116213501206060215913393041424193581433120163847397278261400943217309678227731657372659580538\ -76995045619484601635658721745291251099774187116592284295646174526022773304899217460982249994133645505570040009107913909\ -40266198221239243234247239224288163835888581929845178443226574359527941362516838621843003845847141863096038486203138842\ -23599144544790690239680790322856835049907159632422296292072556747456395004396306275410564563213492694072240005675845072\ -29688963661109264708546676111982838300217050505296160092243993059136677188379845630240767995143386354165090582598450101\ -10104155869787980124907271958576697140286126161683095093464974280203995685470067565786804818578110494277094680772664605\ -48959234783947674284597729947283724066842704096514497651208435546344586199241560190818160196901488584783200289028251761\ -70736550526933861077411284669060923496818383917909732752432403843155538402872343063547661958302330772772542757974112115\ -53971404751227790656006586063479579973616684696500352814033855220846450263565757191318998735787169125123154869995970894\ -33813921910212313899342074502805830929449871406692805292351731421992395545477344609761584906031639614048942972666301071\ -32847404860681764987242118170971613124086426295328762027290986084540695245479528348851809043601244519419698388166489200\ -21075497082438266826489262967741193232803413289170274762962641175726398394569519472729773487939501067609226437749071187\ -52078897549561400641000759898506470614273580237479767044447054471927497150909129511858371599719765968104244868344376282\ -44812859766421509702621384280246770028936045169187343184051940744367696350401635171710877284071961576187030265189190903\ -30455789183809218228905111391115838637919343834365193142011687173149554549022572820530329855598511935955771547963806317\ -98561406946303956263451132003060823529879699361648933264550451032214731154092208702505292267199740819150784721171925635\ -47799996407478463985576196272558034263520793278317195249563579948670720034330315762493511821750675423743791481213608046\ -06113554154346566749313754769011440569552078098334676039036670115157197108307518345731128648283782016474927463387043045\ -11161152004594782198832498817584966808755129613399252637064415108473363874672382723788891628471922444458232732427141042\ -42858384450912145303601857706631726345071049117051196799426052580659164517827529765737310631807220794028768261153302517\ -15856232977724272411712199078944942651028303478677595409297342589489356885911482456600562795656849736794876201781980670\ -92822374125164044546658422771090338989251192383919047911397751108629317181946147533284126721958545813500358355215286650\ -62162613058101955501750773220203831911783833007292416881508858521588134038075398884202490310202084828055573999778167370\ -14514161828196515876341742096576824896084995762210329167932067642452114444296281790356887191303992723776827860987701083\ -54856605057984957821407380783030713352876450241251052784051093673990966871281774215199117706363912149542121376398460995\ -05190980499459165461496306677781777024352159514061930700789996035823549055192911004152307146373001344802076335566456032\ -82561174643952107484425488562784161532978908061027660409047438099652664236735347895990819480066109618006016324172980866\ -92226979086904646734764226386570194265245360198206740364521330422644369039915643166603668270735411348526634638673965388\ -47627315928550702143212441997014873505629718410971334453516811603985038657722126277725884026711659983408453285785278427\ -08946839583424225622541460674836168492883080245215649617030476781478934908995627635356751069675942662900350990609926258\ -82196592453308411485613143891835429474753071213431922507493266488639823235551469584404098425929283762672361692485916515\ -89046476193188137878024949768269241089326908623031748402876271348784548855508372842268649370960574285674735532882115758\ -05515594278944745366989841316369874953596775961189051551466593118395815850606186856678046758055381412337170032875684254\ -61861343147202485100888443557069074093880630420745513950380294309663415827363183806062191374664329701042625983659711922\ -25359310343957163615982378601403853416107066367393174987809634972276063688664912044089042358932493776742320743437219281\ -01691941975542279987572515460630953295889100121209966564266312372865830232882909216820029819709418375091953249196229316\ -37593287161764533163958803732389823047734690441058247778739521371717374609775245714449555490149260025099685498803310968\ -92065568366603587174704011749907474766039787755773499668422994163373679776418584332569078700779801563319095286335060547\ -11130199233525046527066977098880588581208729507668255431661256177634077922713749838948737092764807116748405372985026480\ -22979016117433124471050702942068467773027534941037534231738164795692164197614856666316219792467656522201380743571758834\ -45520779346459337942028177437"); +template::value, bool>::type = true> +constexpr T pi_v() noexcept +{ + return std::move(T("3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348\ +2534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881\ +0975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881\ +5209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931\ +0511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277\ +0539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585\ +3710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963\ +1859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875\ +5468731159562863882353787593751957781857780532171226806613001927876611195909216420198938095257201065485863278865936153\ +3818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983\ +8175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684\ +7104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199\ +2726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211\ +6534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217\ +3217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184\ +2725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848\ +9608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583\ +2645995813390478027590099465764078951269468398352595709825822620522489407726719478268482601476990902640136394437455305\ +0682034962524517493996514314298091906592509372216964615157098583874105978859597729754989301617539284681382686838689427\ +7415599185592524595395943104997252468084598727364469584865383673622262609912460805124388439045124413654976278079771569\ +1435997700129616089441694868555848406353422072225828488648158456028506016842739452267467678895252138522549954666727823\ +9864565961163548862305774564980355936345681743241125150760694794510965960940252288797108931456691368672287489405601015\ +0330861792868092087476091782493858900971490967598526136554978189312978482168299894872265880485756401427047755513237964\ +1451523746234364542858444795265867821051141354735739523113427166102135969536231442952484937187110145765403590279934403\ +7420073105785390621983874478084784896833214457138687519435064302184531910484810053706146806749192781911979399520614196\ +6342875444064374512371819217999839101591956181467514269123974894090718649423196156794520809514655022523160388193014209\ +3762137855956638937787083039069792077346722182562599661501421503068038447734549202605414665925201497442850732518666002\ +1324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595\ +1567715770042033786993600723055876317635942187312514712053292819182618612586732157919841484882916447060957527069572209\ +1756711672291098169091528017350671274858322287183520935396572512108357915136988209144421006751033467110314126711136990\ +8658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570\ +6420467525907091548141654985946163718027098199430992448895757128289059232332609729971208443357326548938239119325974636\ +6730583604142813883032038249037589852437441702913276561809377344403070746921120191302033038019762110110044929321516084\ +2444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201\ +0526522721116603966655730925471105578537634668206531098965269186205647693125705863566201855810072936065987648611791045\ +3348850346113657686753249441668039626579787718556084552965412665408530614344431858676975145661406800700237877659134401\ +7127494704205622305389945613140711270004078547332699390814546646458807972708266830634328587856983052358089330657574067\ +9545716377525420211495576158140025012622859413021647155097925923099079654737612551765675135751782966645477917450112996\ +1489030463994713296210734043751895735961458901938971311179042978285647503203198691514028708085990480109412147221317947\ +6477726224142548545403321571853061422881375850430633217518297986622371721591607716692547487389866549494501146540628433\ +6639379003976926567214638530673609657120918076383271664162748888007869256029022847210403172118608204190004229661711963\ +7792133757511495950156604963186294726547364252308177036751590673502350728354056704038674351362222477158915049530984448\ +9333096340878076932599397805419341447377441842631298608099888687413260472156951623965864573021631598193195167353812974\ +1677294786724229246543668009806769282382806899640048243540370141631496589794092432378969070697794223625082216889573837\ +9862300159377647165122893578601588161755782973523344604281512627203734314653197777416031990665541876397929334419521541\ +3418994854447345673831624993419131814809277771038638773431772075456545322077709212019051660962804909263601975988281613\ +3231666365286193266863360627356763035447762803504507772355471058595487027908143562401451718062464362679456127531813407\ +8330336254232783944975382437205835311477119926063813346776879695970309833913077109870408591337464144282277263465947047\ +4587847787201927715280731767907707157213444730605700733492436931138350493163128404251219256517980694113528013147013047\ +8164378851852909285452011658393419656213491434159562586586557055269049652098580338507224264829397285847831630577775606\ +8887644624824685792603953527734803048029005876075825104747091643961362676044925627420420832085661190625454337213153595\ +8450687724602901618766795240616342522577195429162991930645537799140373404328752628889639958794757291746426357455254079\ +0914513571113694109119393251910760208252026187985318877058429725916778131496990090192116971737278476847268608490033770\ +2424291651300500516832336435038951702989392233451722013812806965011784408745196012122859937162313017114448464090389064\ +4954440061986907548516026327505298349187407866808818338510228334508504860825039302133219715518430635455007668282949304\ +1377655279397517546139539846833936383047461199665385815384205685338621867252334028308711232827892125077126294632295639\ +8989893582116745627010218356462201349671518819097303811980049734072396103685406643193950979019069963955245300545058068\ +5501956730229219139339185680344903982059551002263535361920419947455385938102343955449597783779023742161727111723643435\ +4394782218185286240851400666044332588856986705431547069657474585503323233421073015459405165537906866273337995851156257\ +8432298827372319898757141595781119635833005940873068121602876496286744604774649159950549737425626901049037781986835938\ +1465741268049256487985561453723478673303904688383436346553794986419270563872931748723320837601123029911367938627089438\ +7993620162951541337142489283072201269014754668476535761647737946752004907571555278196536213239264061601363581559074220\ +2020318727760527721900556148425551879253034351398442532234157623361064250639049750086562710953591946589751413103482276\ +9306247435363256916078154781811528436679570611086153315044521274739245449454236828860613408414863776700961207151249140\ +4302725386076482363414334623518975766452164137679690314950191085759844239198629164219399490723623464684411739403265918\ +4044378051333894525742399508296591228508555821572503107125701266830240292952522011872676756220415420516184163484756516\ +9998116141010029960783869092916030288400269104140792886215078424516709087000699282120660418371806535567252532567532861\ +2910424877618258297651579598470356222629348600341587229805349896502262917487882027342092222453398562647669149055628425\ +0391275771028402799806636582548892648802545661017296702664076559042909945681506526530537182941270336931378517860904070\ +8667114965583434347693385781711386455873678123014587687126603489139095620099393610310291616152881384379099042317473363\ +9480457593149314052976347574811935670911013775172100803155902485309066920376719220332290943346768514221447737939375170\ +3443661991040337511173547191855046449026365512816228824462575916333039107225383742182140883508657391771509682887478265\ +6995995744906617583441375223970968340800535598491754173818839994469748676265516582765848358845314277568790029095170283\ +5297163445621296404352311760066510124120065975585127617858382920419748442360800719304576189323492292796501987518721272\ +6750798125547095890455635792122103334669749923563025494780249011419521238281530911407907386025152274299581807247162591\ +6685451333123948049470791191532673430282441860414263639548000448002670496248201792896476697583183271314251702969234889\ +6276684403232609275249603579964692565049368183609003238092934595889706953653494060340216654437558900456328822505452556\ +4056448246515187547119621844396582533754388569094113031509526179378002974120766514793942590298969594699556576121865619\ +6733786236256125216320862869222103274889218654364802296780705765615144632046927906821207388377814233562823608963208068\ +2224680122482611771858963814091839036736722208883215137556003727983940041529700287830766709444745601345564172543709069\ +7939612257142989467154357846878861444581231459357198492252847160504922124247014121478057345510500801908699603302763478\ +7081081754501193071412233908663938339529425786905076431006383519834389341596131854347546495569781038293097164651438407\ +0070736041123735998434522516105070270562352660127648483084076118301305279320542746286540360367453286510570658748822569\ +8157936789766974220575059683440869735020141020672358502007245225632651341055924019027421624843914035998953539459094407\ +046912091409387001264560016237428802109276457931065792295524988727584610126483699989225695968815920560010165525637568")); +} }}} // Namespaces diff --git a/test/test_high_precision_constants.cpp b/test/test_high_precision_constants.cpp new file mode 100644 index 0000000000..28b9257da8 --- /dev/null +++ b/test/test_high_precision_constants.cpp @@ -0,0 +1,37 @@ +// Copyright Matt Borland 2021. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include + +using boost::multiprecision::cpp_bin_float_50; +using boost::multiprecision::cpp_bin_float_100; +using std::abs; + +template +void test_pi() +{ + const T tol = std::numeric_limits::epsilon(); + + T old_pi = boost::math::constants::pi(); + T new_pi = boost::math::numbers::pi_v(); + + BOOST_TEST(abs(old_pi-new_pi) < tol); +} + +int main(void) +{ + test_pi(); + test_pi(); + test_pi(); + test_pi(); + test_pi(); + + boost::report_errors(); +} From fcfac34c493438d263a1d10de23d7696203a87d0 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Sat, 30 Jan 2021 13:55:12 +0300 Subject: [PATCH 3/6] Inline [CI SKIP] --- include/boost/math/constants/high_precision_constants.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/boost/math/constants/high_precision_constants.hpp b/include/boost/math/constants/high_precision_constants.hpp index 725f6214d9..229a99bc2b 100644 --- a/include/boost/math/constants/high_precision_constants.hpp +++ b/include/boost/math/constants/high_precision_constants.hpp @@ -16,15 +16,15 @@ namespace boost { namespace math { namespace numbers { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// template::value, bool>::type = true> -constexpr T pi_v() noexcept +inline constexpr T pi_v() noexcept { - return T(3.1415926535897932385L); + return T(3.141592653589793238462643383279502884L); } -constexpr double pi = pi_v(); +BOOST_INLINE_VARIABLE constexpr double pi = pi_v(); template::value, bool>::type = true> -constexpr T pi_v() noexcept +inline constexpr T pi_v() noexcept { return std::move(T("3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348\ 2534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881\ From d749f1b28f2e936d2afcb7d704a1de167edd9eb4 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Sat, 30 Jan 2021 15:12:30 +0300 Subject: [PATCH 4/6] Reformat, add e, and add to jamfile [CI SKIP] --- .../constants/high_precision_constants.hpp | 306 +++++++++++++----- test/Jamfile.v2 | 1 + test/test_high_precision_constants.cpp | 17 + 3 files changed, 239 insertions(+), 85 deletions(-) diff --git a/include/boost/math/constants/high_precision_constants.hpp b/include/boost/math/constants/high_precision_constants.hpp index 229a99bc2b..beffe929bc 100644 --- a/include/boost/math/constants/high_precision_constants.hpp +++ b/include/boost/math/constants/high_precision_constants.hpp @@ -26,91 +26,227 @@ BOOST_INLINE_VARIABLE constexpr double pi = pi_v(); template::value, bool>::type = true> inline constexpr T pi_v() noexcept { - return std::move(T("3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348\ -2534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881\ -0975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881\ -5209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931\ -0511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277\ -0539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585\ -3710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963\ -1859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875\ -5468731159562863882353787593751957781857780532171226806613001927876611195909216420198938095257201065485863278865936153\ -3818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983\ -8175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684\ -7104047534646208046684259069491293313677028989152104752162056966024058038150193511253382430035587640247496473263914199\ -2726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211\ -6534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217\ -3217214772350141441973568548161361157352552133475741849468438523323907394143334547762416862518983569485562099219222184\ -2725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848\ -9608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583\ -2645995813390478027590099465764078951269468398352595709825822620522489407726719478268482601476990902640136394437455305\ -0682034962524517493996514314298091906592509372216964615157098583874105978859597729754989301617539284681382686838689427\ -7415599185592524595395943104997252468084598727364469584865383673622262609912460805124388439045124413654976278079771569\ -1435997700129616089441694868555848406353422072225828488648158456028506016842739452267467678895252138522549954666727823\ -9864565961163548862305774564980355936345681743241125150760694794510965960940252288797108931456691368672287489405601015\ -0330861792868092087476091782493858900971490967598526136554978189312978482168299894872265880485756401427047755513237964\ -1451523746234364542858444795265867821051141354735739523113427166102135969536231442952484937187110145765403590279934403\ -7420073105785390621983874478084784896833214457138687519435064302184531910484810053706146806749192781911979399520614196\ -6342875444064374512371819217999839101591956181467514269123974894090718649423196156794520809514655022523160388193014209\ -3762137855956638937787083039069792077346722182562599661501421503068038447734549202605414665925201497442850732518666002\ -1324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595\ -1567715770042033786993600723055876317635942187312514712053292819182618612586732157919841484882916447060957527069572209\ -1756711672291098169091528017350671274858322287183520935396572512108357915136988209144421006751033467110314126711136990\ -8658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570\ -6420467525907091548141654985946163718027098199430992448895757128289059232332609729971208443357326548938239119325974636\ -6730583604142813883032038249037589852437441702913276561809377344403070746921120191302033038019762110110044929321516084\ -2444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201\ -0526522721116603966655730925471105578537634668206531098965269186205647693125705863566201855810072936065987648611791045\ -3348850346113657686753249441668039626579787718556084552965412665408530614344431858676975145661406800700237877659134401\ -7127494704205622305389945613140711270004078547332699390814546646458807972708266830634328587856983052358089330657574067\ -9545716377525420211495576158140025012622859413021647155097925923099079654737612551765675135751782966645477917450112996\ -1489030463994713296210734043751895735961458901938971311179042978285647503203198691514028708085990480109412147221317947\ -6477726224142548545403321571853061422881375850430633217518297986622371721591607716692547487389866549494501146540628433\ -6639379003976926567214638530673609657120918076383271664162748888007869256029022847210403172118608204190004229661711963\ -7792133757511495950156604963186294726547364252308177036751590673502350728354056704038674351362222477158915049530984448\ -9333096340878076932599397805419341447377441842631298608099888687413260472156951623965864573021631598193195167353812974\ -1677294786724229246543668009806769282382806899640048243540370141631496589794092432378969070697794223625082216889573837\ -9862300159377647165122893578601588161755782973523344604281512627203734314653197777416031990665541876397929334419521541\ -3418994854447345673831624993419131814809277771038638773431772075456545322077709212019051660962804909263601975988281613\ -3231666365286193266863360627356763035447762803504507772355471058595487027908143562401451718062464362679456127531813407\ -8330336254232783944975382437205835311477119926063813346776879695970309833913077109870408591337464144282277263465947047\ -4587847787201927715280731767907707157213444730605700733492436931138350493163128404251219256517980694113528013147013047\ -8164378851852909285452011658393419656213491434159562586586557055269049652098580338507224264829397285847831630577775606\ -8887644624824685792603953527734803048029005876075825104747091643961362676044925627420420832085661190625454337213153595\ -8450687724602901618766795240616342522577195429162991930645537799140373404328752628889639958794757291746426357455254079\ -0914513571113694109119393251910760208252026187985318877058429725916778131496990090192116971737278476847268608490033770\ -2424291651300500516832336435038951702989392233451722013812806965011784408745196012122859937162313017114448464090389064\ -4954440061986907548516026327505298349187407866808818338510228334508504860825039302133219715518430635455007668282949304\ -1377655279397517546139539846833936383047461199665385815384205685338621867252334028308711232827892125077126294632295639\ -8989893582116745627010218356462201349671518819097303811980049734072396103685406643193950979019069963955245300545058068\ -5501956730229219139339185680344903982059551002263535361920419947455385938102343955449597783779023742161727111723643435\ -4394782218185286240851400666044332588856986705431547069657474585503323233421073015459405165537906866273337995851156257\ -8432298827372319898757141595781119635833005940873068121602876496286744604774649159950549737425626901049037781986835938\ -1465741268049256487985561453723478673303904688383436346553794986419270563872931748723320837601123029911367938627089438\ -7993620162951541337142489283072201269014754668476535761647737946752004907571555278196536213239264061601363581559074220\ -2020318727760527721900556148425551879253034351398442532234157623361064250639049750086562710953591946589751413103482276\ -9306247435363256916078154781811528436679570611086153315044521274739245449454236828860613408414863776700961207151249140\ -4302725386076482363414334623518975766452164137679690314950191085759844239198629164219399490723623464684411739403265918\ -4044378051333894525742399508296591228508555821572503107125701266830240292952522011872676756220415420516184163484756516\ -9998116141010029960783869092916030288400269104140792886215078424516709087000699282120660418371806535567252532567532861\ -2910424877618258297651579598470356222629348600341587229805349896502262917487882027342092222453398562647669149055628425\ -0391275771028402799806636582548892648802545661017296702664076559042909945681506526530537182941270336931378517860904070\ -8667114965583434347693385781711386455873678123014587687126603489139095620099393610310291616152881384379099042317473363\ -9480457593149314052976347574811935670911013775172100803155902485309066920376719220332290943346768514221447737939375170\ -3443661991040337511173547191855046449026365512816228824462575916333039107225383742182140883508657391771509682887478265\ -6995995744906617583441375223970968340800535598491754173818839994469748676265516582765848358845314277568790029095170283\ -5297163445621296404352311760066510124120065975585127617858382920419748442360800719304576189323492292796501987518721272\ -6750798125547095890455635792122103334669749923563025494780249011419521238281530911407907386025152274299581807247162591\ -6685451333123948049470791191532673430282441860414263639548000448002670496248201792896476697583183271314251702969234889\ -6276684403232609275249603579964692565049368183609003238092934595889706953653494060340216654437558900456328822505452556\ -4056448246515187547119621844396582533754388569094113031509526179378002974120766514793942590298969594699556576121865619\ -6733786236256125216320862869222103274889218654364802296780705765615144632046927906821207388377814233562823608963208068\ -2224680122482611771858963814091839036736722208883215137556003727983940041529700287830766709444745601345564172543709069\ -7939612257142989467154357846878861444581231459357198492252847160504922124247014121478057345510500801908699603302763478\ -7081081754501193071412233908663938339529425786905076431006383519834389341596131854347546495569781038293097164651438407\ -0070736041123735998434522516105070270562352660127648483084076118301305279320542746286540360367453286510570658748822569\ -8157936789766974220575059683440869735020141020672358502007245225632651341055924019027421624843914035998953539459094407\ -046912091409387001264560016237428802109276457931065792295524988727584610126483699989225695968815920560010165525637568")); + return std::move(T( + "3." + "1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679" + "8214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196" + "4428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273" + "7245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094" + "3305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912" + "9833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132" + "0005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235" + "4201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859" + "5024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303" + "5982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989" + "3809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151" + "5574857242454150695950829533116861727855889075098381754637464939319255060400927701671139009848824012" + "8583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912" + "9331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279" + "6782354781636009341721641219924586315030286182974555706749838505494588586926995690927210797509302955" + "3211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000" + "8164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333" + "4547762416862518983569485562099219222184272550254256887671790494601653466804988627232791786085784383" + "8279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863" + "0674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009" + "9465764078951269468398352595709825822620522489407726719478268482601476990902640136394437455305068203" + "4962524517493996514314298091906592509372216964615157098583874105978859597729754989301617539284681382" + "6868386894277415599185592524595395943104997252468084598727364469584865383673622262609912460805124388" + "4390451244136549762780797715691435997700129616089441694868555848406353422072225828488648158456028506" + "0168427394522674676788952521385225499546667278239864565961163548862305774564980355936345681743241125" + "1507606947945109659609402522887971089314566913686722874894056010150330861792868092087476091782493858" + "9009714909675985261365549781893129784821682998948722658804857564014270477555132379641451523746234364" + "5428584447952658678210511413547357395231134271661021359695362314429524849371871101457654035902799344" + "0374200731057853906219838744780847848968332144571386875194350643021845319104848100537061468067491927" + "8191197939952061419663428754440643745123718192179998391015919561814675142691239748940907186494231961" + "5679452080951465502252316038819301420937621378559566389377870830390697920773467221825625996615014215" + "0306803844773454920260541466592520149744285073251866600213243408819071048633173464965145390579626856" + "1005508106658796998163574736384052571459102897064140110971206280439039759515677157700420337869936007" + "2305587631763594218731251471205329281918261861258673215791984148488291644706095752706957220917567116" + "7229109816909152801735067127485832228718352093539657251210835791513698820914442100675103346711031412" + "6711136990865851639831501970165151168517143765761835155650884909989859982387345528331635507647918535" + "8932261854896321329330898570642046752590709154814165498594616371802709819943099244889575712828905923" + "2332609729971208443357326548938239119325974636673058360414281388303203824903758985243744170291327656" + "1809377344403070746921120191302033038019762110110044929321516084244485963766983895228684783123552658" + "2131449576857262433441893039686426243410773226978028073189154411010446823252716201052652272111660396" + "6655730925471105578537634668206531098965269186205647693125705863566201855810072936065987648611791045" + "3348850346113657686753249441668039626579787718556084552965412665408530614344431858676975145661406800" + "7002378776591344017127494704205622305389945613140711270004078547332699390814546646458807972708266830" + "6343285878569830523580893306575740679545716377525420211495576158140025012622859413021647155097925923" + "0990796547376125517656751357517829666454779174501129961489030463994713296210734043751895735961458901" + "9389713111790429782856475032031986915140287080859904801094121472213179476477726224142548545403321571" + "8530614228813758504306332175182979866223717215916077166925474873898665494945011465406284336639379003" + "9769265672146385306736096571209180763832716641627488880078692560290228472104031721186082041900042296" + "6171196377921337575114959501566049631862947265473642523081770367515906735023507283540567040386743513" + "6222247715891504953098444893330963408780769325993978054193414473774418426312986080998886874132604721" + "5695162396586457302163159819319516735381297416772947867242292465436680098067692823828068996400482435" + "4037014163149658979409243237896907069779422362508221688957383798623001593776471651228935786015881617" + "5578297352334460428151262720373431465319777741603199066554187639792933441952154134189948544473456738" + "3162499341913181480927777103863877343177207545654532207770921201905166096280490926360197598828161332" + "3166636528619326686336062735676303544776280350450777235547105859548702790814356240145171806246436267" + "9456127531813407833033625423278394497538243720583531147711992606381334677687969597030983391307710987" + "0408591337464144282277263465947047458784778720192771528073176790770715721344473060570073349243693113" + "8350493163128404251219256517980694113528013147013047816437885185290928545201165839341965621349143415" + "9562586586557055269049652098580338507224264829397285847831630577775606888764462482468579260395352773" + "4803048029005876075825104747091643961362676044925627420420832085661190625454337213153595845068772460" + "2901618766795240616342522577195429162991930645537799140373404328752628889639958794757291746426357455" + "2540790914513571113694109119393251910760208252026187985318877058429725916778131496990090192116971737" + "2784768472686084900337702424291651300500516832336435038951702989392233451722013812806965011784408745" + "1960121228599371623130171144484640903890644954440061986907548516026327505298349187407866808818338510" + "2283345085048608250393021332197155184306354550076682829493041377655279397517546139539846833936383047" + "4611996653858153842056853386218672523340283087112328278921250771262946322956398989893582116745627010" + "2183564622013496715188190973038119800497340723961036854066431939509790190699639552453005450580685501" + "9567302292191393391856803449039820595510022635353619204199474553859381023439554495977837790237421617" + "2711172364343543947822181852862408514006660443325888569867054315470696574745855033232334210730154594" + "0516553790686627333799585115625784322988273723198987571415957811196358330059408730681216028764962867" + "4460477464915995054973742562690104903778198683593814657412680492564879855614537234786733039046883834" + "3634655379498641927056387293174872332083760112302991136793862708943879936201629515413371424892830722" + "0126901475466847653576164773794675200490757155527819653621323926406160136358155907422020203187277605" + "2772190055614842555187925303435139844253223415762336106425063904975008656271095359194658975141310348" + "2276930624743536325691607815478181152843667957061108615331504452127473924544945423682886061340841486" + "3776700961207151249140430272538607648236341433462351897576645216413767969031495019108575984423919862" + "9164219399490723623464684411739403265918404437805133389452574239950829659122850855582157250310712570" + "1266830240292952522011872676756220415420516184163484756516999811614101002996078386909291603028840026" + "9104140792886215078424516709087000699282120660418371806535567252532567532861291042487761825829765157" + "9598470356222629348600341587229805349896502262917487882027342092222453398562647669149055628425039127" + "5771028402799806636582548892648802545661017296702664076559042909945681506526530537182941270336931378" + "5178609040708667114965583434347693385781711386455873678123014587687126603489139095620099393610310291" + "6161528813843790990423174733639480457593149314052976347574811935670911013775172100803155902485309066" + "9203767192203322909433467685142214477379393751703443661991040337511173547191855046449026365512816228" + "8244625759163330391072253837421821408835086573917715096828874782656995995744906617583441375223970968" + "3408005355984917541738188399944697486762655165827658483588453142775687900290951702835297163445621296" + "4043523117600665101241200659755851276178583829204197484423608007193045761893234922927965019875187212" + "7267507981255470958904556357921221033346697499235630254947802490114195212382815309114079073860251522" + "7429958180724716259166854513331239480494707911915326734302824418604142636395480004480026704962482017" + "9289647669758318327131425170296923488962766844032326092752496035799646925650493681836090032380929345" + "9588970695365349406034021665443755890045632882250545255640564482465151875471196218443965825337543885" + "6909411303150952617937800297412076651479394259029896959469955657612186561967337862362561252163208628" + "6922210327488921865436480229678070576561514463204692790682120738837781423356282360896320806822246801" + "2248261177185896381409183903673672220888321513755600372798394004152970028783076670944474560134556417" + "2543709069793961225714298946715435784687886144458123145935719849225284716050492212424701412147805734" + "5510500801908699603302763478708108175450119307141223390866393833952942578690507643100638351983438934" + "1596131854347546495569781038293097164651438407007073604112373599843452251610507027056235266012764848" + "3084076118301305279320542746286540360367453286510570658748822569815793678976697422057505968344086973" + "5020141020672358502007245225632651341055924019027421624843914035998953539459094407046912091409387001" + "264560016237428802109276457931065792295524988727584610126483699989225695968815920560010165525637568")); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// e and functions of e +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +template::value, bool>::type = true> +inline constexpr T e_v() noexcept +{ + return T(2.718281828459045235360287471352662497L); +} + +BOOST_INLINE_VARIABLE constexpr double e = e_v(); + +template::value, bool>::type = true> +inline constexpr T e_v() noexcept +{ + return std::move(T( + "2." + "7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274" + "2746639193200305992181741359662904357290033429526059563073813232862794349076323382988075319525101901" + "1573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069" + "5517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416" + "9283681902551510865746377211125238978442505695369677078544996996794686445490598793163688923009879312" + "7736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117" + "3012381970684161403970198376793206832823764648042953118023287825098194558153017567173613320698112509" + "9618188159304169035159888851934580727386673858942287922849989208680582574927961048419844436346324496" + "8487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016" + "7683964243781405927145635490613031072085103837505101157477041718986106873969655212671546889570350354" + "0212340784981933432106817012100562788023519303322474501585390473041995777709350366041699732972508868" + "7696640355570716226844716256079882651787134195124665201030592123667719432527867539855894489697096409" + "7545918569563802363701621120477427228364896134225164450781824423529486363721417402388934412479635743" + "7026375529444833799801612549227850925778256209262264832627793338656648162772516401910590049164499828" + "9315056604725802778631864155195653244258698294695930801915298721172556347546396447910145904090586298" + "4967912874068705048958586717479854667757573205681288459205413340539220001137863009455606881667400169" + "8420558040336379537645203040243225661352783695117788386387443966253224985065499588623428189970773327" + "6171783928034946501434558897071942586398772754710962953741521115136835062752602326484728703920764310" + "0595841166120545297030236472549296669381151373227536450988890313602057248176585118063036442812314965" + "5070475102544650117272115551948668508003685322818315219600373562527944951582841882947876108526398139" + "5599006737648292244375287184624578036192981971399147564488262603903381441823262515097482798777996437" + "3089970388867782271383605772978824125611907176639465070633045279546618550966661856647097113444740160" + "7046262156807174818778443714369882185596709591025968620023537185887485696522000503117343920732113908" + "0329363447972735595527734907178379342163701205005451326383544000186323991490705479778056697853358048" + "9669062951194324730995876552368128590413832411607226029983305353708761389396391779574540161372236187" + "8936526053815584158718692553860616477983402543512843961294603529133259427949043372990857315802909586" + "3138268329147711639633709240031689458636060645845925126994655724839186564209752685082307544254599376" + "9170419777800853627309417101634349076964237222943523661255725088147792231519747780605696725380171807" + "7636034624592787784658506560507808442115296975218908740196609066518035165017925046195013665854366327" + "1254963990854914420001457476081930221206602433009641270489439039717719518069908699860663658323227870" + "9376502260149291011517177635944602023249300280401867723910288097866605651183260043688508817157238669" + "8422422010249505518816948032210025154264946398128736776589276881635983124778865201411741109136011649" + "9507662907794364600585194199856016264790761532103872755712699251827568798930276176114616254935649590" + "3798045838182323368612016243736569846703785853305275833337939907521660692380533698879565137285593883" + "4998947074161815501253970646481719467083481972144888987906765037959036696724949925452790337296361626" + "5897603949857674139735944102374432970935547798262961459144293645142861715858733974679189757121195618" + "7385783644758448423555581050025611492391518893099463428413936080383091662818811503715284967059741625" + "6282360921680751501777253874025642534708790891372917228286115159156837252416307722544063378759310598" + "2676094420326192428531701878177296023541306067213604600038966109364709514141718577701418060644363681" + "5464440053316087783143174440811949422975599314011888683314832802706553833004693290115744147563139997" + "2217038046170928945790962716622607407187499753592127560844147378233032703301682371936480021732857349" + "3594756433412994302485023573221459784328264142168487872167336701061509424345698440187331281010794512" + "7223737886126058165668053714396127888732527373890392890506865324138062796025930387727697783792868409" + "3253658807339884572187460210053114833513238500478271693762180049047955979592905916554705057775143081" + "7511269898518840871856402603530558373783242292418562564425502267215598027401261797192804713960068916" + "3828665277009752767069777036439260224372841840883251848770472638440379530166905465937461619323840363" + "8931313643271376888410268112198912752230562567562547017250863497653672886059667527408686274079128565" + "7699631378975303466061666980421826772456053066077389962421834085988207186468262321508028828635974683" + "9654358856685503773131296587975810501214916207656769950659715344763470320853215603674828608378656803" + "0730626576334697742956346437167093971930608769634953288468336130388294310408002968738691170666661468" + "0001512114344225602387447432525076938707777519329994213727721125884360871583483562696166198057252661" + "2206797540621062080649882918454395301529982092503005498257043390553570168653120526495614857249257386" + "2069174036952135337325316663454665885972866594511364413703313936721185695539521084584072443238355860" + "6310680696492485123263269951460359603729725319836842336390463213671011619282171115028280160448805880" + "2382031981493096369596735832742024988245684941273860566491352526706046234450549227581151709314921879" + "5927180019409688669868370373022004753143381810927080300172059355305207007060722339994639905713115870" + "9963577735902719628506114651483752620956534671329002599439766311454590268589897911583709341937044115" + "5121920117164880566945938131183843765620627846310490346293950029458341164824114969758326011800731699" + "4373935069662957124102732391387417549230718624545432220395527352952402459038057445028922468862853365" + "4221381572213116328811205214648980518009202471939171055539011394331668151582884368760696110250517100" + "7392762385553386272553538830960671644662370922646809671254061869502143176211668140097595281493907222" + "6011126811531083873176173232352636058381731510345957365382235349929358228368510078108846343499835184" + "0445170427018938199424341009057537625776757111809008816418331920196262341628816652137471732547772778" + "3488774366518828752156685719506371936565390389449366421764003121527870222366463635755503565576948886" + "5495002708539236171055021311474137441061344455441921013361729962856948991933691847294785807291560885" + "1039678195942983318648075608367955149663644896559294818785178403877332624705194505041984774201418394" + "7731202815886845707290544057510601285258056594703046836344592652552137008068752009593453607316226118" + "7281739280746230946853678231060979215993600199462379934342106878134973469592464697525062469586169091" + "7857397659519939299399556754271465491045686070209901260681870498417807917392407194599632306025470790" + "1774527513186809982284730860766536866855516467702911336827563107223346726113705490795365834538637196" + "2358563126183871567741187385277229225947433737856955384562468010139057278710165129666367644518724656" + "5373040244368414081448873295784734849000301947788802046032466084287535184836495919508288832320652212" + "8104190448047247949291342284951970022601310430062410717971502793433263407995960531446053230488528972" + "9176598760166678119379323724538572096075822771784833616135826128962261181294559274627671377944875867" + "5365754486140761193112595851265575973457301533364263076798544338576171533346232527057200530398828949" + "9034259566232975782488735029259166825894456894655992658454762694528780516501720674785417887982276806" + "5366506419109734345288783386217261562695826544782056729877564263253215942944180399432170000905426507" + "6309558846589517170914760743713689331946909098190450129030709956622662030318264936573369841955577696" + "3787624918852865686607600566025605445711337286840205574416030837052312242587223438854123179481388550" + "0756893811249353863186352870837998456926199817945233640874295911807474534195514203517261842008455091" + "7084568236820089773945584267921427347756087964427920270831215015640634134161716644806981548376449157" + "3900121217041547872591998943825364950514771379399147205219529079396137621107238494290616357604596231" + "2535060685376514231153496656837151166042207963944666211632551577290709784731562782775987881364919512" + "5748332879377157145909106484164267830994972367442017586226940215940792448054125536043131799269673915" + "7542419296607312393763542139230617876753958711436104089409966089471418340698362993675362621545247298" + "4642137528910798843813060955526227208375186298370667872244301957937937860721072542772890717328548743" + "7435578196651171661833088112912024520404868220007234403502544820283425418788465360259150644527165770" + "0044521097735585897622655484941621714989532383421600114062950718490427789258552743035221396835679018" + "0764060421383073087744601708426882722611771808426643336517800021719034492342642662922614560043373838" + "6833555534345300426481847398921562708609565062934040526494324426144566592129122564889356965500915430" + "6426134252668472594914314239398845432486327461842846655985332312210466259890141712103446084271616619" + "0012571958707932175696985440133976220967494541854071184464339469901626983516078489245140589409463952" + "6780735457970030705116368251948770118976400282764841416058720618418529718915401968825328930914966534" + "5753571427318482016384644832499037886069008072709327673127581966563941148961716832980455139729506687" + "6047409154204284299935410258291135022416907694316685742425225090269390348148564513030699251995904363" + "8402842926741257342244776558417788617173726546208549829449894678735092958165263207225899236876845701" + "7823038096567883112289305809140572610865884845873101658151167533327674887014829167419701512559782572" + "7074064318086014281490241467804723275976842696339357735429301867394397163886117642090040686633988568" + "4168100387238921448317607011668450388721236436704331409115573328018297798873659091665961240202177855" + "885487617616198937079438005666336488436508914480557103976521469602766258359905198704230017946553679")); } }}} // Namespaces diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 3c283a2012..d4eb4961ff 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -898,6 +898,7 @@ test-suite misc : test_tr1_c_long_double ] [ run test_constants.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] + [ run test_high_precision_constants.cpp : : : [ requires cxx11_sfinae_expr ] ] [ run simple_continued_fraction_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run centered_continued_fraction_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run luroth_expansion_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] diff --git a/test/test_high_precision_constants.cpp b/test/test_high_precision_constants.cpp index 28b9257da8..1ad6194ed6 100644 --- a/test/test_high_precision_constants.cpp +++ b/test/test_high_precision_constants.cpp @@ -25,6 +25,17 @@ void test_pi() BOOST_TEST(abs(old_pi-new_pi) < tol); } +template +void test_e() +{ + const T tol = std::numeric_limits::epsilon(); + + T old_e = boost::math::constants::e(); + T new_e = boost::math::numbers::e_v(); + + BOOST_TEST(abs(old_e-new_e) < tol); +} + int main(void) { test_pi(); @@ -33,5 +44,11 @@ int main(void) test_pi(); test_pi(); + test_e(); + test_e(); + test_e(); + test_e(); + test_e(); + boost::report_errors(); } From 507f8477a4eef1608610ca0bfad565b3e935c114 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Sat, 30 Jan 2021 15:23:44 +0300 Subject: [PATCH 5/6] Add log2e --- .../constants/high_precision_constants.hpp | 115 ++++++++++++++++++ test/test_high_precision_constants.cpp | 17 +++ 2 files changed, 132 insertions(+) diff --git a/include/boost/math/constants/high_precision_constants.hpp b/include/boost/math/constants/high_precision_constants.hpp index beffe929bc..d5bb76a315 100644 --- a/include/boost/math/constants/high_precision_constants.hpp +++ b/include/boost/math/constants/high_precision_constants.hpp @@ -249,6 +249,121 @@ inline constexpr T e_v() noexcept "885487617616198937079438005666336488436508914480557103976521469602766258359905198704230017946553679")); } +template::value, bool>::type = true> +inline constexpr T log2e_v() noexcept +{ + return T(1.442695040888963407359924681001892137L); +} + +BOOST_INLINE_VARIABLE constexpr double log2e = log2e_v(); + +template::value, bool>::type = true> +inline constexpr T log2e_v() noexcept +{ + return std::move(T( + "1." + "4426950408889634073599246810018921374266459541529859341354494069311092191811850798855266228935063444" + "9699751830965254425559310168716835964272066215822347933627453736988471849363070138766353201553389431" + "8916664837643128615424047478422289497904795091530351338588054968865893096996368036110511075630844145" + "4272158283449418919339085777157900441712802468483413745226951823690112390940344599685399061134217228" + "8627802915801063006197676244565260599507375324062565581547593817830523972551072481307715626754580757" + "8171330193573006168761937372982675897415623817983567103443489750680705518088486561386832917732182934" + "9139684310593454022025186369345262692150955971910022196792243214334244941790714551184993859212216753" + "6531130077463276720646123374110821191379443339848057931091287760967020037575899815885180612678809976" + "0956252507841024847056900768768058461327865474782027808659462060910749015324819969730579015272324787" + "2987409812541000334486875738223647164945447537067167595899428099818267834901316666335348036789869446" + "8870911666049735372925860721294869735454070809830674893834123718631400835979618865975868745253305468" + "9212976641570420621259246313692421680590877408335813928666541584971162587069556578588747699631296952" + "5004593726273890268056693551287294338372191311166508810015878626559156379540559056778223681400309688" + "4393480862284818479134563314119302384026409727484364496219544922446522204717635860747965855666053409" + "8286098574027883743312688563354434306978701896435826139118100252599020766184432984883184723915912701" + "3904570477357648310102119282970853289609316803539196498695732643937914903084854706164337898563482389" + "0000456426185562249693091396031252022376737607415386211624555116508643679912938937122557275285535850" + "5388627546928167550407303918984389641052039899021078907741074670715487187445927826480325745329406836" + "5525441034657373203151382251293614376241422022507143703697307346094148501086031893236041133111157449" + "3770249146881455360972286167242527208888906151745105253155917831624702943017809593425237197512561232" + "9569505926858901075573121447832714438655839592620356007499708416567681679268721978983048302281782977" + "3851522937973811952783982669234678189827231383524427778656476231348599011940287807324841715110586193" + "4920254688183781835730009470014750295196481783787403935421627884823894197469552086262741947135739259" + "7226651239427201166462692938707284017956993398889202501277913459329094676020415764879790841607401359" + "1578897107736917162881726927551825179602324743501735326068637387937635720444583132643535265092900617" + "4888824703397492045902055772402036499427769923847052717768520335704012591073173663905613752045319777" + "8773562797180625921321743667984249874334562328228971247257945609197595215055835184523639531383497657" + "3762601669811676851461455606386955621626388963231602729710949950695928017443500307985939241575066315" + "1214986756300806506183144210925422756127796743090717127682018390228030306572425229480026707591343672" + "9080697447776799229453917140856561043148672020633912643384787632773495535569020831968308365499869958" + "3642731490798145217886258484513957661104038198050211137567438172517186002685912872643777633249039736" + "2963385236346485345317384090642683683566623194625999497639711599968821052168514397218112080336275327" + "7710877521564849574103985301296247671763047156585964792880879376248342674441071955700343262768181898" + "7416160050944676429010109134259811487369929607834627185425534849301219758603187473185696412559629535" + "8799597385882135599538474178559598134176046398534442952703393982088366282929127783844902714701920490" + "1714694893112878963897715820590960528434031909256530215925857297505043491577322606715497095678034285" + "5986329026985958245997372998851872454890606536427127695544247213959181544057835212120793443687363723" + "0755741238688243239535122701313505295195892516850622399516416589116100234887984472758806134729472381" + "1662775944506845234655263101639919321591490974443553161510684551135594749268898334199868857619261206" + "2004959599685774003807174697798058211608587134826982113193470752184351466436763288827197882074918575" + "2400746313361328520865846053280048727627198874889130282223419759358759778369726515830561259010741205" + "5513873940096016813578790460169363246244467916277783004751204980430843808569553029021487803694938895" + "7890412723663680262858095017048743548958662969870089762094602951509261371053098132907761486893764219" + "6665499362596562322971882411372769664670432573635720465274117731419833145788865989065594976686970419" + "7192356889298314166102424954291946877919673677950286430889703840011530039504977994113946378154915758" + "3321413720410684682736961100751774097980234578935974239232398737899314093725606263718957032046828045" + "1226971099964635965098254431562680539945765463537735071679296684607729081808206332237277648595340221" + "6717703340844802853282869962068687866770774780082319984096426103644324118454154682262556301480302287" + "9006070150324797498734205884187658110782155184571441164343149907218456748168764841188643531831486933" + "0026933168879480153147070653304880939893709123107159280496561579137181074235986483255292671472298682" + "3236038508718790966213441959168085857211807466843551926174751216420597334672381207348666193018576985" + "2262034073783221939791104485548553345658610475855458980832729211938539407137052393201441007768316759" + "3925209523616199009290538465781290194295491592749001375194072127120084438526725199191518248579386261" + "1290315950805581384188669488472219248779130968844580351540558028521536764834090393513915472712910558" + "6866160465288130671499371352381458633045960760155530957259464640849687070134717979623215515623766293" + "3205335404596607199318520305699194205892619733793723959344587032613740808103090913148200581414516553" + "8402382905194011658567693615642858548230404063193606656656116157041680085788729079404035638362497343" + "6726634002666228669936151481621084428002061286318756160873738089624609624418577019344755684974904196" + "9599960688102466750835354296476873939869150565115227735055774887276919106667445469150668929786057919" + "8757576365340890095977074669826361708569604579691269317820241427863723139349337077545365218406316112" + "9727551843625975831819377369507645604120149648618708262058507260233495874878771599591935028260063787" + "5424369852059895493510761747392893624813174870478989494784477213285981324456610808231956563578452210" + "3909612491589480801485392449514617243630554573491439584889630827339274760318328679614778753981962774" + "7554999155516742212014662006675536055303242097817891324030063605287420536033765874599460867389780616" + "7503725476528669207339701794522267444629543871134575869019805821848057109888753800773817570208970038" + "7304644392853921227236170057622304532929114054218680069017676954679219997920115796178352122363938635" + "7257735269647258081035972462386673991451935151624118746672519191213089437291419787702976509368516799" + "9058620579925049746103772632447517536831818163026794271126066162112584633198112874823568925652723470" + "8205083667534708698696473462578021475829786205328965817783797798791330198968298702675954013232726913" + "1421683209720154062102392536085389560716432763765357115662169174094588828407540175994531201629653119" + "7604566772744767029322074278500388507182984498546984846477966708584877743746781141888048820026714734" + "3946587286390653935019929129761272894881486324572314777030948020287997566233156865398737135713487218" + "5523359375758448127006455911954001043374580032498100165463875708832387568332807963690481608302663057" + "1665362470275893611817622911968604222792299388207548412883317658386177635502937973332481695318822457" + "6615747818274751183238863074375402019475496153867094622681716291356086998478265066737468395742413663" + "8952475766127369410807071067319727047517704138295804773342752493350555397085873821417370366256204201" + "7743385649321583347353531634675435998698229349796250903262540973321779306287896125638105490770557238" + "1729374049783818340150389956316107477280689191786075831786147267570641949849193197732322189827597798" + "3760474725511632300739087759378121107573423372571758494053930041899555464017401336053835886942238065" + "1320307397269006170205723357405259725259662537261296912743788526733893752324988157446575533787012471" + "6674716761647150994006988209140281583160584661530310832397977083897360221104034696363660096476801706" + "7013292050887001465081335693512210537164682862278335929503260821607745445733335439244378480201969445" + "1713145740560933610494153376121929201550314574365650530711411277701914085626777875284284821154538889" + "0591745132302363877555514034672289214441828788490045344634666655944416560131535416851305266660205845" + "5987006863442616284115003232181541161876996287416475655686092289734577789864988690384836043262328931" + "5608520947170647506633877910505499675530705189230591793349974065981132036462723586296953924330498307" + "9273988768411579869145152816781478696202299878925070473606664683648086923201545194237769108327209008" + "1741331471151064272754334462930599285499602758421736229856540775134788824444635886143916737980177940" + "6671968515242893465382814143854679341089366425308701666109793552892998646378888344080289889032079417" + "5748412840618674734041573194015613863815780446214741765700321925301855406316036210810190711535343488" + "7117031332488461003564218924682609294996177690273433369358675377801731266962477886848530730497497050" + "5009015567241038953258035761980424978259814160916739033636802012420627448222495886889032467127943243" + "5681468924612191230529690331804984438669741446787300866043055984546146463552353226575533967697801221" + "2582234085683554253123440273137548860292890158160750612989869217580282011512171779843227025630031267" + "2654041072649939728621726804265738401211030491091508375302722081428477634144561111602098246432719243" + "1612929747912323448441418177389130078228246471513942869842137594908459408976152246974197902736074811" + "2951744982067789101984860850782655301756398947976603739761896633566553954964290044644882573957132681" + "2708512743134103094318125513864571486435267350902277261041132080138422243420188041044223148539603478" + "7064433515321211300101779554863753207019449215074144903040384537523742261623044083807053939300384229" + "165026442783563078264202157486276623366317114394870684482098204550399584201628596939712381527239829")); +} + }}} // Namespaces #endif // BOOST_MATH_HIGH_PRECISION_CONSTANTS diff --git a/test/test_high_precision_constants.cpp b/test/test_high_precision_constants.cpp index 1ad6194ed6..fbd526d3b9 100644 --- a/test/test_high_precision_constants.cpp +++ b/test/test_high_precision_constants.cpp @@ -36,6 +36,17 @@ void test_e() BOOST_TEST(abs(old_e-new_e) < tol); } +template +void test_log2e() +{ + const T tol = std::numeric_limits::epsilon(); + + T old_log2e = boost::math::constants::log2_e(); + T new_log2e = boost::math::numbers::log2e_v(); + + BOOST_TEST(abs(old_log2e - new_log2e) < tol); +} + int main(void) { test_pi(); @@ -50,5 +61,11 @@ int main(void) test_e(); test_e(); + test_log2e(); + test_log2e(); + test_log2e(); + test_log2e(); + test_log2e(); + boost::report_errors(); } From 27fc8b6600fefd61c3709d4b42f773f53bc1c7b5 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Sat, 30 Jan 2021 22:48:45 +0300 Subject: [PATCH 6/6] Change interface [CI SKIP] --- include/boost/math/constants/constants.hpp | 11 +++++++++++ .../constants/high_precision_constants.hpp | 18 ++++++------------ test/test_high_precision_constants.cpp | 6 +++--- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/include/boost/math/constants/constants.hpp b/include/boost/math/constants/constants.hpp index 3f8b7e1854..b7ac5a42e2 100644 --- a/include/boost/math/constants/constants.hpp +++ b/include/boost/math/constants/constants.hpp @@ -331,6 +331,17 @@ namespace boost{ namespace math #endif } // namespace constants + +namespace numbers { +#if __cplusplus > 201400L || _MSVC_LANG > 201400L + +template::value, bool>::type = true> +BOOST_INLINE_VARIABLE constexpr T pi_v = boost::math::constants::pi(); + +BOOST_INLINE_VARIABLE constexpr double pi = pi_v; + +#endif +} // namespace numbers } // namespace math } // namespace boost diff --git a/include/boost/math/constants/high_precision_constants.hpp b/include/boost/math/constants/high_precision_constants.hpp index d5bb76a315..ad71d94a96 100644 --- a/include/boost/math/constants/high_precision_constants.hpp +++ b/include/boost/math/constants/high_precision_constants.hpp @@ -16,15 +16,13 @@ namespace boost { namespace math { namespace numbers { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// template::value, bool>::type = true> -inline constexpr T pi_v() noexcept +inline constexpr T pi_hp() noexcept { return T(3.141592653589793238462643383279502884L); } -BOOST_INLINE_VARIABLE constexpr double pi = pi_v(); - template::value, bool>::type = true> -inline constexpr T pi_v() noexcept +inline constexpr T pi_hp() noexcept { return std::move(T( "3." @@ -135,15 +133,13 @@ inline constexpr T pi_v() noexcept /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// template::value, bool>::type = true> -inline constexpr T e_v() noexcept +inline constexpr T e_hp() noexcept { return T(2.718281828459045235360287471352662497L); } -BOOST_INLINE_VARIABLE constexpr double e = e_v(); - template::value, bool>::type = true> -inline constexpr T e_v() noexcept +inline constexpr T e_hp() noexcept { return std::move(T( "2." @@ -250,15 +246,13 @@ inline constexpr T e_v() noexcept } template::value, bool>::type = true> -inline constexpr T log2e_v() noexcept +inline constexpr T log2e_hp() noexcept { return T(1.442695040888963407359924681001892137L); } -BOOST_INLINE_VARIABLE constexpr double log2e = log2e_v(); - template::value, bool>::type = true> -inline constexpr T log2e_v() noexcept +inline constexpr T log2e_hp() noexcept { return std::move(T( "1." diff --git a/test/test_high_precision_constants.cpp b/test/test_high_precision_constants.cpp index fbd526d3b9..0495646ce2 100644 --- a/test/test_high_precision_constants.cpp +++ b/test/test_high_precision_constants.cpp @@ -20,7 +20,7 @@ void test_pi() const T tol = std::numeric_limits::epsilon(); T old_pi = boost::math::constants::pi(); - T new_pi = boost::math::numbers::pi_v(); + T new_pi = boost::math::numbers::pi_hp(); BOOST_TEST(abs(old_pi-new_pi) < tol); } @@ -31,7 +31,7 @@ void test_e() const T tol = std::numeric_limits::epsilon(); T old_e = boost::math::constants::e(); - T new_e = boost::math::numbers::e_v(); + T new_e = boost::math::numbers::e_hp(); BOOST_TEST(abs(old_e-new_e) < tol); } @@ -42,7 +42,7 @@ void test_log2e() const T tol = std::numeric_limits::epsilon(); T old_log2e = boost::math::constants::log2_e(); - T new_log2e = boost::math::numbers::log2e_v(); + T new_log2e = boost::math::numbers::log2e_hp(); BOOST_TEST(abs(old_log2e - new_log2e) < tol); }