[問題] 數學函式的實作

看板C_and_CPP作者 (peng)時間9年前 (2015/01/14 22:17), 編輯推噓6(6010)
留言16則, 10人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) gcc 補充說明(Supplement): 其實應該算閒聊XD 這學期學了C,大致上還OK,不過剛剛突然有點好奇,在標準程式庫的math.h當中, 那些用到double的函數大致上是用什麼樣的方法實作的阿? 比方說 double pow(double base, double exponent); double log(double x); double exp(double x); 如果想要自己寫一個這樣的函式是不是有點困難? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.28.238 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1421245032.A.68B.html

01/14 22:27, , 1F
可以參考glibc都是open source,有興趣可以慢慢trace
01/14 22:27, 1F

01/14 22:39, , 2F
glibc 的 math.h 幾乎看不到 source, 比較推 fdlibm
01/14 22:39, 2F

01/14 22:39, , 3F

01/14 22:40, , 4F
另在 c 裡的 math.h , 沒記錯的話有些是直接呼叫組語做的
01/14 22:40, 4F

01/14 22:41, , 5F
至於原理的話-都是數值分析,而且方法不只一種。像求 sin
01/14 22:41, 5F

01/14 22:41, , 6F
我所知的方法大概就三種了。想自己做玩具級(速度慢)的話
01/14 22:41, 6F

01/14 22:42, , 7F

01/14 22:45, , 8F
太感謝了! 來研究看看XD
01/14 22:45, 8F

01/14 22:55, , 9F
像是..x86 有 fsin, fcos 組語指令XD
01/14 22:55, 9F

01/15 00:04, , 10F
還有一個 fsincos 可以一次做完, 補一個除就變 tan 了
01/15 00:04, 10F

01/15 16:06, , 11F
有學過微積分就能實做了 剩下是精確度還有效率問題
01/15 16:06, 11F

01/15 16:14, , 12F
樓上你也跑來這閒晃啊 XD
01/15 16:14, 12F

01/15 16:17, , 13F
因為是工程師阿XD
01/15 16:17, 13F

01/15 17:24, , 14F
這邊除了新手 學生以外就只剩下工程師跟攻城獸了吧...
01/15 17:24, 14F

01/16 11:05, , 15F
exp用泰勒展式做就好了
01/16 11:05, 15F

01/16 20:57, , 16F
Double 是雙精倍浮點數,被用表現「自然數」計算
01/16 20:57, 16F
文章代碼(AID): #1KjdfeQB (C_and_CPP)