Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
Function: suminf
Section: sums
C-Name: suminf0_bitprec
Prototype: V=GEb
Help: suminf(X=a,expr): naive summation (X goes from a to infinity) of real or
complex expression expr.
Wrapper: (,G)
Description:
(gen,gen):gen:prec suminf(${2 cookie}, ${2 wrapper}, $1, $prec)
Doc: Naive summation of expression \var{expr}, the formal parameter $X$
going from $a$ to infinity. The evaluation stops when the relative error of
the expression is less than the default bit precision for 3 consecutive
evaluations. The expressions must evaluate to a complex number.
If the expression tends slowly to $0$, like $n^{-a}$ for some $a > 1$,
make sure $b = \kbd{realbitprecision}$ is low: indeed, the algorithm will
require $O(2^{b/a})$ function evaluations and we expect only about $b(1-1/a)$
correct bits in the answer. If the series is alternating, we can expect $b$
correct bits but the \tet{sumalt} function should be used instead since its
complexity is polynomial in $b$, instead of exponential. More generally,
\kbd{sumpos} should be used if the terms have a constant sign and
\kbd{sumnum} if the function is $C^\infty$.
\bprog
? \pb25
realbitprecision = 25 significant bits (7 decimal digits displayed)
? exponent(suminf(i = 1, (-1)^i / i) + log(2))
time = 2min, 2,602 ms.
%1 = -29
? \pb45
realbitprecision = 45 significant bits (13 decimal digits displayed)
? exponent(suminf(i = 1, 1 / i^2) - zeta(2))
time = 2,186 ms.
%2 = -23
\\ alternatives are much faster
? \pb 10000
realbitprecision = 10000 significant bits (3010 decimal digits displayed)
? exponent(sumalt(i = 1, (-1)^i / i) + log(2))
time = 25 ms.
%3 = -10043
? \pb 4000
realbitprecision = 4000 significant bits (1204 decimal digits displayed)))
? exponent(sumpos(i = 1, 1 / i^2) - zeta(2))
time = 22,593 ms.
%4 = -4030
? exponent(sumnum(i = 1, 1 / i^2) - zeta(2))
time = 7,032 ms.
%5 = -4031
\\ but suminf is perfect for geometrically converging series
? exponent(suminf(i = 1, 2^-i) - 1)
time = 25 ms.
%6 = -4003
@eprog
\synt{suminf_bitprec}{void *E, GEN (*eval)(void*,GEN), GEN a, long prec}.
The historical variant \fun{GEN}{suminf}{\dots, long prec}, where \kbd{prec} is
expressed in words, not bits, is obsolete and should no longer be used.