计算圆周率(π)
Monday, June 12, 2006 4:43:49 PM
今天看到一个很棒的圆周率的python实现,计算到前一千位只用几秒!
看了半天还没看懂怎么做的,贴出代码吧!
[yurt@yurt ~] [00:45:16 ]
<2 files 50M >
>>>./pi.py
看了半天还没看懂怎么做的,贴出代码吧!
#!/usr/bin/env python
#-*-coding:UTF-8-*-
#vim: set enc=utf8:
#
# Author: yunt <shangyunt@gmail.com>
# Last Change: 2006-06-13 00:42
#
def f((q, r, t, k)):
n = (3 * q + r) / t
if (4 * q + r) / t == n:
return (10 * q, 10 * (r - n * t), t, k, n)
else:
return (q * k, q * (4 * k + 2) + r * (2 * k + 1), t * (2 * k + 1), k + 1)
def pi(n = -1):
out = ''
printed = False
r = f((1, 0, 1, 1))
out = ''
while (n != 0):
if len(r) == 5:
out += str(r[4])
if not printed:
out += '.'
printed = True
n -= 1
r = f(r[:4])
return out
def main():
print pi(1000)
if __name__ == "__main__":
main()
[yurt@yurt ~] [00:45:16 ]
<2 files 50M >
>>>./pi.py
3.1415926535897932384626433832795028841971693993751 058209749445923078164062862089986280348253421170679 821480865132823066470938446095505822317253594081284 811174502841027019385211055596446229489549303819644 288109756659334461284756482337867831652712019091456 485669234603486104543266482133936072602491412737245 870066063155881748815209209628292540917153643678925 903600113305305488204665213841469519415116094330572 703657595919530921861173819326117931051185480744623 799627495673518857527248912279381830119491298336733 624406566430860213949463952247371907021798609437027 705392171762931767523846748184676694051320005681271 452635608277857713427577896091736371787214684409012 249534301465495853710507922796892589235420199561121 290219608640344181598136297747713099605187072113499 999983729780499510597317328160963185950244594553469 083026425223082533446850352619311881710100031378387 528865875332083814206171776691473035982534904287554 687311595628638823537875937519577818577805321712268 06613001927876611195909216420198






