Re: [请益] Pow function source file

楼主: EdisonX (卡卡兽)   2014-06-21 05:26:14
虽已是旧文了,不过我所知的大多是版友们不吝提供的,
手边有整理过一些资源,供参考。
※ 引述《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.

Links booklink

Contact Us: admin [ a t ] ucptt.com