FLINT3.7.0-dev

d1_add, d2_add, d3_add, d4_add, d1_sub, d2_sub, d3_sub, d4_sub, d1_mul, d2_mul, d3_mul, d4_mul, d1_sqr, d2_sqr, d3_sqr, d4_sqr, d1_mul_d, d2_mul_d, d3_mul_d, d4_mul_d, d1_div, d2_div, d3_div, d4_div, d1_inv, d2_inv, d3_inv, d4_inv, d1_sqrt, d2_sqrt, d3_sqrt, d4_sqrt, d1_rsqrt, d2_rsqrt, d3_rsqrt, d4_rsqrt, d1_mul_2exp_si, d2_mul_2exp_si, d3_mul_2exp_si, d4_mul_2exp_si

Synopsis#include <flint/dfloat.h>
void d1_add(d1_t res, d1_srcptr x, d1_srcptr y)
void d2_add(d2_t res, d2_srcptr x, d2_srcptr y)
void d3_add(d3_t res, d3_srcptr x, d3_srcptr y)
void d4_add(d4_t res, d4_srcptr x, d4_srcptr y)
void d1_sub(d1_t res, d1_srcptr x, d1_srcptr y)
void d2_sub(d2_t res, d2_srcptr x, d2_srcptr y)
void d3_sub(d3_t res, d3_srcptr x, d3_srcptr y)
void d4_sub(d4_t res, d4_srcptr x, d4_srcptr y)
void d1_mul(d1_t res, d1_srcptr x, d1_srcptr y)
void d2_mul(d2_t res, d2_srcptr x, d2_srcptr y)
void d3_mul(d3_t res, d3_srcptr x, d3_srcptr y)
void d4_mul(d4_t res, d4_srcptr x, d4_srcptr y)
void d1_sqr(d1_t res, d1_srcptr x)
void d2_sqr(d2_t res, d2_srcptr x)
void d3_sqr(d3_t res, d3_srcptr x)
void d4_sqr(d4_t res, d4_srcptr x)
void d1_mul_d(d1_t res, d1_srcptr x, double y)
void d2_mul_d(d2_t res, d2_srcptr x, double y)
void d3_mul_d(d3_t res, d3_srcptr x, double y)
void d4_mul_d(d4_t res, d4_srcptr x, double y)
void d1_div(d1_t res, d1_srcptr x, d1_srcptr y)
void d2_div(d2_t res, d2_srcptr x, d2_srcptr y)
void d3_div(d3_t res, d3_srcptr x, d3_srcptr y)
void d4_div(d4_t res, d4_srcptr x, d4_srcptr y)
void d1_inv(d1_t res, d1_srcptr x)
void d2_inv(d2_t res, d2_srcptr x)
void d3_inv(d3_t res, d3_srcptr x)
void d4_inv(d4_t res, d4_srcptr x)
void d1_sqrt(d1_t res, d1_srcptr x)
void d2_sqrt(d2_t res, d2_srcptr x)
void d3_sqrt(d3_t res, d3_srcptr x)
void d4_sqrt(d4_t res, d4_srcptr x)
void d1_rsqrt(d1_t res, d1_srcptr x)
void d2_rsqrt(d2_t res, d2_srcptr x)
void d3_rsqrt(d3_t res, d3_srcptr x)
void d4_rsqrt(d4_t res, d4_srcptr x)
void d1_mul_2exp_si(d1_t res, d1_srcptr x, slong e)
void d2_mul_2exp_si(d2_t res, d2_srcptr x, slong e)
void d3_mul_2exp_si(d3_t res, d3_srcptr x, slong e)
void d4_mul_2exp_si(d4_t res, d4_srcptr x, slong e)

Arithmetic on the plain formats, accurate to a few ulps at 53N bits: sum, difference, product, square, product with a double, quotient, inverse, square root, reciprocal square root x^{-1/2} and multiplication by 2^e. Overflow gives infinity, and nonfinite values propagate as in double arithmetic.

Addition, subtraction and multiplication compute the exact terms of each order with error-free transformations and renormalise; terms of order N and beyond are dropped in multiplication. Division is a long division whose digits are single double divisions, and the square roots are Newton iterations with tapered precision; dN_rsqrt doubles the number of correct components per step and is accurate to about 8 u^N, u = 2^{-53}. See Double-word and multi-double arithmetic.

The results are compact weakly normalised expansions: a component that comes out exactly zero after a cancellation is squeezed out, so that the magnitudes of the components always decrease geometrically. The tapered kernels (division, square roots and the elementary functions) rely on this and lose accuracy on an expansion with an internal zero such as (2^{-86}, 0, 2^{-140}, 0), which the module never produces; an expansion built by hand in this form should be passed through dN_canonicalise first (the elementary functions do this themselves, but dN_div, dN_sqrt and dN_rsqrt do not).

Guides#

Cite this page

The FLINT team, “d1_add, d2_add, d3_add, d4_add, d1_sub, d2_sub, d3_sub, d4_sub, d1_mul, d2_mul, d3_mul, d4_mul, d1_sqr, d2_sqr, d3_sqr, d4_sqr, d1_mul_d, d2_mul_d, d3_mul_d, d4_mul_d, d1_div, d2_div, d3_div, d4_div, d1_inv, d2_inv, d3_inv, d4_inv, d1_sqrt, d2_sqrt, d3_sqrt, d4_sqrt, d1_rsqrt, d2_rsqrt, d3_rsqrt, d4_rsqrt, d1_mul_2exp_si, d2_mul_2exp_si, d3_mul_2exp_si, d4_mul_2exp_si (dfloat.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/dfloat/d1_add.html (generated 2026-10-20).