怎樣手算π次根號5

前段時間看了一個手算開平方的視頻,感覺還是不夠通用。
說起通用,首先把我們要計算的根式通用化。我們常見的平方根、立方根,或者叫二次方根、三次方根,其實都可以寫成冪函數(shù)的形式。
說一個日常的小習(xí)慣。大家如果平時用Excel的話,遇到計算平方根的時候會怎么做呢?Excel內(nèi)置的函數(shù)中SQRT()就是計算平方根的。如果計算根號2,就是SQRT(2)。但是我平時喜歡寫成冪函數(shù)形式,也就是a ^ x的形式。根號2就是2 ^ 0.5 。
※這里說指數(shù)函數(shù)也行。函數(shù)變量是底數(shù)叫冪函數(shù),變量是指數(shù)叫指數(shù)函數(shù)
個人覺得,根式的冪函數(shù)形式寫起來更順暢,做一些規(guī)則也更方便。
?
回到主題。我們現(xiàn)在需要手工計算π次根號5 。
我之前寫過一篇用泰勒展開式手算三角函數(shù)的,這回也還是用老辦法。以e(自然對數(shù)的底)為底數(shù)的指數(shù)函數(shù)有一個比較簡潔的泰勒展開式。
想用這個公式就必須要把冪函數(shù)轉(zhuǎn)換成以e為底的指數(shù)函數(shù),那就套個換底公式。
那么我們要計算的就是:
那么問題來了,對數(shù)怎么算呢?ln(5)怎么計算。
其實我們不妨再套一次泰勒展開。
不過這個式子有一個前提,x的范圍必須是-1~1之間(可以等于1,不可等于-1)。
所以這個方法至多計算到ln(2)。算ln(5)就超范圍了。但是我們可以用對數(shù)的特性解決這個事情。5=2×2×1.25,那么:
ln(1.25)不就能算了嗎。
好了,現(xiàn)在只要把n取的足夠大,就能得到我們想要的精度的結(jié)果。老辦法我們用Excel內(nèi)置的VBA來實現(xiàn)這個新函數(shù),看看n與精度的關(guān)系。代碼如下:
Function PowTay(a As Double, x As Double, n As Integer) As Double
Dim i As Integer
Dim at As Double
Dim an As Integer
Dim k As Double
Do While a > 2
?an = an + 1
?a = a / 2
Loop
at = an * Log(2)
a = a - 1
For i = 1 To n
?at = at + ((-1) ^ (i + 1)) * (a ^ i) / i
Next i
x = at * x
For i = 0 To n
?k = Application.WorksheetFunction.Fact(i)
?PowTay = PowTay + (x ^ i) / k
Next i
End Function
函數(shù)的名字叫PowTay,有3個變量。a是底數(shù),x是指數(shù),n是泰勒展開式中n的取值。
這里為了圖方便,ln(2)的值就當常數(shù)直接用了。
與工作表里不同,VBA里的對數(shù)函數(shù)Log()是以e為底的,相當于ln()。如果要用其他底數(shù)的話可以套個換底公式。
Application.WorksheetFunction.Fact(i)是調(diào)用工作表里的階乘函數(shù)FACT()。
我們可以計算一下n取1到10時,計算值與實際值得偏差,代碼如下:
Sub text2()
Dim a As Double
Dim x As Double
Dim n As Integer
Dim s As Double
a = 5
x = 1 / Application.WorksheetFunction.Pi()
s = a ^ x
For n = 1 To 10
?Cells(n + 1, 1).Value = n
?a = 5
?x = 1 / Application.WorksheetFunction.Pi()
?Cells(n + 1, 2).Value = s - PowTay(a, x, n)
Next n
End Sub
因為函數(shù)運算的時候a和x的值會改變,所以每次運算前要重新賦值(也可以把函數(shù)優(yōu)化一下)。運行結(jié)果如下:

通常我們有個n=4的精度其實也差不多了。所以就取n=4,寫成可以手算的形式。
π和ln(2)就取到小數(shù)點后5位。結(jié)果取小數(shù)點后4位。
π=3.14159,ln(2)=0.69315
結(jié)果是1.60928
1.60928/3.14159是0.51225
這樣就變成有理數(shù)加減乘除的形式了。
計算結(jié)果是1.6687 。
?
這個方法具有很好的普適性,即便帶著無理數(shù)也能計算。你也可以試試看計算5的π次方會是什么結(jié)果。
當然,這個方法的弊端就是計算結(jié)果數(shù)值越大,n的取值就必須大一些才能滿足精度。我試了一下計算5的3次方,n要取到13才能讓結(jié)果大于124.9 。