import time start_time = time.perf_counter() # python 3.8 之前用time.clock() pi = 0 N = 10000 for k in range(0,N+1): pi = pi+1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6)) finish_time = time.perf_counter() print('共耗时{}秒计算出,pi的值为:'.format(finish_time-start_time), pi)
N=10000 时 共耗时0.46197370000000004秒计算出,pi的值为: 3.141592653589793
N的,值越大,计算出来的结果越精确。
发现,小数点后的位数太少,也就是精度不够。
改进下代码:
import time from decimal import * start_time = time.perf_counter() pi = 0 N = 20000 # 浮点精度 getcontext().prec=100 for k in range(0,N+1): pi = pi +Decimal( 1/pow(16,k))*(Decimal(4)/Decimal(8*k+1)-2/Decimal(8*k+4)-1/Decimal(8*k+5)-1/Decimal(8*k+6)) # pi = Decimal(1)/3 finish_time = time.perf_counter() # print(str(Decimal(pi))[1:],len(str(Decimal(pi))[2:])) print(Decimal(pi)) print('共耗时 {} 秒计算出,pi的值为:'.format(finish_time - start_time), Decimal(pi)) print('当前精确到小数点后:%d' % len(str(Decimal(pi))[2:]),'位')
共耗时 1.5471059 秒计算出,pi的值为: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117070
当前精确到小数点后:99 位
当N为20000,精度为1000时,
共耗时 175.0506168 秒计算出,pi的值为: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520916709291494493455964398157485170780144496409948929487267691132364704656455350654830292359847032814195836122236252886507116466422101394325677730349627137615856338799169436310410755084254802336728351088097488593865771222216577254179421677166826429618078477912328627682300157165904852386064734603814708451412493342090466318428538663101514663173699541690976258588591831290619508994786118583464530456543882597393813383505996833262544322877886650237143758949505350440060110339507217334736593138383814912359803186542145092144811871256716077855798324517180112385351620956422802053261303178207473920838062978461521359942038776427356793237451350500068423745360588371415579180562044
当前精确到小数点后:999 位
N为50 0000 ,精度5000 花了20分钟,计算完了。
圆周率的高精度值:
共耗时 1223.1487832 秒计算出,pi的值为: 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209167092914944934559643981574851707801444964099489294872676911323647046564553506548302923598470328141958361222362528865071164664221013943256777303496271376158563387991694363104107550842548023367283510880974885938657712222165772541794216771668264296180784779123286276823001571659048523860647346038147084514124933420904663184285386631015146631736995416909762585885918312906195089947861185834645304565438825973938133835059968332625443228778866502371437589495053504400601103395072173347365931383838149123598031865421450921448118712567160778557983245171801123853516209564228020532613031782074739208380629784615213599420387764273567932374513505000684237453605883714155791805620427913275955347491899803058067077703160525768735252465362003467024247976676769213328139539250655447222520778156096830439131135220158805036555730274858493446058568709041420734012830251608019517565921861160132386848735983502875711548886759868375359495328118523705174036119322823792378333027971582057722040426464853778871987650638953887640345779809486498310726757864354907035639098338958931177592158359224485842168198975676596066660822050370714849541828231387334150567806421487047390696149163764376990027063896973162191009112610432354711639675405958719473769190411260423518218955947483038194889295989031109495555113383065470200955150037849006221858969582893610202975148237440785657108914416969304805402964290369133435306974366909400993113175336664677175831632301192571413349463538207074954857941535351583344150444159853551974858483505808748668339284647667541301935522969708570054954282297304558419070215582524824557206726630789474735742325801402359305240125660494176552052547003018590351715242320251827282167201814274747265919137868740592057122157774399532535221062283339878292002115379209947213706869381539070126752747911045983292917319177836045656252357083876309466411946173289732577851226905695400271765342296373973165840465548359653596191766507228695566060252616118536953126590843033794802143007807290020298860661239489794503763246607134524007444160022115483945867985388036541637039863367499205801556587553874211210297507050720110484726411855887356058657604191938708782567896332930495794022490189204056164829126764041597628122547287937077985141640989741858864501195326350861597849974563023122757957380158526740139627883959598110227412373417986409595523544181231099932519543693512640663583260140825763848249512679456139757754396651044566671003739184120961807102502872427606996983304352186364054803853262312714980310070858429142186264986462277196599082849827350829366811155622614121221387858321140409426584154361774980223408315124267442840563419109622362905436181509946258812244500862240956249003802588384671032322396652941543023561361652342886499233397514060947002523154015172211746468018698211864817230278065012973028326924760531452555831000396819904444522667693720854638026004993588137586490465800571815923588651315143052342068907738177462323904173297210559190501775455654366655355033654026100221832266661863626449118548344402543212504415921830916560393658338220901143513630537519263940283424711346925669752091014781046421201047549662631956375079906912384721783644655253601505339816850573026691561370545567101963277723339718769001800471720773587074228427117893315395834885111495969789141389107851996479285103183690836147634395185344335284316759250221783120670898502056860990915131712409095487369415144937906057330003629358472928128587509949261686542383480072694331109158301015039932107294009168430849507774507905825938980465816261198199727359995234254244361899530488984011555865232317729759523827080827587456242034620421705084786881801527988735010509231879845373179107497280640957980805274786831877649790482898199944977173528942227101236514007638824244775088630823362138808177746438552416048841958539869215959283593209477568898060520304347131070280006247603178370973559314349031693730688941907017260949360166477216748825721906951367387327676799150211705718355389125050356622646979021806206767645000687482619444348444596139743007019524166724953604380638914446967381994648066531784521799196005026645229304501379052951304419025955842408638354881804170828007521938968016554393867911676178707789641596408846981156075002750697358381327226891406103643911556950299689680799609020539353424337278669324353657109545888961008774817438109140064241400084180113074615152239731310554612704952860941958832731234254855381108984596634772106597200831414990954188536130453105797690405189167091440380489257945885918283389266440675085453790229725442240977535064270976057715636175344076610938565773318666882512935111354153990078788605647552751385333261164874631979973839707174254224381011583459418194963881055060261732108256
当前精确到小数点后:4999 位