FLINT3.7.0-dev

_dfloat_platt_smk, _dfloat_platt_smk_dd

Synopsis#include <flint/dfloat.h>
int _dfloat_platt_smk(acb_ptr S_table, const fmpz * smk_points, const arb_t t0, slong A, slong B, ulong J, slong K, int pn, ulong M, slong prec)source
int _dfloat_platt_smk_dd(double * S5, const fmpz * smk_points, const arb_t t0, slong A, slong B, ulong J, slong K, int pn, ulong M)source

The sums over jj in Platt's multi-evaluation of the scaled Lambda function (acb_dirichlet_platt_multieval): for the buckets m<ABm < AB of the j≤Jj \le J with smk_points[m] ≤j<\le j < smk_points[m+1], sets entry kAB+mkAB + m to ∑jzjbjk\sum_j z_j b_j^k for 0≤k<K0 \le k < K, where zj=j−1/2e−it0log⁡(jπ)z_j = j^{-1/2} e^{-i t_0 \log(j\sqrt{\pi})} and bj=log⁡(jπ)/(2π)−m/Bb_j = \log(j\sqrt{\pi})/(2\pi) - m/B. Return 1 on success and 0 if pn is not 3 or 4 or the module is not supported.

_dfloat_platt_smk_dd omits the common factor c=e−it0log⁡πc = e^{-it_0\log\sqrt{\pi}} and writes compact balls of five doubles per entry (the real and imaginary midpoints as double-words and a common radius): S5[5 (k N + m) + 0..4] holds Re hi, Re lo, Im hi, Im lo and the radius, with N=ABN = AB. M bounds the table of terms (0 for the default min⁡(J/2,5⋅106)\min(J/2, 5 \cdot 10^6)).

The rest of the multi-evaluation amplifies an error in the moment kk by about 224+8.6k2^{24 + 8.6k}, while ∣Sk∣|S_k| decreases like 2−13k2^{-13k}. So the terms j−sj^{-s} and bjb_j are d3b balls (with phases in d3b or d4b), S0S_0 is summed in d3b balls, and the moments 1≤k<141 \le k < 14 are computed in plain double-double arithmetic and k≥14k \ge 14 in double arithmetic, vectorised over the jj of a block, with an a priori error bound added per bucket. The terms are obtained by sieving: f(j)=f(d)f(j/d)f(j) = f(d) f(j/d) and log⁡j=log⁡d+log⁡(j/d)\log j = \log d + \log(j/d) for the smallest prime factor dd, from a table for j≤Mj \le M and by splitting j=xyj = xy with x,y≤Mx, y \le M beyond. The work is split into chunks computed in parallel and summed in a fixed order, so the result does not depend on the number of threads. At the height of the 101510^{15}-th zero this takes about 0.42 microseconds per jj on one thread, against 7.7 for the arb_t version at 228 bits.

Cite this page

The FLINT team, “_dfloat_platt_smk, _dfloat_platt_smk_dd (dfloat.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/dfloat/_dfloat_platt_smk.html (generated 2026-11-02).