My Opera is closing 3rd of March
photo of Yunt

云一样的梦…

只是当时已惘然

Subscribe to RSS feed

计算圆周率(π)

今天看到一个很棒的圆周率的python实现,计算到前一千位只用几秒!
看了半天还没看懂怎么做的,贴出代码吧!


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