Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
Function: intnumromb Section: sums C-Name: intnumromb0_bitprec Prototype: V=GGED0,L,b Help: intnumromb(X=a,b,expr,{flag=0}): numerical integration of expr (smooth in ]a,b[) from a to b with respect to X. flag is optional and mean 0: default. expr can be evaluated exactly on [a,b]; 1: general function; 2: a or b can be plus or minus infinity (chosen suitably), but of same sign; 3: expr has only limits at a or b. Wrapper: (,,G) Description: (gen,gen,gen,?small):gen:prec intnumromb_bitprec(${3 cookie}, ${3 wrapper}, $1, $2, $4, $bitprec) Doc: numerical integration of \var{expr} (smooth in $]a,b[$), with respect to $X$. Suitable for low accuracy; if \var{expr} is very regular (e.g. analytic in a large region) and high accuracy is desired, try \tet{intnum} first. Set $\fl=0$ (or omit it altogether) when $a$ and $b$ are not too large, the function is smooth, and can be evaluated exactly everywhere on the interval $[a,b]$. If $\fl=1$, uses a general driver routine for doing numerical integration, making no particular assumption (slow). $\fl=2$ is tailored for being used when $a$ or $b$ are infinite using the change of variable $t = 1/X$. One \emph{must} have $ab>0$, and in fact if for example $b=+\infty$, then it is preferable to have $a$ as large as possible, at least $a\ge1$. If $\fl=3$, the function is allowed to be undefined at $a$ (but right continuous) or $b$ (left continuous), for example the function $\sin(x)/x$ between $x=0$ and $1$. The user should not require too much accuracy: \tet{realprecision} about 30 decimal digits (\tet{realbitprecision} about 100 bits) is OK, but not much more. In addition, analytical cleanup of the integral must have been done: there must be no singularities in the interval or at the boundaries. In practice this can be accomplished with a change of variable. Furthermore, for improper integrals, where one or both of the limits of integration are plus or minus infinity, the function must decrease sufficiently rapidly at infinity, which can often be accomplished through integration by parts. Finally, the function to be integrated should not be very small (compared to the current precision) on the entire interval. This can of course be accomplished by just multiplying by an appropriate constant. Note that \idx{infinity} can be represented with essentially no loss of accuracy by an appropriate huge number. However beware of real underflow when dealing with rapidly decreasing functions. For example, in order to compute the $\int_0^\infty e^{-x^2}\,dx$ to 28 decimal digits, then one can set infinity equal to 10 for example, and certainly not to \kbd{1e1000}. %\syn{NO} The library syntax is \fun{GEN}{intnumromb_bitprec}{void *E, GEN (*eval)(void*,GEN), GEN a, GEN b, long flag, long bitprec}, where \kbd{eval}$(x, E)$ returns the value of the function at $x$. You may store any additional information required by \kbd{eval} in $E$, or set it to \kbd{NULL}. The historical variant \tet{intnumromb}, where \kbd{prec} is expressed in words, not bits, is obsolete and should no longer be used.