FLINT3.7.0-dev

d1b_add, d2b_add, d3b_add, d4b_add, d1b_sub, d2b_sub, d3b_sub, d4b_sub, d1b_mul, d2b_mul, d3b_mul, d4b_mul, d1b_sqr, d2b_sqr, d3b_sqr, d4b_sqr, d1b_mul_d, d2b_mul_d, d3b_mul_d, d4b_mul_d, d1b_mul_2exp_si, d2b_mul_2exp_si, d3b_mul_2exp_si, d4b_mul_2exp_si

Synopsis#include <flint/dfloat.h>
void d1b_add(d1b_t res, d1b_srcptr x, d1b_srcptr y)
void d2b_add(d2b_t res, d2b_srcptr x, d2b_srcptr y)
void d3b_add(d3b_t res, d3b_srcptr x, d3b_srcptr y)
void d4b_add(d4b_t res, d4b_srcptr x, d4b_srcptr y)
void d1b_sub(d1b_t res, d1b_srcptr x, d1b_srcptr y)
void d2b_sub(d2b_t res, d2b_srcptr x, d2b_srcptr y)
void d3b_sub(d3b_t res, d3b_srcptr x, d3b_srcptr y)
void d4b_sub(d4b_t res, d4b_srcptr x, d4b_srcptr y)
void d1b_mul(d1b_t res, d1b_srcptr x, d1b_srcptr y)
void d2b_mul(d2b_t res, d2b_srcptr x, d2b_srcptr y)
void d3b_mul(d3b_t res, d3b_srcptr x, d3b_srcptr y)
void d4b_mul(d4b_t res, d4b_srcptr x, d4b_srcptr y)
void d1b_sqr(d1b_t res, d1b_srcptr x)
void d2b_sqr(d2b_t res, d2b_srcptr x)
void d3b_sqr(d3b_t res, d3b_srcptr x)
void d4b_sqr(d4b_t res, d4b_srcptr x)
void d1b_mul_d(d1b_t res, d1b_srcptr x, double y)
void d2b_mul_d(d2b_t res, d2b_srcptr x, double y)
void d3b_mul_d(d3b_t res, d3b_srcptr x, double y)
void d4b_mul_d(d4b_t res, d4b_srcptr x, double y)
void d1b_mul_2exp_si(d1b_t res, d1b_srcptr x, slong e)
void d2b_mul_2exp_si(d2b_t res, d2b_srcptr x, slong e)
void d3b_mul_2exp_si(d3b_t res, d3b_srcptr x, slong e)
void d4b_mul_2exp_si(d4b_t res, d4b_srcptr x, slong e)

Rigorous ball arithmetic. The rounding errors of the midpoint operation are added to the radius, so that exact operations on exact balls give exact results: [3 \pm 0] \cdot [3 \pm 0] = [9 \pm 0], and (2^{60} + 1) \cdot 3 is exact in d2b.

The midpoint terms are computed with error-free transformations and the magnitudes of the dropped terms are added to the radius; the radius itself is computed in round-to-nearest arithmetic and multiplied by 1 + 2^{-45} at the end, which covers up to 2^7 rounding errors. When both inputs are exact the products track all rounding errors exactly; otherwise (or always, in a context with DFLOAT_FAST) the last-order terms are bounded by u times the accumulated values, which is cheaper and loses only a constant factor on a radius that is nonzero anyway. Products whose terms could underflow take a slower path that scales the operands to unit exponent (_dfloat_ball_mul_scaled). A midpoint that overflows makes the result the whole real line.

Guides#

Cite this page

The FLINT team, “d1b_add, d2b_add, d3b_add, d4b_add, d1b_sub, d2b_sub, d3b_sub, d4b_sub, d1b_mul, d2b_mul, d3b_mul, d4b_mul, d1b_sqr, d2b_sqr, d3b_sqr, d4b_sqr, d1b_mul_d, d2b_mul_d, d3b_mul_d, d4b_mul_d, d1b_mul_2exp_si, d2b_mul_2exp_si, d3b_mul_2exp_si, d4b_mul_2exp_si (dfloat.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/dfloat/d1b_add.html (generated 2026-10-20).