C#犬第,π任意位數(shù)的算法源程序與數(shù)據(jù)可視化

對于數(shù)學(xué)常數(shù) PI 后面位數(shù)的計(jì)算與追求锦积,是數(shù)學(xué)家與計(jì)算機(jī)科學(xué)家們樂此不疲的游戲。

一歉嗓、圓周率PI簡史

圓周率(Pi)是圓的周長與直徑的比值,一般用希臘字母π表示背蟆,是一個(gè)在數(shù)學(xué)及物理學(xué)中普遍存在的數(shù)學(xué)常數(shù)鉴分。π也等于圓形之面積與半徑平方之比,是精確計(jì)算圓周長带膀、圓面積志珍、球體積等幾何形狀的關(guān)鍵值。

圓周率用希臘字母π(讀作[pa?])表示垛叨,是一個(gè)常數(shù)(約等于3.141592654)伦糯,是代表圓周長和直徑的比值柜某。它是一個(gè)無理數(shù),即無限不循環(huán)小數(shù)敛纲。在日常生活中喂击,通常都用3.14代表圓周率去進(jìn)行近似計(jì)算。而用九位小數(shù)3.141592654便足以應(yīng)付一般計(jì)算淤翔。即使是工程師或物理學(xué)家要進(jìn)行較精密的計(jì)算翰绊,充其量也只需取值至小數(shù)點(diǎn)后幾百個(gè)位。

PI簡史.jpg

古希臘大數(shù)學(xué)家阿基米德(公元前287年—公元前212年)開創(chuàng)了人類歷史上通過理論計(jì)算圓周率近似值的先河旁壮。阿基米德從單位圓出發(fā)监嗜,先用內(nèi)接正六邊形求出圓周率的下界為3,再用外接正六邊形并借助勾股定理求出圓周率的上界小于4抡谐。接著裁奇,他對內(nèi)接正六邊形和外接正六邊形的邊數(shù)分別加倍,將它們分別變成內(nèi)接正12邊形和外接正12邊形麦撵,再借助勾股定理改進(jìn)圓周率的下界和上界刽肠。他逐步對內(nèi)接正多邊形和外接正多邊形的邊數(shù)加倍,直到內(nèi)接正96邊形和外接正96邊形為止厦坛。最后五垮,他求出圓周率的下界和上界分別為223/71和22/7,并取它們的平均值3.141851為圓周率的近似值杜秸。阿基米德用到了迭代算法和兩側(cè)數(shù)值逼近的概念放仗,稱得上是“計(jì)算數(shù)學(xué)”的鼻祖。

中國古算書《周髀算經(jīng)》(約公元前2世紀(jì))的中有“徑一而周三”的記載撬碟,意即取诞挨。漢朝時(shí),張衡得出呢蛤,即(約為3.162)惶傻。這個(gè)值不太準(zhǔn)確,但它簡單易理解其障。

割圓術(shù).jpg

公元263年银室,中國數(shù)學(xué)家劉徽用“割圓術(shù)”計(jì)算圓周率,他先從圓內(nèi)接正六邊形励翼,逐次分割一直算到圓內(nèi)接正192邊形蜈敢。他說:“割之彌細(xì),所失彌少汽抚,割之又割抓狭,以至于不可割,則與圓周合體而無所失矣造烁》窆”這包含了求極限的思想午笛。劉徽給出π=3.141024的圓周率近似值,劉徽在得圓周率=3.14之后苗桂,將這個(gè)數(shù)值和晉武庫中漢王莽時(shí)代制造的銅制體積度量衡標(biāo)準(zhǔn)嘉量斛的直徑和容積檢驗(yàn)药磺,發(fā)現(xiàn)3.14這個(gè)數(shù)值還是偏小。于是繼續(xù)割圓到1536邊形誉察,求出3072邊形的面積与涡,得到令自己滿意的圓周率。

劉徽.jpg

公元480年左右持偏,南北朝時(shí)期的數(shù)學(xué)家祖沖之進(jìn)一步得出精確到小數(shù)點(diǎn)后7位的結(jié)果驼卖,給出不足近似值3.1415926和過剩近似值3.1415927,還得到兩個(gè)近似分?jǐn)?shù)值鸿秆,密率和約率酌畜。密率是個(gè)很好的分?jǐn)?shù)近似值,要取到才能得出比略準(zhǔn)確的近似卿叽。在之后的800年里祖沖之計(jì)算出的π值都是最準(zhǔn)確的桥胞。

祖沖之.jpg

其中的密率在西方直到1573年才由德國人奧托(Valentinus Otho)得到,1625年發(fā)表于荷蘭工程師米托尼斯(Metius)的著作中考婴,歐洲稱之為Metius' number贩虾。

1665年,英國數(shù)學(xué)家約翰·沃利斯(John Wallis)出版了一本數(shù)學(xué)專著沥阱,其中他推導(dǎo)出一個(gè)公式缎罢,發(fā)現(xiàn)圓周率等于無窮個(gè)分?jǐn)?shù)相乘的積。

2015年考杉,羅切斯特大學(xué)的科學(xué)家們在氫原子能級的量子力學(xué)計(jì)算中發(fā)現(xiàn)了圓周率相同的公式策精。

2019年3月14日,谷歌宣布圓周率現(xiàn)已到小數(shù)點(diǎn)后31.4萬億位崇棠。

二咽袜、PI的當(dāng)前世界紀(jì)錄

2021年8月17日,美國趣味科學(xué)網(wǎng)站報(bào)道枕稀,瑞士研究人員使用一臺超級計(jì)算機(jī)询刹,歷時(shí)108天,將著名數(shù)學(xué)常數(shù)圓周率π計(jì)算到小數(shù)點(diǎn)后62.8萬億位萎坷,創(chuàng)下該常數(shù)迄今最精確值記錄范抓。

三、一些PI值

下面給出一些可能用到的PI值食铐。

1、4位PI

PI=3.1415

2僧鲁、16位PI

PI=3.1415926535897932

3虐呻、64位PI

PI=3.1415926535897932384626433832795028841971693993751058209749445923

4象泵、128位PI

PI=3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460

5、256位PI

PI=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485

6斟叼、512位PI

PI=3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244

7偶惠、1024位PI

PI=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788

8、2048位PI

PI=3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913151557485724245415069595082953311686172785588907509838175463746493931925506040092770167113900984882401285836160356370766010471018194295559619894676783744944825537977472684710404753464620804668425906949129331367702898915210475216205696602405803815019351125338243003558764024749647326391419927260426992279678235478163600934172164121992458631503028618297455570674983850549458858692699569092721079750930295532116534498720275596023648066549911988183479775356636980742654252786255181841757467289097777279380008164706001614524919217321721477235014144197356854816136115735255213347574184946843852332390739414333454776241686251898356948556209921922218427255025425688767179049460165346680498862723279178608578438382796797668145410095388378636095068006422512520511739298489608412848862694560424196528502221066118630674427862203919494504712371378696095636437191728746776465757396241389086583264599581339047802759009946576407895126946839835259570982582262052248940

四朗涩、用家里的臺式機(jī)創(chuàng)造記錄的代碼

前面說了:2021年8月17日忽孽,瑞士研究人員使用一臺超級計(jì)算機(jī),歷時(shí)108天谢床,將著名數(shù)學(xué)常數(shù)圓周率π計(jì)算到小數(shù)點(diǎn)后62.8萬億位兄一,創(chuàng)下該常數(shù)迄今最精確值記錄。

顯然识腿,你我都沒有超級計(jì)算機(jī)出革。

但是!但是渡讼!但是骂束!即使是家里的臺式機(jī)沒準(zhǔn)也可以創(chuàng)造世界記錄。

1成箫、運(yùn)行效果

運(yùn)行效果.gif

C# 的代碼展箱,分為以下2、3兩部分:

2蹬昌、Windows Form 部分代碼

using System;

using System.Text;

using System.Windows.Forms;

using Legalsoft.Alrorithm.Large;

namespace WindowsFormsApp7

{

 public partial class Form1 : Form

 {

 public Form1()

 {

 InitializeComponent();

 }

 private void Form1_Load(object sender, EventArgs e)

 {

 this.Text = "C#混驰,任意位π計(jì)算的可視化編程——北京聯(lián)高軟件開發(fā)有限公司";

 button1.Text = "加油!"; button1.Cursor = Cursors.Hand;

 textBox1.Text = "256";

 panel1.Dock = DockStyle.Top;

 panel2.Dock = DockStyle.Fill;

 webBrowser1.Navigate("http://www.315soft.com");

 }

 private void button1_Click(object sender, EventArgs e)

 {

 PIer lp = new PIer();

 int n = Int32.Parse("0" + textBox1.Text);

 // 安排一個(gè)進(jìn)度條凳厢,超過512位的計(jì)算變得慢了账胧,以便看到計(jì)算進(jìn)度!

 progressBar1.Value = 0;

 progressBar1.Maximum = n + 1;

 progressBar1.Style = ProgressBarStyle.Continuous;

 StringBuilder sb = new StringBuilder();

 sb.Append("<html><body style='word-break:break-all;'>");

 sb.Append("PI=3.");

 for (int i = 1; i <= n; i++)

 {

 sb.Append(lp.Execute(i));

 progressBar1.Value = i;

 progressBar1.Refresh();

 }

 sb.Append("</body></html>");

 progressBar1.Value = 0;

 webBrowser1.DocumentText = sb.ToString();

 }

 }

}

3先紫、任意位PI計(jì)算的C#代碼

(改編自Pi Formulas, Algorithms and Computations (bellard.org))

using System;

namespace Legalsoft.Alrorithm.Large

{

 public class PIer

 {

 private int InverseXModuleY(int x, int y)

 {

 int u = x;

 int v = y;

 int c = 1;

 int a = 0;

 do

 {

 int q = v / u;

 int t = c;

 c = a - q * c; a = t; t = u;

 u = v - q * u; v = t;

 } while (u != 0);

 a = a % y;

 if (a < 0) { a = y + a; }

 return a;

 }

 private int MultiplyModule(int a, int b, int m)

 {

 return (int)(FloatModule((double)a * (double)b, m));

 }

 private int PowModule(int a, int b, int m)

 {

 int r = 1;

 int aa = a;

 while (true)

 {

 if ((b & 1) != 0) { r = MultiplyModule(r, aa, m); }

 b = b >> 1;

 if (b == 0) { break; }

 aa = MultiplyModule(aa, aa, m);

 }

 return r;

 }

 private int IsPrime(int n)

 {

 int r, i;

 if ((n % 2) == 0) { return 0; }

 r = (int)(Math.Sqrt(n));

 for (i = 3; i <= r; i += 2)

 {

 if ((n % i) == 0) { return 0; }

 }

 return 1;

 }

 private int NextPrime(int n)

 {

 do { n++; } while (IsPrime(n) == 0);

 return n;

 }

 private double FloatModule(double a, double b)

 {

 return (a - (int)(a / b) * b);

 }

 public int Execute(int n)

 {

 double sum = 0.0;

 int N = (int)((n + 20) * Math.Log(10) / Math.Log(2));

 for (int a = 3; a <= (2 * N); a = NextPrime(a))

 {

 int vmax = (int)(Math.Log(2 * N) / Math.Log(a));

 int av = 1;

 for (int i = 0; i < vmax; i++)

 {

 av = av * a;

 }

 int s = 0;

 int num = 1;

 int den = 1;

 int v = 0;

 int kq = 1;

 int kq2 = 1;

 int t;

 for (int k = 1; k <= N; k++)

 {

 t = k;

 if (kq >= a)

 {

 do

 {

 t = t / a; v--;

 } while ((t % a) == 0);

 kq = 0;

 }

 kq++;

 num = MultiplyModule(num, t, av);

 t = (2 * k - 1);

 if (kq2 >= a)

 {

 if (kq2 == a)

 {

 do

 {

 t = t / a; v++;

 } while ((t % a) == 0);

 }

 kq2 -= a;

 }

 den = MultiplyModule(den, t, av);

 kq2 += 2;

 if (v > 0)

 {

 t = InverseXModuleY(den, av);

 t = MultiplyModule(t, num, av);

 t = MultiplyModule(t, k, av);

 for (int i = v; i < vmax; i++)

 {

 t = MultiplyModule(t, a, av);

 }

 s += t;

 if (s >= av) { s -= av; }

 }

 }

 t = PowModule(10, n - 1, av);

 s = MultiplyModule(s, t, av);

 sum = FloatModule(sum + (double)s / (double)av, 1.0);

 }

 return (int)(Math.Floor((int)(sum * 1e9) / 1e8));

 }

 }

}

150行治泥!不多!

————————————————

版權(quán)聲明:本文為CSDN博主「深度混淆」的原創(chuàng)文章遮精,遵循CC 4.0 BY-SA版權(quán)協(xié)議居夹,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/beijinghorn/article/details/123862757

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末本冲,一起剝皮案震驚了整個(gè)濱河市准脂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌檬洞,老刑警劉巖狸膏,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異添怔,居然都是意外死亡湾戳,警方通過查閱死者的電腦和手機(jī)贤旷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砾脑,“玉大人幼驶,你說我怎么就攤上這事∪鸵拢” “怎么了盅藻?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畅铭。 經(jīng)常有香客問我氏淑,道長,這世上最難降的妖魔是什么顶瞒? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任夸政,我火速辦了婚禮,結(jié)果婚禮上榴徐,老公的妹妹穿的比我還像新娘守问。我一直安慰自己,他們只是感情好坑资,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布耗帕。 她就那樣靜靜地躺著,像睡著了一般袱贮。 火紅的嫁衣襯著肌膚如雪仿便。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天攒巍,我揣著相機(jī)與錄音嗽仪,去河邊找鬼。 笑死柒莉,一個(gè)胖子當(dāng)著我的面吹牛闻坚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兢孝,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼窿凤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了跨蟹?” 一聲冷哼從身側(cè)響起雳殊,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窗轩,沒想到半個(gè)月后夯秃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年寝并,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了箫措。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衬潦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出植酥,到底是詐尸還是另有隱情镀岛,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布友驮,位于F島的核電站漂羊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏卸留。R本人自食惡果不足惜走越,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耻瑟。 院中可真熱鬧旨指,春花似錦、人聲如沸喳整。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽框都。三九已至搬素,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間魏保,已是汗流浹背熬尺。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谓罗,地道東北人粱哼。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像妥衣,于是被迫代替她去往敵國和親皂吮。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 本文為圓周率日特輯~ 簡介 圓周率π是一個(gè)圓的周長與直徑之比税手。即:π = C / d 蜂筹。它是一個(gè)無限不循環(huán)小數(shù),即...
    阿啊阿吖丁閱讀 1,380評論 0 0
  • 數(shù)學(xué)家在計(jì)算任何東西的近似值時(shí)芦倒,都會給出一個(gè)區(qū)間艺挪,像左手和右手一樣,把心愛的人擁抱在懷中。如果只給一側(cè)的值麻裳,那么就...
    aubell閱讀 9,191評論 0 3
  • 圓周率(Pi)是圓的周長與直徑的比值口蝠,一般用希臘字母π表示,是一個(gè)在數(shù)學(xué)及物理學(xué)中普遍存在的數(shù)學(xué)常數(shù)津坑。π也等于圓形...
    成功技術(shù)學(xué)院閱讀 501評論 0 1
  • 1.4圓周率π 每個(gè)人都知道 π 的值為 3.14....妙蔗,這是圓周周長和直徑的比率常數(shù),并且它自宇宙誕生一直在那...
    六度星辰閱讀 278評論 0 0
  • 有點(diǎn)空閑疆瑰,就忍不住鉆到數(shù)學(xué)里眉反,好像玩游戲上癮了。在此說幾塊穆役。 (1)數(shù)系的擴(kuò)張 正整數(shù)減法產(chǎn)生0和負(fù)數(shù)寸五,自然數(shù)(整...
    魏豐閱讀 1,496評論 0 1