Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

Testing latest pari + WASM + node.js... and it works?! Wow.

28493 views
License: GPL3
ubuntu2004
Function: bernvec
Section: combinatorics
C-Name: bernvec
Prototype: L
Help: bernvec(n): returns a vector containing, as rational numbers,
 the Bernoulli numbers B_0, B_2, ..., B_{2n}.
Doc: returns a vector containing, as rational numbers,
 the \idx{Bernoulli numbers} $B_0$, $B_2$,\dots, $B_{2n}$:
 \bprog
 ? bernvec(5) \\ B_0, B_2..., B_10
 %1 = [1, 1/6, -1/30, 1/42, -1/30, 5/66]
 ? bernfrac(10)
 %2 = 5/66
 @eprog\noindent This routine uses a lot of memory but is much faster than
 repeated calls to \kbd{bernfrac}:
 \bprog
 ? forstep(n = 2, 10000, 2, bernfrac(n))
 time = 41,522 ms.
 ? bernvec(5000);
 time = 4,784 ms.
 @eprog\noindent The computed Bernoulli numbers are stored in an incremental
 cache which makes later calls to \kbd{bernfrac} and \kbd{bernreal}
 instantaneous in the cache range: re-running the same previous \kbd{bernfrac}s
 after the \kbd{bernvec} call gives:
 \bprog
 ? forstep(n = 2, 10000, 2, bernfrac(n))
 time = 1 ms.
 @eprog\noindent The time and space complexity of this function are
 $\tilde{O}(n^2)$; in the feasible range $n \leq 10^5$ (requires about 2 hours),
 the practical time complexity is closer to $\tilde{O}(n^{\log_2 6})$.