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

Verilog 如何使用CORDIC计算[-1,1]之外的数字的指数?,verilog,hdl,cordic,Verilog,Hdl,Cordic,我无法理解计算范围[-1,1]之外的数字的指数背后的数学原理(实际上我不确定使用CORDIC计算exp的好范围是什么,有些地方我读过[-pi/4,pi/4],有些地方我读过[-1,1]),使用CORDIC算法。有人能举个例子吗 我在会议上宣读了以下声明: “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]的有效范围内,所

我无法理解计算范围[-1,1]之外的数字的指数背后的数学原理(实际上我不确定使用CORDIC计算exp的好范围是什么,有些地方我读过[-pi/4,pi/4],有些地方我读过[-1,1]),使用CORDIC算法。有人能举个例子吗

我在会议上宣读了以下声明:

“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没有多大意义

我发现的第二种方法是,在将数字分为整数和小数部分后,告诉我们使用公式:

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)取自查找表。但是这种方法计算量更大,所以我更喜欢前一种方法。

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

exp(x) = exp(q × ln(2) + r)
       = exp(ln(2))^q exp(r)
       = 2^q exp(r)

这意味着,如果你能找到
q
r
,就很容易找到指数,你只需要移位2位(
2)这可能更适合是的,但我在那里找不到像Verilog、HDL和CORDIC这样的标签,这就很难找到合适的人。
q =  floor( x / ln(2) )
r = x - q * ln(2)
q = 0
while( x > ln(2) ) {
    x -= ln(2)
    ++q
}
r = x