用python计算圆周率

import time
import math
import sys

------------------- 莱布尼茨公式(级数法) -------------------
def leibniz_pi(iterations):
pi = 0.0
sign = 1
for i in range(iterations):
term = sign / (2 * i + 1)
pi += term
sign *= -1

文本进度条(每1%更新一次)
if (i + 1) % (iterations // 100) == 0:
percent = (i + 1) / iterations * 100
bar_length = 50 # 进度条长度
filled_length = int(bar_length * percent // 100)
bar = '█' * filled_length + '-' * (bar_length - filled_length)
sys.stdout.write(f'\r莱布尼茨进度: |{bar}| {percent:.1f}%')
sys.stdout.flush()
time.sleep(0.001) # 模拟计算延迟(可删除)
return 4 * pi

------------------- 马青公式(高效法) -------------------
def arctan_series(x, terms):
"""反正切函数的泰勒展开:arctan(x) = x - x^3/3 + x^5/5 - x^7/7 + ..."""
result = 0.0
sign = 1
x_pow = x # x的幂次(初始为x^1)
for n in range(terms):
denominator = 2 * n + 1
term = sign * x_pow / denominator
result += term
sign *= -1
x_pow *= x * x # 更新x的幂次(x^(2n+1) → x^(2n+3))
return result

def machin_pi(terms):

计算 arctan(1/5) 和 arctan(1/239)

arctan_1_5 = arctan_series(1/5, terms)
arctan_1_239 = arctan_series(1/239, terms)

马青公式:π = 16arctan(1/5) - 4arctan(1/239)
pi = 16 * arctan_1_5 - 4 * arctan_1_239

分段进度条(按轮次更新)
bar_length = 50
filled_length = int(bar_length * terms // 100) # 假设terms=100为满进度
bar = '█' * filled_length + '-' * (bar_length - filled_length)
sys.stdout.write(f'\r马青公式进度: |{bar}| 100.0%')
sys.stdout.flush()
time.sleep(0.5) # 模拟计算延迟(可删除)
return pi

------------------- 主程序 -------------------
if name == "main":

1. 莱布尼茨公式计算(迭代100万次)

print("=== 莱布尼茨公式(级数法) ===")
iterations = 1000000
leibniz_result = leibniz_pi(iterations)
print(f"\n莱布尼茨结果({iterations}次迭代): {leibniz_result:.50f}")

  1. 马青公式计算(迭代100次)
    print("\n=== 马青公式(高效法) ===")
    terms = 100
    machin_result = machin_pi(terms)
    print(f"\n马青公式结果({terms}次迭代): {machin_result:.50f}")

  2. 对比Python内置π
    print(f"\nPython内置π: {math.pi:.50f}")

posted @ 2026-07-03 14:41  guoqiiiii  阅读(1)  评论(0)    收藏  举报