用投点法求圆周率python代码并统计程序运行时间
时间: 2024-02-05 09:04:48 浏览: 143
以下是使用投点法求圆周率的Python代码,并使用time模块统计程序运行时间:
```python
import random
import time
def calc_pi(n):
count = 0
for i in range(n):
x = random.uniform(-1,1)
y = random.uniform(-1,1)
if x**2 + y**2 <= 1:
count += 1
pi = 4 * count / n
return pi
if __name__ == '__main__':
start_time = time.time()
n = 1000000
pi = calc_pi(n)
end_time = time.time()
print('pi =', pi)
print('程序运行时间:', end_time - start_time, '秒')
```
在上述代码中,`calc_pi`函数用于使用投点法计算圆周率的近似值,`n`为投点次数,投点次数越多,计算结果越精确。程序运行时,先使用`random`模块中的`uniform`函数随机生成两个-1到1之间的浮点数,作为平面直角坐标系中的点坐标,判断该点是否在圆内,如果在圆内,则计数器`count`加1。最后,根据投点次数和圆内点的数量,计算圆周率的近似值。程序运行结束后,使用结束时间减去开始时间即可得到程序运行时间。
相关问题
求圆周率python代码并统计程序运行时间
以下是求圆周率的Python代码,并使用time模块统计程序运行时间:
```python
import time
def calc_pi(n):
pi = 0
sign = 1
for i in range(1, n*2+1, 2):
pi += sign * (4/i)
sign *= -1
return pi
if __name__ == '__main__':
start_time = time.time()
n = 1000000
pi = calc_pi(n)
end_time = time.time()
print('pi =', pi)
print('程序运行时间:', end_time - start_time, '秒')
```
在上述代码中,`calc_pi`函数用于计算圆周率的近似值,`n`为迭代次数,迭代次数越多,计算结果越精确。`time`模块中的`time`函数用于获取当前时间,从而实现计时功能。程序运行结束后,使用结束时间减去开始时间即可得到程序运行时间。
用多线程的方式求圆周率python代码并统计程序运行时间
以下是一个使用多线程并行计算圆周率的 Python 代码,并使用 time 模块计算程序运行时间:
```python
import random
import threading
import time
THREAD_NUM = 4 # 线程数
POINTS_PER_THREAD = 1000000 # 每个线程生成的点数
total_points = POINTS_PER_THREAD * THREAD_NUM # 总点数
points_in_circle = 0 # 落在圆内的点数
lock = threading.Lock() # 互斥锁,用于保证数据一致性
def monte_carlo():
global points_in_circle
count = 0
for i in range(POINTS_PER_THREAD):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
if x * x + y * y <= 1:
count += 1
with lock:
points_in_circle += count
threads = []
for i in range(THREAD_NUM):
t = threading.Thread(target=monte_carlo)
threads.append(t)
t.start()
# 等待所有线程完成
for t in threads:
t.join()
# 计算圆周率
pi = 4.0 * points_in_circle / total_points
print("圆周率的估计值为", pi)
# 计算程序运行时间
end_time = time.time()
print("程序运行时间为", end_time - start_time, "秒")
```
在该代码中,首先定义了线程数和每个线程生成的点数,然后计算出总点数和落在圆内的点数。接着,定义了互斥锁 `lock`,用于保证数据的一致性。在 `monte_carlo` 函数中,生成指定数量的随机点,并统计落在圆内的点数,最后使用互斥锁将线程计算出的结果累加到 `points_in_circle` 中。在主程序中,创建多个线程并等待它们完成,最后计算估计的圆周率,并使用 time 模块计算程序运行时间。
阅读全文