作者EdisonX (卡卡兽)
站内Prob_Solve
标题Re: [请益] Pow function source file
时间Sat Jun 21 05:26:14 2014
虽已是旧文了,不过我所知的大多是版友们不吝提供的,
手边有整理过一些资源,供参考。
※ 引述《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://webptt.com/cn.aspx?n=bbs/Prob_Solve/M.1403299582.A.2B3.html