高精度計算器 目前圓周率已經(jīng)達(dá)到10萬億位了,為何超級電腦還在不停地計算圓周率?計算圓周率有什么用處?
目前圓周率已經(jīng)達(dá)到10萬億位了,為何超級電腦還在不停地計算圓周率?計算圓周率有什么用處?圓周率π是周長和直徑的比值,在物理和數(shù)學(xué)中有著十分重要的地位,但圓周率在一般應(yīng)用中取3.14就夠了,在高精度的航
目前圓周率已經(jīng)達(dá)到10萬億位了,為何超級電腦還在不停地計算圓周率?計算圓周率有什么用處?
圓周率π是周長和直徑的比值,在物理和數(shù)學(xué)中有著十分重要的地位,但圓周率在一般應(yīng)用中取3.14就夠了,在高精度的航天和其他領(lǐng)域, 圓周率取到15或者16位就足夠用了,精度完全能滿足需要,圓周率取的越“長”,精度就越高,用40位圓周率計算整個可觀測宇宙大小的話,誤差只有半個氫原子。
人類文明很早就開始求圓周率了,但是人工方式終究是費時費力進(jìn)展緩慢的,1949年人類第一臺計算機(jī)ENIAC用70個小時把圓周率算到了2017位,此后人類的圓周率位數(shù)便開始了爆炸性增長,1973年圓周率突破了100萬位,好事者還把它印成了書,1989年突破十億,1995年突破64億,目前圓周率位數(shù)已經(jīng)達(dá)到了1000萬億位以上了,現(xiàn)在的圓周率唯一的作用就是測試計算機(jī)性能,圓周率的位數(shù)已經(jīng)越來越取決于計算機(jī)的開機(jī)時間了。
人類雖然已經(jīng)無法和計算機(jī)比了,但也找到了關(guān)于圓周率的另一個活動,目前人工背誦圓周率的記錄的保持者是呂超,他用24小時背誦了圓周率小數(shù)點后67890位,但有人吹牛說自己對圓周率可以倒背如流...
關(guān)于圓周率還有一個有趣的事實,那就是正規(guī)數(shù),圓周率小數(shù)點后的每一個數(shù)字的出現(xiàn)概率都是相同的,這說明圓周率中包含過去現(xiàn)在和未來的所有數(shù)字組合,我們每個人都身份證號和銀行卡密碼都能在圓周率中被找到,但我們可能無法把它們提取出來。
早在1909年就有人提出了“無限猴子打字機(jī)”想法,意思是說如果無限只猴子在無限多的打字機(jī)上面亂敲亂打,那么它們早晚有一天能打出世界上所有的文學(xué)作品,甚至是還沒有問世的文學(xué)作品,劉慈欣當(dāng)年在《詩云》中描述了一個宇宙神級文明的故事,這個文明在最后為了打敗李白而把古往今來所有的詩都寫了出來,但寫法只是將漢字的所有排列組合都試了一遍而已。
為什么Python不需要定義int double char等類型且可以直接高精度算法,而C 需要?
這是python比c“高級”的一個特性,使用變量之前不需要定義變量的類型。這讓初學(xué)者感覺非常方便,但對于“老碼農(nóng)”來說,卻存在很大的一個坑,只有在實際項目中使用過的人才深有體會。
以前我學(xué)c的時候,也感覺定義一個變量,非要先給他定義一個類型非常麻煩,因為往往我既然使用一個變量,那么我就敢保證不會在他是什么類型上出錯,感覺先定義他的類型很多余。
直到我做了幾個項目之后才發(fā)現(xiàn),使用變量前先定義他的類型,是多么的有必要。
最常見的例子就是在實際的項目中,為了便于之后的維護(hù),那么變量名都應(yīng)該有一個便于理解的名稱,比如teacher,中文意思是老師,那么我會用這個詞作為定義老師的一個變量。
但如果在之后的引用中,你寫成techer,在python中是不會報錯的。python會把他定義為一個新的變量,這會導(dǎo)致如果程序沒運行到這一行,你永遠(yuǎn)不知道他錯了?;蛘哌\行到這一行,程序可以正常運行,但永遠(yuǎn)拿不到正確的結(jié)果。
這會讓你花大量的時間來排查,這個時間遠(yuǎn)遠(yuǎn)要比在使用變量前定義他是int還是str要多得多!
而在c中,這個變量沒有被定義過,當(dāng)程序進(jìn)行編譯的時候,就會報錯。這可以省去非常多不必要的麻煩。
有時候不是你仔細(xì)就不會出錯,畢竟在項目開發(fā)中,你還需要和別人配合寫代碼,你不能保證別人不寫錯。
python的語法雖然比c簡單,但不一定簡單都是好的,對于程序來說,“規(guī)則”比簡便更高效。
求助高精度除高精度的算法?
高精度除法就是高精度減法的深一層次,其實高精度的思想就是我們平時算題時列豎式一樣,比如加法從右到左一位一位的算大于10就進(jìn)位,減法一樣,只是如果碰到了不夠減的情況把加法的進(jìn)位的變量變成借位的變量(例如t為此變量,加法在執(zhí)行時,a,b兩個變量為兩個數(shù)的同一位上的兩個數(shù),若a b>10 則t-->1 如果是減法 若a-b<0 t--> -1 每一次運算都要加上t當(dāng)然做了判斷后要把哪一位相加得到的答案進(jìn)行處理(加法-10 減法 a 10-b)。 至于你的這道題我也不知道應(yīng)該怎么處理,但是我認(rèn)為用高精度會不會太復(fù)雜了,一般的求最大公約數(shù)和最小公倍數(shù)用輾轉(zhuǎn)相除法,我想這道題應(yīng)該是這種方法的改進(jìn)形式是最好的方法。