Re: [請益] Pow function source file
看板Prob_Solve (計算數學 Problem Solving)作者EdisonX (卡卡獸)時間10年前 (2014/06/21 05:26)推噓0(0推 0噓 0→)留言0則, 0人參與討論串2/2 (看更多)
雖已是舊文了,不過我所知的大多是版友們不吝提供的,
手邊有整理過一些資源,供參考。
※ 引述《kingzero (神武信魔)》之銘言:
: 大家好
: 我的程式需要使用到Pow這一個function.但是我的基數是固定2.
: 也就是說我是固定 pow(2,y); y:floating
: 因為我的ROM size有限,所以我不想include math.h.用了會讓我的記憶體少一半.
: 請問有人知道哪裡可以找pow這一個函數的sorcue file嗎?
^^^^^^^^^^^
fdlibm : http://www.netlib.org/fdlibm/ , e_power.c
不過很可怕的是,這個函式底層的 source code 恐怕不是想像中那麼容易理解。
像是 5.99999999999994648725e-01 大概完全不會想知道怎來的..
( 恕我實在沒天份推導一堆 節點 , 係數 怎來的, 也不會用 )
any way, power 函式大致上概念做法 "可能" 是這麼做
令 pow(a,b) = a^b = S , 左右同取 ln
b * ln(a) = ln(S) , 左右同取 exp
exp( b * ln(a) ) = S
換句話說,pow 函式在底層上可能是先呼叫一次 log , 再呼叫一次 exp 達成的,
然後今天你的 a 已固定是 2.0,可以直接帶入當常數使用,令 b * ln(2.0) = c
問題就變成求 exp(c) 是多少,我不知道上述整個流程 compiler 是不是可以
聰明到直接化簡,但直接求 exp 應會較易,所以你要做的反而變成了去找
e_exp.c , 然後尷尬的事情又來了,打開 e_exp.c 還是發現一堆 macro ,
__HI , __LO , 嗯 , 是做 IEEE754 分析 , 我不知道你的情況是用定點數
比較合適還是用浮點數比較合適。如果還是想自己拼的話我有拼過簡易版的,
參考 http://edisonx.pixnet.net/blog/post/83426509 , 用的是 taylor series ,
收斂效能差。
1. cmath / math.h 實作提要紀錄 http://edisonx.pixnet.net/blog/post/88987513
2. [C數] 優化版math.h http://edisonx.pixnet.net/blog/post/36563887
中間可紀錄幾個數值點做為計算的初值,其他的就不多說了。
: 我打算自己試者改改看.
~ 加油 ~
: 我的CPU是32bit或者16bit.
: Compiler是ANSI C.
--
~ 這輩子與神手無緣
我只好當神獸了 ~
卡卡獸
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.165.160
※ 文章網址: http://www.ptt.cc/bbs/Prob_Solve/M.1403299582.A.2B3.html
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Prob_Solve 近期熱門文章
PTT數位生活區 即時熱門文章