還沒發明計算機時,例如sin,,π,根號389等之類的數是如何計算,特別是在一些計算量大或需要精準的領域?

數學 計算


如果題主還是初中生或者高中生,要贊一個,這是一個好問題.我初中時也有過同樣的問題,沒計算機時怎麼求,計算機又是怎麼求的,當時找了很多書才大概了解了一下,上了大學才算比較明白這個問題.

不過問題的解答要用到一些大學的數學知識.

sin

sin的值是通過泰勒展開來算的

雖然有無限項,但我們可以只用前面三項來近似,變成這樣

O那個項我們忽略掉.

計算器算一下Sin(1) ~= 0.841471

上面的式子= 1- 1/6 + 1/120 ~= 0.841667

長得比較像是吧.

Pie

這個我就不說了,高中的科普讀物應該有,問祖沖之

圓周率_百度百科

開平方

這種一般可以牛頓法算出來,具體參考

Methods of computing square roots

我摘一段

或者看Matrix67: My Blog ,求的是平方根倒數,但原理是一樣的.如何提高精度?多算幾次就好了.演算法的收斂性是可以保證你運行次數越多越精確的.

如何提高運算速度?用空間換時間,把計算先寫到一個表上,用的時候再查表就好了.


托勒密的弦表是用托勒密定理計算的,托勒密用它推導出了和差公式與半形公式,編製了弦表。

古希臘時候的開平方是用「巴比倫演算法」計算的,基於迭代 x_{n}=frac{1}{2}left(x_{n-1}+frac{S}{x_{n-1}}
ight)approxsqrt{S}

納皮爾的對數表實際上是「指數表」,他計算的是能滿足方程 N=10^7(1-10^{-7})^L的(N, L) 對。


實踐中,有人編了正反對數表,正反三角函數等等存在....

足夠蛋疼可以考慮差分機


π至少不需要太精確的計算,據說只算到小數點後40位,即使用來算銀河系半徑,誤差也不過毫米級。


上面的答案談到了泰勒級數,牛頓法等,我想題主還會想問在沒有泰勒級數和牛頓法之前人們是怎麼算正弦和開根號的,我想的方法比較粗暴,就是直接用定義。

比如三角函數和圓周率都來自於幾何,還記得初中sinθ是怎麼定義的嗎?

sinθ=對邊/斜邊,所以你只要用量角器畫出一個角,然後構造個直角三角形,量一下求出比就可以了。為了減少誤差,你可以多做幾個圖,多量一下。

還有些比較特殊的角的正弦值是直接可以用和差倍辦公式算出來的,比如1/2=sin30o=sin(2×15o)=2sin15ocos15o =2sin15o√(1- 2sin15o),這樣解一個一元三次方程就可以求出 sin15o是多少。

初中只學了θ在90o內的,高中推廣到任意角度了,可實際上把所有角度都可以化成90o內的。

至於圓周率,定義就是周長/直徑,用祖沖之的割圓法可以算。

我比較熟悉的是怎麼算√2,其實初中教材就有。因為按照定義,如果x2=2,那麼x=√2,用夾逼法就可以無限接近√2了。 過程如下:

∵12=1,22=4, ( √2)2=2 ∴1< √2<2; ∵1.52=2.25>2 ∴1< √2<1.5;

∵1.252<2, ∴1.25< √2<1.5;

......

這樣一直算下去就會越來越接近,現在編程也能算。


我們讀初中的時候學校還發了一本對數表,可以查對數,題主說的三角函數之類的應該都有對應的表可以查的。至於開根號,貌似初中數學課本上教了如何手工算,挺繁瑣的我記得。

關於圓周率的計算,方法非常多啊。最簡單的是使用正多邊形來算。比如在畫一個3600邊的正多邊形,把這個正多邊形切成3600個等腰三角形,算出底邊的長,乘以3600再除以直徑,就得出了接近圓周率的值,祖沖之就是用這種方法算出到小數點後6位。


泰勒


推薦閱讀:

長期大量管理圖片的最好方法是什麼?
HTTP協議中chunk的應用場景?
如何評價英特爾 2017 年 8 月 21 日發布的第8代酷睿處理器?
王垠比我們強在何處,為什麼他能找到ABC女朋友?

TAG:極客Geek | 演算法 | 計算機 | 科學史 |