code optimization (calc PI) / New Algorithme for PI
Nick Craig-Wood
nick at craig-wood.com
Fri Jan 5 05:30:04 EST 2007
Michael M. <michael at mustun.ch> wrote:
> Yes, this "gmpy" sounds good for calc things like that.
> But not available on my machine.
> ImportError: No module named gmpy
Sorry, I should have said - you'll need to download that from
http://gmpy.sourceforge.net/
> Anyway, thanks for posting. This gmpy module can be very intersting.
> But right now, the focus was, if it's possible to translate a strange C
> code into Python. And it is. Sure ;-)
>
> Maybe, someone can also translate a very simple algorithm for calc a
> range of PI in Python. (Available Code for C.)
> http://crd.lbl.gov/~dhbailey/
Here are some more pi calculation methods. You'll need the FixedPoint
class in my last posting, or you cah use gmpy mpf~s also.
_1 = FixedPoint(1)
# or
_1 = gmpy.mpf(1, bits)
# or (for testing)
_1 = 1.0
_3 = _1 * 3
def arctan(x):
"""
Calculate arctan(x)
arctan(x) = x - x**3/3 + x**5/5 - ... (-1 <= x <= 1)
"""
total = x
power = x
divisor = 1
old_delta = None
while 1:
power *= x
power *= x
power = -power
divisor += 2
old_total = total
total += power / divisor
delta = abs(total - old_total)
if old_delta is not None and delta >= old_delta:
break
old_delta = delta
return total
def pi_machin():
return 4*(4*arctan(_1/5) - arctan(_1/239))
def pi_ferguson():
return 4*(3*arctan(_1/4) + arctan(_1/20) + arctan(_1/1985))
def pi_hutton():
return 4*(2*arctan(_1/3) + arctan(_1/7))
def pi_gauss():
return 4*(12*arctan(_1/18) + 8*arctan(_1/57) - 5*arctan(_1/239))
def pi_euler():
return 4*(5*arctan(_1/7) + 2*arctan(_3/79))
--
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick
More information about the Python-list
mailing list