利用Python計(jì)算圓周率π的實(shí)例代碼
前言
A貨:什么!你不會(huì)背圓周率(鄙夷的眼神) 3.1415926535 8979323846 26433...
橋哥:我會(huì)算呀 ?。?!
一、圓周率的歷史
1、中國(guó)
★ 魏晉時(shí)期,劉徽曾用使正多邊形的邊數(shù)逐漸增加去逼近圓周的方法 (即「割圓術(shù)」),求得π的近似值3.1416。
★ 漢朝時(shí),張衡得出π的平方除以16等于5/8,即π等于10的開方(約為3.162)。雖然這個(gè)值不太準(zhǔn)確,但它簡(jiǎn)單易理解,所以也在亞洲風(fēng)行了一陣。
★ 王蕃(229-267)發(fā)現(xiàn)了另一個(gè)圓周率值,這就是3.156, 但沒有人知道他是如何求出來的(ps. 沒開源唄?。?。
★ 公元5世紀(jì),祖沖之和他的兒子以正24576邊形,求出圓周率約為355/113,和真正的值相比,誤差小于八億分之一。這個(gè)紀(jì)錄在一千年后才給打破。(ps. 在大部分人不知股股定理年代,真牛?。?/p>
2、印度
★ 約在公元530年,數(shù)學(xué)大師阿耶波多利用384邊形的周長(zhǎng),算出圓周率約為√9.8684。
★ 婆羅門笈多采用另一套方法,推論出圓周率等于10的平方根。(ps. 跟張衡大佬的結(jié)果一致,但過程不同)
3、歐洲
★ 斐波那契算出圓周率約為3.1418。
★ 韋達(dá)用阿基米德的方法,算出3.1415926535<π<3.1415926537。他是第一個(gè)以無限乘積敘述圓周率的人。
★ 魯?shù)婪蛉f科倫以邊數(shù)多過32000000000的多邊形算出有35個(gè)小數(shù)位的圓周率。
★ 華理斯在1655年求出一道公式π/2=2×2×4×4×6×6×8×8...../3×3×5×5×7×7×9×9......
★ 歐拉發(fā)現(xiàn)的e的iπ次方加1等于0,成為證明π是超越數(shù)的重要依據(jù)。
二、用python計(jì)算圓周率π
【方法】蒙特卡洛法
【程序設(shè)計(jì)思路】使用python random庫隨機(jī)生成點(diǎn),落在正方形內(nèi),計(jì)算正方形內(nèi)的圓內(nèi)落點(diǎn)與正方形內(nèi)落點(diǎn)之比,近似為面積之比,隨機(jī)數(shù)越隨機(jī),數(shù)量越大越準(zhǔn)確。
【軟件環(huán)境】python 3.6(本程序可兼容python 2.x)
【代碼】
from random import random from time import perf_counter def calPI(N = 100): hits = 0 start = perf_counter() for i in range(1, N*N+1): x, y = random(), random() dist = pow(x ** 2 + y ** 2, 0.5) if dist <= 1.0: hits += 1 pi = (hits * 4) / (N * N) use_time = perf_counter() - start return pi, use_time PI, use_time = calPI(10000) print('use Monte Carlo method to calculate PI: {}'.format(PI)) print('use time: {} s'.format(use_time))
【結(jié)果展示】
震驚:10000次隨機(jī)數(shù),精確到3.1415了,把橋哥放在1000年前,可不得了
附:python輸出指定精度的圓周率pi的值
首先像所有人都會(huì)的一樣,本能地敲出
import math val = math.pi print(val)
這樣就得到了pi的近似值3.141592653589793,要得到后面的小數(shù),
不是直接可以簡(jiǎn)單粗暴的乘以10的指數(shù)
import math val = math.pi * 100000000000000000 print(val)
但是當(dāng)val的小數(shù)部分都變成整數(shù)141592653589793的時(shí)候,并不會(huì)如我們所想的那樣露出后幾位整數(shù),而是直接變成科學(xué)計(jì)數(shù)法3.141592653589793e+24,所以在小數(shù)點(diǎn)移位之后為了看到整數(shù)部分,我們必須把float轉(zhuǎn)換成int
import math def get_pi_value(x): if(x>0): num = math.pow(10,x) val = int(math.pi * num) print(val) else: print('輸入有誤') for i in range(10): get_pi_value(i * 10)
運(yùn)行結(jié)果:
輸入有誤
31415926535
314159265358979334144
3141592653589793216413703340032
31415926535897931797658451191693855162368
314159265358979323748068948991981337089580185157632
3141592653589793042280431964658831312838665295201939643957248
31415926535897934343019391492015828684494553443559665723073458675384320
314159265358979299628295535813807516164434328768456060679773689288809487458631680
3141592653589793231804887682686061504016619085797532053907788745336000826072569315489480704
總結(jié)
到此這篇關(guān)于利用Python計(jì)算圓周率π的文章就介紹到這了,更多相關(guān)Python計(jì)算圓周率π內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)將多個(gè)空格換為一個(gè)空格.md的方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)將多個(gè)空格換為一個(gè)空格.md的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12numpy 矩陣形狀調(diào)整:拉伸、變成一位數(shù)組的實(shí)例
這篇文章主要介紹了numpy 矩陣形狀調(diào)整:拉伸、變成一位數(shù)組的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python使用pylab庫實(shí)現(xiàn)畫線功能的方法詳解
這篇文章主要介紹了Python使用pylab庫實(shí)現(xiàn)畫線功能的方法,結(jié)合具體實(shí)例分析了Python使用pylab庫的相關(guān)函數(shù)實(shí)現(xiàn)畫線功能的操作技巧,并附帶說明了相關(guān)函數(shù)與參數(shù)功能,需要的朋友可以參考下2017-06-06python使用selenium實(shí)現(xiàn)批量文件下載
這篇文章主要介紹了python使用selenium實(shí)現(xiàn)批量文件下載,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Python利用柯里化實(shí)現(xiàn)提高代碼質(zhì)量
柯里化(Currying)是函數(shù)式編程中的一個(gè)重要概念,它可以將一個(gè)多參數(shù)函數(shù)轉(zhuǎn)化為一系列單參數(shù)函數(shù)的組合,本文將詳細(xì)解釋什么是柯里化,如何在Python中實(shí)現(xiàn)柯里化,感興趣的可以了解下2024-01-01基于keras中訓(xùn)練數(shù)據(jù)的幾種方式對(duì)比(fit和fit_generator)
這篇文章主要介紹了keras中訓(xùn)練數(shù)據(jù)的幾種方式對(duì)比(fit和fit_generator),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05pandas?實(shí)現(xiàn)?in?和?not?in?的用法及使用心得
pandas按條件篩選數(shù)據(jù)時(shí),除了使用query()方法,還可以使用isin和對(duì)isin取反進(jìn)行條件篩選,今天通過本文給大家介紹pandas?實(shí)現(xiàn)?in?和?not?in?的用法及使用心得,感興趣的朋友跟隨小編一起看看吧2023-01-01在python中將字符串轉(zhuǎn)為json對(duì)象并取值的方法
今天小編就為大家分享一篇在python中將字符串轉(zhuǎn)為json對(duì)象并取值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python 如何修改程序默認(rèn)時(shí)區(qū)
這篇文章主要介紹了Python 如何修改程序默認(rèn)時(shí)區(qū),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09