超越函数的高精度计算
非常有价值的讨论先贴些CORDIC的论文作为开头基本的算法就在里面
不再复述。
===========================
是否适合高精度函数库的计算请大家判断
照例要点利息 :lol
**** Hidden Message ***** 印象中应该不适合任意高精度计算。 那什么方法比较合适?
牛顿二次迭代? 这些函数不适用于高精度,当精度较高时,其复杂度很高。
RICHARD P.BRENT 在1976年发表了一篇著名的论文,该文名为
**** Hidden Message *****在该文中,他给出精确到n位数的初等函数的复杂度。他证明,若M(n)表示 2个长为n的大数进行乘法运算的复杂度,则初等函数(exp,log,artan,sin,cosh等)精确到n位数的复杂度为O(M(n)log(n))。下面是该文的一个摘要。
Let f(x) be one of the usual elementary functions (exp, log, artan, sin, cosh, etc.), and
let M(n) be the number of single-precision operations reqmred to multiply n-bit integers. It is shown
that f(x) can be evaluated, with relative error 0(2^{-n}), m O(M(n)log (n)) operations as n ->infty,for
any floating-point number x (with an n-bit fraction) in a suitable finite interval. From the Sehonbage-
Strassen bound on M(n), it follows that an n-bit approximation to f(x) may be evaluated
in O(n log_2(n) log log(n)) operations. Special cases include the evaluation of constants such as
\pi, e, and e^\pi. The algorithms depend on the theory of elhptic integrals, using the arithmetic-geometric mean iteration and ascending Landen transformations. 关于这些函数的具体算法,可参考一些大数运算库的源代码,比如apfloat,GMP.下面简要的介绍一下apfloat中,这些算法的基本算法。
定义:
我们定义任意精度浮点数为f, 我们定义任意精度复数为c。则
sin(f),cos(f) 可通过 exp(c)求出。
exp(c), 可由 log(c)和牛顿迭代法求得。
log(c), 可由 rawlog(c)求得。
rawlog(c) 可有复数的AGM 算法求得。
可以看到,在apfloat中,AGM算法是这些函数的核心算法,使用AGM算法和牛顿迭代法可解决所有的任意精度浮点数的初等函数。 可惜啊
GMP是没超越函数库的 你所说的超越函数是不是指初等函数?三角和对数函数应该属于初等函数。
你是对的。刚才我查了一下,确实没有在GMP的源码和文档 中 找到 提供初等接口的信息。 超越函数就是超越函数
在数学里的初等超越函数 另外一个高精度浮点库就是MPFR库了 MPFR站点带的高精度浮点算法的介绍论文