Function: lfunzeros
Section: l_functions
C-Name: lfunzeros
Prototype: GGD8,L,b
Help: lfunzeros(L,lim,{divz=8}): lim being
 either an upper limit or a real interval, computes an ordered list of
 zeros of L(s) on the critical line up to the given upper limit or in the
 given interval. Use a naive algorithm which may miss some zeros.
 To use a finer search mesh, set divz to some integral value
 larger than the default (= 8).
Doc: \kbd{lim} being either a positive upper limit or a nonempty real
 interval, computes an ordered list of zeros of $L(s)$ on the critical line up
 to the given upper limit or in the given interval. Use a naive algorithm
 which may miss some zeros: it assumes that two consecutive zeros at height
 $T \geq 1$ differ at least by $2\pi/\omega$, where
 $$\omega := \kbd{divz} \cdot
   \big(d\log(T/2\pi) + d+ 2\log(N/(\pi/2)^{d})\big).$$
 To use a finer search mesh, set divz to some integral value
 larger than the default (= 8).
 \bprog
 ? lfunzeros(1, 30) \\ zeros of Rieman zeta up to height 30
 %1 = [14.134[...], 21.022[...], 25.010[...]]
 ? #lfunzeros(1, [100,110])  \\ count zeros with 100 <= Im(s) <= 110
 %2 = 4
 @eprog\noindent The algorithm also assumes that all zeros are simple except
 possibly on the real axis at $s = k/2$ and that there are no poles in the
 search interval. (The possible zero at $s = k/2$ is repeated according to
 its multiplicity.)

 If you pass an \kbd{Linit} to the function, the algorithm assumes that a
 multiple zero at $s = k / 2$ has order less than or equal to the maximal
 derivation order allowed by the \kbd{Linit}. You may increase that value in
 the \kbd{Linit} but this is costly: only do it for zeros of low height or in
 \kbd{lfunorderzero} instead.
