首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CORDIC计算[-1,1]以外的数字的指数?

如何使用CORDIC计算[-1,1]以外的数字的指数?
EN

Stack Overflow用户
提问于 2015-09-05 10:47:57
回答 1查看 1.8K关注 0票数 1

我不能理解使用CORDIC算法计算范围[-1,1)之外的数的指数背后的数学(实际上我不确定使用CORDIC计算exp的好范围是什么,在某些地方我读到- pi/4,pi/4,在其他地方我读到[-1,1))。谁能举个例子?

我在http://zone.ni.com/reference/en-XX/help/371599G-01/lvfpga/ht_exponential/上读到了以下声明

"x必须在[-1,1)范围内。若要在x超出此范围时计算exp(x),请找到整数q和实数r,其中r在[0,ln(2))范围内,使得x=q×ln(2) +r。然后可以计算2^q×exp(r),这等同于exp(x)。由于r在[-1,1)的有效范围内,因此可以使用此函数计算exp(R)。“

但是对于我来说,如何找到q和r并没有太大的意义?

我发现的第二种方法是在http://www.xilinx.com/support/documentation/application_notes/xapp552-cordic-floating-point-operations.pdf上,它告诉我们在将数字分为整数和小数部分后,使用to公式:

代码语言:javascript
复制
cosh(int + frac) = cosh(int) * cosh(frac) + sinh(int) * sinh(frac)
sinh(int + frac) = cosh(int) * sinh(frac) + cosh(frac) * sinh(int)

cosh(int)和sinh(int)取自查找表。但这种方法的计算量更大,所以我更喜欢前一种。

EN

回答 1

Stack Overflow用户

发布于 2015-09-05 12:12:09

如果为x = q × ln(2) + r,则

代码语言:javascript
复制
exp(x) = exp(q × ln(2) + r)
       = exp(ln(2))^q exp(r)
       = 2^q exp(r)

这意味着如果你能找到qr,就很容易找到指数,你只需要位移位2 (2<<(q-1))找到exp(r)并将它们相乘即可。

要找到qr,首先注意ln(2)=0.6931471805599453。如果您有可用的部门

代码语言:javascript
复制
q =  floor( x / ln(2) )
r = x - q * ln(2)

如果你没有除法,你可以使用循环

代码语言:javascript
复制
q = 0
while( x > ln(2) ) {
    x -= ln(2)
    ++q
}
r = x
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32409022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档