4.4.用python解決經典問題: 求圓周率近似值

1.問題描述與思路

前提是已知圓的面積公式 S = pi * r * r

假設在一个邊長爲1的正方形中建立一个能容納的最大的圓, 則圓的半徑r=1, 那麼在正方形內隨機選擇一个點, 則此點出現在圓內的概率爲S圓/S正方形;

對于任意點(x, y), 當算式x*x + y*y <= 1時, 則點在圓內;

因此可以進行多次模擬落點, 並統計符合上述條件的落點次數, 得到落在圓內的概率爲 n中/n總, 故而推導出 pi = 4 * n中 / n總.



2.實現代碼

# 已知S=pi*r*r, 求pi值

import random

number_trails = int(input('請輸入你想模擬的次數:'))
number_hits = 0  # 落到pi範圍內的

for i in range(number_trails):
    x = random.random()*2 - 1
    y = random.random()*2 - 1
    if x**2 + y**2 <= 1:  # 判斷是否落在圓內
        number_hits += 1

pi_test = 4*number_hits/number_trails

print(f'經過{number_trails}次模擬, pi的近似值爲{pi_test}')

注意, random.random()函數的返回值是大于等于0且小于1的隨機值.



3.試運行

請輸入你想模擬的次數:10000000
經過10000000次模擬, pi的近似值爲3.142548

請輸入你想模擬的次數:50000000
經過50000000次模擬, pi的近似值爲3.14158208

請輸入你想模擬的次數:100000000
經過100000000次模擬, pi的近似值爲3.141853

實際精度並不太高, 在五千萬次和一億次模擬後, 也僅僅精確到3位小數而已.

顯然是這个算法的缺陷.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值