計算機語言中是如何處理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》到底在說什麼?
※離散數學中的閉包和計算機語言中的閉包有聯繫嗎?
※程序員內心的強大有哪些體現?