還沒發明計算機時,例如sin、π、根號389等之類的數是如何計算的?
(文/方弦)
當年沒有發明計算機的時候,計算是件苦差事。像三角函數、圓周率、根號這樣的東西,計算起來很不方便。
但不方便不代表沒有辦法,只是麻煩一點。用一點數學的話,這些都不是問題。
我們挑幾個例子來講講。先從簡單的開始。
根號算是最簡單的了。我國古代就有筆算開平方的方法,在比較老的數學課本上也有教授,其實就是利用完全平方公式來逐步逼近平方根。另一種方法是巴比倫人發明的方法,又叫海倫法。如果要對n開方的話,先估算一個大概的值x,然後計算(x+n/x)/2,這個值會比x更靠近n的平方根。用新的值代替x再次進行計算,這樣不停重複下去,就能越來越接近n的平方根。
當然,有時候我們需要計算開k次方根,甚至是任意實數的實數次方。這時候就要用到對數了。對數是1614年由納皮爾開始倡導的。如果精度不需要非常高,那麼利用對數尺或者事先編纂好的對數表和反對數表就可以了。比如說要計算a^b,我們知道a^b = 10^(b lg a)。那麼,只要先查表得出a的對數,乘以b,再用結果來查反對數表,就能得到答案。這些表編纂起來還是需要相當的計算量的,所以在沒有計算機的當年,編纂對數表和反對數表是繁瑣但重要的工作。如果需要高精度的話,那就要利用公式了。直接利用對數的泰勒公式不是不行,但是收斂比較慢,一般會利用ln(x)=2arctanh((z-1)/(z+1))這個關係,然後再對arctanh進行泰勒展開來計算。
三角函數的原理也相同,它的重要性在航海領域中甚至超過了對數。三角函數一般來說利用適當的泰勒展開,都是比較容易計算的,因為它們大體上類似指數函數,而指數函數的泰勒展開收斂得很快,所以計算起來也相對方便。反三角函數比較難以計算,因為它們大體上類似對數函數,而對數函數的泰勒展開收斂比較慢。以往也有專門編纂的三角函數和反三角函數表,可以供較低精度的使用。高精度的話,還是利用泰勒展開來計算。
至於圓周率,我們熟悉的有劉徽的割圓術,「割之彌細,所失彌少,割之又割,以至於不可割,則與圓周,體而無所失矣」。這當然是光輝的歷史,割圓術創下了計算圓周率到小數點後第7位。但實際上割圓術的收斂速度不算特別快,跟筆算開平方的速度類似。真正開啟了計算圓周率大門的,還是上面所說的,收斂更快的三角函數和反三角函數。利用所謂的梅欽類公式,這類公式的代表是以下的梅欽公式:
pi/4 = 4arctan(1/5) - arctan(1/239)
用反三角函數來表達圓周率,我們可以更有效地進行計算,因為即使反三角函數的泰勒展開收斂得不算快,但在梅欽類公式的情況下,比很多方法都要快。這是因為在arctan(x)的泰勒展開中,每一項都有x^k,當x很小的時候,每一項會以指數形式很快變得非常小,而這正是梅欽類公式中的情況。利用這類公式,19世紀的威廉·香克斯花了十五年,計算了圓周率後的707位。雖然後來發現只有529位是正確的,但這也是了不起的成就。
回到現在,我們有了計算機。但計算機計算這些數學函數時,或多或少都沿用了類似的計算方法。計算機並不是魔法,它畢竟只是人類智慧的延伸。沒有計算機,人原則上也能做到同樣的事情,不過就是要花很多時間而已。
在計算機發明前或普及前,人們在計算和應用無理數和超越數時,一般都是通過查《數學用表》,來獲得較為準確的數據(精度一般可達10的負4次方)。《數學用表》有專門出版的,內容包括:根號、指數、對數、三角函數等等。另外在當年我們在計算精度要求不高時,還常用計算尺來計算各種函數乘積也很方便,只是精度不高且容易搞錯小數點位置,自出現計算器就很快被淘汰了。
人類計算圓周率開平方等等必定是先於計算機的。計算機只是運用固有的演算法在一定時間內快速運算。打個比方,是人類先學會一加一等於二,然後才錄入計算機,計算機只是遵循這一演算法,計算機本身不會計算。
推薦閱讀:
※液體的10個不可思議科學使用技巧
※推廣 | 生命科學中的R語言如何施展拳腳?
※年輕的數學家們都去哪裡了?
※10大糗圖:發現一份關於顏值的科學解釋!來對號入座吧
※吃食海帶的科學