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
#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#
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).
@misc{flint-doc-dfloat-d1b-add,
author = {{The FLINT team}},
title = {{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)}},
howpublished = {FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev},
year = {2026},
url = {https://flintlib.org/doc/dfloat/d1b_add.html},
note = {Generated 2026-10-20}
}