對數, sin, cos和 tan 表的數字, 是如何被尋找出來的?

2007-05-16 4:49 am
對數, sin, cos和 tan 表的數字, 是如何被尋找出來的?
更新1:

And then how about log??

回答 (2)

2007-05-16 7:47 am
✔ 最佳答案
一個幾好的答案,在這裏補充一些有關係資訊。

Taylor Series (泰勒數列) 的壞處有2.

1.) 計算較慢,它需要計算很多乘法,和
2.) 誤差較大,尤其是x 愈大誤差愈大。

現成最快的算法計算三角比的方法是CORDIC.

詳細的算法可在這裏找到。
http://www.cnmat.berkeley.edu/~norbert/cordic/node4.html

這個算法其實不難,想像一條長度是1的線一直在左轉右轉直到接近你想要的角度,只要任何時候都能計到 x - coordinate,就能算到sine的值。

怎轉呢,數學上,某點(x,y) 由圓心起轉 p 度就是 (x', y')
x' = x cos(p) - y sin(p) = cos(p) [ x - y tan(p) ]
y' = y cos(p) + x sin(p) = cos(p) [ y + x tan(p) ]

那麼只要記著一個表,其中有大有少的角度的tan和cos值,就可以慢慢接近它了.
如果我有tan(5)和tan(2),就可以轉到tan(2), tan(3), tan(4), tan(5), ....

網址裏2^i 和 K factor 之類的數只是用來優化算法,實際上對理解沒甚麼作用。

當然表裏最開始的數總是要計的, 這些可以使用taylor series做即使慢也沒關係的預計算。因為只需要計一次就永遠放在表裏。

由於sin, cos, tan 的數值有時會是超越數,它的值求遠也沒有算完的一天,我們只要算到足夠的精準度即可。

log 是一個完全不同的故事,計算log的話,上面的答案只能算x > 0 的時候的答案,如x 小於0,(i.e. log y, y < 1) 則必須用log(y) = -log(1/y) = -log(1 + p), p > 0 來算。同樣地,當x的數值是大的時候,誤差會很大。

最快的計log的方法是使用Arithmetic Geometric Mean 來計。

兩個數字的Arithmetic Geometric Mean 是這樣計的:

(A', B') = ((A + B)/2, sqrt(AB))
(A'', B'') = ((A' + B')/2, sqrt(A'B '))

不停咁計直到A' 非常接近 B'
log(x) = pi / 2 AGM(1,4/s) - m log 2.

where s = x2^m, pick big m.

這一份學術文章詳細解釋了原因,但很困難,我自己也沒全看懂。
http://cr.yp.to/arith/logagm-20030717.pdf

2007-05-16 22:56:09 補充:
其實我自己都未明晒,尤其係AGM方面的。
參考: Numerical Analysis
2007-05-16 5:32 am
首先將 sin x用Taylor series 轉為 polynomial function of x
sin x = x - x^3/3! + x^5/5! - x^7/7! + ...
cos x = 1 - x^2/2! + x^4/4! - x^6/6! + ...
tax x = sin x / cos x

note that for sin x, x is in radian
然後再將數代進去

2007-05-15 21:54:57 補充:
similarly, for natural logarithm, there is expression in polynomial ln(1 + x) = x - x^2/2 + x^3/3 - x^4/4 + ...for log with base 10, you may uselog10 x = ln x / ln 10參考資料:http://en.wikipedia.org/wiki/Logarithm


收錄日期: 2021-04-23 16:58:07
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070515000051KK03910

檢視 Wayback Machine 備份