看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
tj386: 可以參考glibc都是open source,有興趣可以慢慢trace 01/14 22:27
EdisonX: glibc 的 math.h 幾乎看不到 source, 比較推 fdlibm 01/14 22:39
EdisonX: http://www.netlib.org/fdlibm/ 01/14 22:39
EdisonX: 另在 c 裡的 math.h , 沒記錯的話有些是直接呼叫組語做的 01/14 22:40
EdisonX: 至於原理的話-都是數值分析,而且方法不只一種。像求 sin 01/14 22:41
EdisonX: 我所知的方法大概就三種了。想自己做玩具級(速度慢)的話 01/14 22:41
EdisonX: http://edisonx.pixnet.net/blog/post/88987513 參考下 01/14 22:42
SMpeng: 太感謝了! 來研究看看XD 01/14 22:45
suhorng: 像是..x86 有 fsin, fcos 組語指令XD 01/14 22:55
LPH66: 還有一個 fsincos 可以一次做完, 補一個除就變 tan 了 01/15 00:04
hidog: 有學過微積分就能實做了 剩下是精確度還有效率問題 01/15 16:06
wenyonba: 樓上你也跑來這閒晃啊 XD 01/15 16:14
hidog: 因為是工程師阿XD 01/15 16:17
Killercat: 這邊除了新手 學生以外就只剩下工程師跟攻城獸了吧... 01/15 17:24
amozartea: exp用泰勒展式做就好了 01/16 11:05
tubbysong: Double 是雙精倍浮點數,被用表現「自然數」計算 01/16 20:57