計算機語言中是如何處理sin函數的?

C語言中的Math.h庫中有sin函數,那麼它到底是如何實現的呢?是用泰勒展開嗎?如果是的話具體是展開到第幾項,對比一下java,OC,python,php,C++等語言,他們用的sin函數有什麼不同嗎?


補充一點,x86處理器是有直接運算sin的指令的:


似乎它對不同的輸入x使用不同的演算法

不同的語言和平台也可能用不同的演算法和實現

比如C (參看其中TAYLOR_SIN宏, 當泰勒被使用時, 它算到9次加近似余項)

sourceware.org Git - glibc.git/blob - sysdeps/ieee754/dbl-64/s_sin.c

至於matlab,本以為會比較精細(但其實論精度,記得matlab在數學語言中並不是最關心的)。也略知matlab是proprietary,所以它的庫肯定不會公開,但也算找到這個帖,

MATLAB Central - cosine function

裡面有人回答說matlab用的是FDLIBM庫

http://www.netlib.org/fdlibm/s_cos.c

這個文件好像下載有困難,有人提到它可能用了泰勒到14次方計算cos。

關於java則有這個回答,貌似對sin是13次。

How is sine implemented in Java?

對於定點數的三角計算還有一個演算法叫CORDIC,其大意是從0~90度之間折半迭代到目標角度,只要四則和求根運算和查表且精度可控。

CORDIC - Wikipedia

不過不知道這個用得廣泛與否,但好像被幾次提到。


昨天我室友才問我sin(e)是怎麼算出來了,我說用泰勒展開用插值法算?_?


不會啊 為啥老讓我答這種題


瀉藥。不懂具體實現,不過數學計算一般都是通過簡單組合、公式進行計算的,比如你說的泰勒公式,通過數列、級數、計算冪等方式進行分解,也有通過三角函數進行計算的等等。不同語言實現方式應該是大致相同的。


謝邀,可惜我不懂。。。


推薦閱讀:

C++中為什麼vector的讀寫速度比原生數組快?
有沒有簡單一點的Python小例子小項目?
如何用通俗易懂的語言解釋《Flask 框架作者希望看到的 Python》到底在說什麼?
離散數學中的閉包和計算機語言中的閉包有聯繫嗎?
程序員內心的強大有哪些體現?

TAG:數學 | Java | CC | 計算機語言 |