欢迎光临散文网 会员登陆 & 注册

pyuthon计算圆周率(无聊写的,写的玩玩)

2023-05-17 23:35 作者:星海三垣二十八宿  | 我要投稿

环境如下

编译器:PyCharm

python解释器:COnda

工具环境:Conda

python版本:3.10

事情是这样的本来准备写计算圆周率的python代码玩玩,然后发现输出的结果不对

代码如下

from decimal import Decimal, getcontext
import signal
def signal_handler(signum, frame):
   print('You pressed Ctrl+C!')
   exit(0)
def compute_pi():

   # 设置上下文精度
   getcontext().prec = 1000
   # 初始化参数
   a = Decimal(1.0)
   b = Decimal(1.0) / Decimal(2).sqrt()
   t = Decimal(1.0) / Decimal(4.0)
   p = Decimal(1.0)
   # 安装信号处理函数
   signal.signal(signal.SIGINT, signal_handler)
   # 循环计算
   for i in range(10000000000000):
       a_next = (a + b) / Decimal(2.0)
       b_next = (a * b).sqrt()
       t_next = t - p*(a - a_next)**2
       pi_next = (a_next + b_next)**2 / (Decimal(4.0) * t_next)

       # 将每一位的计算结果输出
       for digit in str(pi_next):
           if digit != '.':
               print(digit, end='')
       a = a_next
       b = b_next
       t = t_next
       p = pi_next
   print("\nFinished computing pi!")

# 执行圆周率计算
compute_pi()

输出结果
3140579250522168248311331268975823311773440237512948335643486693345582758034902907827287621552766900546005422146813923926603..............

正确输出结果应该:3. 1415926535 8979323846 2643383279 5028841971 6939937510
5820974944 5923078164 0628620899 8628034825 3421170679

唯一作用就是:满屏幕在动的随机数字

感觉挺好玩的,因为计算计算速度比较快,不会太有人,会核对结果是否正确,装逼应该还是可以的

注意:本程序可以跑,但是输出结果不正确

以下是正确的计算圆周率的python代码

import math
def compute_pi():
   return math.pi
pi = compute_pi()
print(pi)

输出结果:3.141592653589793

如果你感觉位数不够的用以下代码

import decimal
def pi_to_n_decimal_places(n):
   decimal.getcontext().prec = n + 1
   pi = decimal.Decimal(0)
   k = 0
   while True:
       term = 1 / decimal.Decimal(16)**k * (
                  decimal.Decimal(4)/(8*k+1) -
                  decimal.Decimal(2)/(8*k+4) -
                  decimal.Decimal(1)/(8*k+5) -
                  decimal.Decimal(1)/(8*k+6))
       if abs(term) < decimal.Decimal("1e-{}".format(n)):
           break
       pi += term
       k += 1
   return pi
pi = pi_to_n_decimal_places(100)

//pi = pi_to_n_decimal_places(这改成你想让电脑计算多少位数)

print(pi)

输出结果:3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170678

注意:数太大,电脑会卡死

运行环境已经提供,想玩的可以配置相同的环境,玩玩,加粗的代码

pyuthon计算圆周率(无聊写的,写的玩玩)的评论 (共 条)

分享到微博请遵守国家法律