打印

要是 -1

[复制链接]
10203|59
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xddzccn|  楼主 | 2008-6-17 15:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用简洁的代码,要求效率高! 写出 exp(x)
sin(x)
a^x
ln(x)
各种超越函数,不能调库函数!
语言不限 (C matlab  verilog .......)
领域不同 应用不同
处理器 当然最好是微处理器 单片机 ,当然也可以做仿真! 
要求精度高
出这个题没有标准答案,大家一起讨论讨论 !
希望大家踊跃发言阿
有人说这纯属数值计算,呵呵! 
把题目改了,数值计算难道就不比C  语言好玩

相关帖子

沙发
xddzccn|  楼主 | 2008-6-17 15:58 | 只看该作者

-1
-1<x<1

使用特权

评论回复

板凳
dld2| | 2008-6-17 16:07 | 只看该作者

晕一下

先看看

使用特权

评论回复
地板
grady1125| | 2008-6-17 19:35 | 只看该作者

不怕丑,大虾请指正

double exp(int x)
{
   int tx=x;   
   double b=1,c=1;
   while((1/b)>(1e-n))
   {
      c=c+tx/b;
      b=b*(b+1)
      tx=tx*x
   }
   return c;
}

使用特权

评论回复
5
IceAge| | 2008-6-17 20:59 | 只看该作者

除了楼上迭代算法外,这里有几个

taylor 展开式的快速计算:

http://www.musicdsp.org/showone.php?id=222

还有一个慢的:
exp(x) = (1 +x/n)^n , n 足够大

float t = 1 + x / 1000.0f;
float result = t;
for (int i=0; i<1000; i++)
  result *= t;

使用特权

评论回复
6
wlsui| | 2008-6-17 22:47 | 只看该作者

taylor 展开只适用于x∈(-1,1)的情况

楼主的x是整数情况下,是不能用taylor 展开的
应该没特别好的算法吧

估计楼主是自己碰到了问题,不好解决,就想出个出题目的方式,让大家一起思考

使用特权

评论回复
7
xddzccn|  楼主 | 2008-6-17 23:15 | 只看该作者

负无穷
 grady1125  taylor展开式收敛速度比较慢,在泰勒的展开式中
负无穷<X<正无穷
这个程序是对的,要考虑在嵌入式的程序执行效率
泰勒级数还涉及到了 很多浮点运算,除法 乘法 这些都会使效率降低,
能不能不使用浮点.
不知道坛子里面有没有 做过数值计算的
或者做过 FPGA的 数值计算的 。

使用特权

评论回复

8
xddzccn|  楼主 | 2008-6-17 23:38 | 只看该作者

ms 大家对这个玩意的兴趣不大,

ms 大家对这个玩意的兴趣不大,喜欢看看 ,回的人少呵呵!
大家一起来讨论讨论看看! 
能写的写几句,我感觉这个挺有用的,有想法咋就贴出来,
一起进步!

使用特权

评论回复
9
IceAge| | 2008-6-17 23:41 | 只看该作者

对于嵌入式,如果有约束条件,就不一样

exp(x) 的结果可能很大,但对于一些特殊用法,可以特殊对待。比如,温度估计:f(t) = K * exp(- t/Tc),则可以使用全 fixed-point,因为知道最大值,而且可以用定时迭代: 
 f(k) = f(k-1) + Ts/Tc * (x(k) - f(k-1))

使用特权

评论回复
10
xddzccn|  楼主 | 2008-6-17 23:49 | 只看该作者

定时迭代

定时迭代
能不能给个比较好的数学推导
谢谢!

使用特权

评论回复
11
xddzccn|  楼主 | 2008-6-17 23:52 | 只看该作者

要是 -1
要是 -1<X<1是不是算法会更简单一些.
x是整数 ms很麻烦!
 

使用特权

评论回复

12
IceAge| | 2008-6-18 00:40 | 只看该作者

迭代,首先要保证 函数是收敛的

如果 x > 0, 则 exp(x) = 1/exp(-x)

数学推导:
f = exp(x), where x < 0
微分:
df = exp(x) = f

假设迭代周期时间为 Ts, 把微分转换为差分:
(f(k) - f(k-1)) / Ts = f(k)
f(k)*(1 - Ts) = f(k-1)
f(k) = f(k-1) / (1 - Ts) = f(k-1) * K, K = 1- Ts

 

使用特权

评论回复
13
computer00| | 2008-6-18 00:54 | 只看该作者

哈哈~~~俺最怕算术了……见了就头晕……

使用特权

评论回复
14
xwj| | 2008-6-18 07:39 | 只看该作者

呵呵,偶也全忘光了,想半天都没想出exp中的e是什么意思...

最后还是上网找了一下才反应过来e是自然数的阶乘的倒数和:-)

使用特权

评论回复
15
fsaok| | 2008-6-18 08:15 | 只看该作者

看到e就想起e-book

还有e妹子,

使用特权

评论回复
16
lpf336| | 2008-6-18 08:44 | 只看该作者

顶一下  

使用特权

评论回复
17
xddzccn|  楼主 | 2008-6-18 11:02 | 只看该作者

保证收敛

保证收敛 是不是和 Ts 有关系阿,
f(k) = f(k-1) / (1 - Ts) = f(k-1) * K, K = 1- Ts
这个TS 不同 迭代出来的 f(k)就有所不同!
现在变成了一个数学问题,主要设计一个迭代算法 逼近 指数函数
那先就解决数学问题吧! 

使用特权

评论回复
18
gyt| | 2008-6-18 11:56 | 只看该作者

找一本讲计算方法的书

看看就行

使用特权

评论回复
19
xddzccn|  楼主 | 2008-6-18 18:44 | 只看该作者

COR

大家看看 这个算法,可以实现 指数函数的运算!
很容易用c来实现!

使用特权

评论回复
20
xddzccn|  楼主 | 2008-6-18 18:45 | 只看该作者

CORDIC

CORDIC

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

550

帖子

0

粉丝