from decimal import Decimal, getcontext import sys # 设置总精度,预留余量保证最后10000位准确 getcontext().prec = 10020 def calc_pi_10000(): C = Decimal(426880) * Decimal(10005).sqrt() M = Decimal(1) L = Decimal(13591409) X = Decimal(1) K = Decimal(6) S = L iter_times = 80 # 足够稳稳算出10000位 bar_len = 35 for i in range(1, iter_times + 1): M = (K**3 - 16*K) * M // i**3 L += Decimal(545140134) X *= Decimal(-262537412640768000) S += M * L / X K += 6 # 进度条 p = i / iter_times fill = int(bar_len * p) bar = "█"*fill + "-"*(bar_len-fill) sys.stdout.write(f"\r正在计算: |{bar}| {p*100:.1f}%") sys.stdout.flush() pi = C / S return pi if __name__ == "__main__": pi_result = calc_pi_10000() print("\n\n===== 圆周率 小数点后10000位 =====") print(pi_result)
![]()