高精度指数函数计算

高精度指数函数计算

1 背景

有时需要进行高精度次方函数计算,这时就需要进行特别处理。

2 指数函数计算

对于任意正数\(a\),以及实数\(b\)存在如下性质  

(1)$$a^b=\exp(b\ln(a))$$

由公式(1)可知,任意正数的次方可以通过指数函数与对数函数计算,高精度对数函数计算已经有文章介绍,而这里仅讨论指数函数计算方式。

 

2.1  函数展开

对于自然指数函数,存在如下展开形式 

(2)$$\begin{aligned}\exp(z)=1+\dfrac{2z}{2-z+\dfrac{z^2}{6+\dfrac{z^2}{10+\dfrac{z^2}{14+\dfrac{z^2}{18+\dfrac{z^2}{22+\dfrac{z^2}{…}}}}}}}\end{aligned}$$

很明显,上面\(z\)趋近0时,收敛速度才快一些。上面数据\(6、10、14、18、22\)为表达式\(2+4i\)中\(i=1、2、3、4、5、…\)时的值。

 

2.2 性质

对于正整数\(n\),自然指数函数存在如下性质  

(3)$$\exp(x)=\exp(2^nz)=\exp(z)^{2^n}$$

从上面可以得到

(4)$$z=\dfrac{x}{2^n}$$

由公式(2)可知,为了加快收敛速度,只有\(z\)趋近0时,速度才会更快。因此实际计算时,需要找到一个合适的\(n\)。这里约定\(n\)按如下方式取值

(5)$$\dfrac{|x|}{2^n}<\dfrac{1}{2^{46}}$$

2.3 截断

在使用(2)式进行迭代时,需要进行项数\(m\)截断。对于10进制下有效位位数为\(p\)的情况下,使用如下经验公式计算\(m\)

(6)$$
m = \lceil 0.10515032199532+0.03087406498127p\rceil
$$

2.4 算法

这里使用如下步骤计算 \(\exp(x)\):

①根据(5)找到一个满足条件的最小值\(n\)。

②根据有效位\(p\),根据(6)计算截断项数\(m\)。

③设 \(y_m=2+4m\)。

④循环计算 \(y_i=2+4i+\dfrac{z^2}{y_{i+1}}\),这里 \(i=m-1,m-2,…, 1\)。

⑤设 \(r_0=1+\dfrac{2z}{2-z+\dfrac{z^2}{y_1}}\)。

⑥循环计算 \(r_i=r_{i-1}^2\),这里 \(i=1,2,3,…, n\)。

⑦最终 \(\exp(x)=r_n\)。

发表回复

您的电子邮箱地址不会被公开。

蜀ICP备17029856号-1