電腦是通過什麼公式計算出三角函數的?

LSty

(其實是用的cordic算法,但稍複雜,說一個容易理解的)

級數。

以上就是計算各種三角函數的公式。

什麼是級數?級數就是按照一定規律,把一串的數字累加起來的函數。有一些級數,一直加啊加啊加,加到最後,會無限接近某一個值,這個值也就是這個級數和的極限,有極限的級數就是收斂的級數。

對於複雜的,沒辦法直接算的函數,計算機處理起來往往都是把這個函數先轉化成一個極限為該函數的級數,然後計算。

值得注意的是,雖說理論上講,級數需要累加到無窮多項才能和其極限“無窮接近”,但實際上我們也不需要這麼的接近。以sin x為例:

sin1 = 0.8414709848079

(注:這裡的1是弧度制的1,不是角度制的1°。弧度制,1 ≈57.32484076°)

用級數計算:

一項: 1 = 1

兩項:1 - 1/6 = 0.83333333

三項:1 - 1/6 + 1/120 = 0.841677777

四項:1 - 1/6 + 1/120 - 1/5040 = 0.841468254

五項:1 - 1/6 + 1/120 - 1/5040 +1/362880 = 0.8414710097

這才計算了5項,結果就已經精確到了小數點後8位。如果繼續計算,精度還會提高。

不僅僅是三角函數,還有很多其他複雜函數也是利用級數計算的。


IvanZhu

三角函數等價轉換成極數數列表示,電腦計算三角函數是通過調用api庫函數或類的方法進行的,底層應是採用迭代算法,在精度範圍內計算出極數數列結果,具體實現可不用管,只需傳入正確參數,然後調用函數或方法即可得到正確結果


分享到:


相關文章: