2013-10-22 69 views
2

我被要求使用C++計算sin(x)的值,而不使用任何數學庫。 我將如何去接受他們的入門(比如說2弧度),並在2處給他們返回一個sin函數的值?無罪計算罪

謝謝。

+3

這個問題似乎是題外話題,因爲它是關於數學 – John3136

+0

@ John3136:好的工作。 –

+0

[三角函數如何工作?]可能的重複(http://stackoverflow.com/questions/345085/how-do-trigonometric-functions-work) –

回答

7

一種選擇是使用泰勒級數的正弦得到一個近似:

的sin(x)= X - X /3! + x /5! - x /7! + x /9! - ...

如果評估該多項式的第一五六而言,x是小,你可能會得到的SiNx一個非常好的近似。您可以通過將其保持在範圍內來保持x很小( - π,+ π)。

有很多更好的方法可用。其中一個標準就是使用CORDIC,這是一套經過優化的方法,可以快速而準確。

希望這會有所幫助!

+0

非常好,謝謝。我完全忘記了使用泰勒系列。 – Axxelsian

+0

泰勒級數是一種很差的方法來近似函數,因爲它們收斂緩慢,偏離中心點的誤差越來越大。 [Minimax多項式更好。](http://stackoverflow.com/questions/12678277/in-what-situation-would-a-taylor-series-for-a-polynomial-be-necessary/12695691#12695691)一個簡單的核心'sin'實現是[here](http://stackoverflow.com/questions/11261170/c-and-maths-fast-approximation-of-a-trigonometric-function/11575574#11575574)。 –

1

您可以使用Taylor Series來查看數值近似值。特別少,你可以在廣義Taylor/MacLaurin Series

讀了簡而言之:

sin(x) = x − x^3/3! + x^5/5! − x^7/7! + x^9/9!

通常你可以把它擴展到幾個方面和它在合理的誤差範圍。誤差呈指數級下降,所以即使是4,5或6項,您也會得到準確的結果。條款越多,越準確。

這是計算機可以評估三角函數,積分和許多其他複雜公式的一種方法。我想,無論誰問你,目的都是爲了理解計算機處理這些功能的方式。

+0

[沒有好的標準數學庫使用泰勒級數。](http://stackoverflow.com/questions/12678277/in-what-situation-would-a-taylor-series-for-a-polynomial-be-necessary/12695691 #12695691) –

+0

@EricPostpischil夠公平的......我改變了我的措辭。 –