# Transformations

Perform addition of numbers (x,dx) and (y,dy) given in double double representation.

Parameters:

x (float): a floating point number. dx (float): overflow of x y (float): a floating point number. dy (float): overflow of y

Returns:

r (float): x + y + (dx + dy) e (float): the overflow

Perform addition of complex double double numbers

hypertiling.transformation.htcplxdiff(a, da, b, db)

Perform subtraction of complex double double numbers

hypertiling.transformation.htcplxdiv(a, da, b, db)

Perform division of complex double double numbers

hypertiling.transformation.htcplxprod(a, da, b, db)

Perform multiplication of complex double double numbers

hypertiling.transformation.htcplxprodconjb(a, da, b, db)

Perform multiplication of complex double double numbers where b is conjugated.

$(a, da) * (b, db)^* = (r, dr)$
Parameters:
afloat

a floating point number.

dafloat

overflow of a

bfloat

a floating point number.

dbfloat

overflow of b

Returns:

r : float

drfloat

the overflow

hypertiling.transformation.htdiff(x, dx, y, dy)

Perform subtraction of numbers given in double double representation

hypertiling.transformation.htdiv(x, dx, y, dy)

Perform division of numbers given in double double representation

hypertiling.transformation.htprod(x, dx, y, dy)

Perform multplication of numbers given in double double representation

hypertiling.transformation.kahan(x, y)

Transform the addition of two floating point numbers:

$x + y = r + e$

(Dekker1971) showed that this transform is exact, if abs(x) > abs(y).

Parameters:

x (float): a floating point number. y (float): a floating point number with abs(y) < abs(x).

Returns:

r (float): x + y e (float): the overflow

hypertiling.transformation.moeb_origin_trafo(z0, z)

Maps all points z such that z0 -> 0, respecting the Poincare projection: (z - z0)/(1 - z0 * z)

Parameters:

z0 (complex): the origin that we map back to. z (complex): the point that we will tr

Returns:

ret (complex): z Möbius transformed around z0: (z - z0)/(1 - z0 * z)

hypertiling.transformation.moeb_origin_trafo_inversedd(z0, dz0, z, dz)

Inverse Möbius transform to the origin in double double representation

hypertiling.transformation.moeb_origin_trafodd(z0, dz0, z, dz)

Möbius transform to the origin in double double representation

hypertiling.transformation.moeb_rotate_trafo(phi, z)

Rotates z by phi counter-clockwise about the origin.

hypertiling.transformation.moeb_rotate_trafodd(z, dz, phi)

Rotation of a complex number

hypertiling.transformation.mymoebint(z0, z)

Internal function for performing a full Möbius transform in double-double representation.

hypertiling.transformation.twodiff(x, y)

branch free transformation of subtraction

hypertiling.transformation.twoproduct(x, y)

Product of two numbers: x*y = r + e. See Ogita et al. 2005. Note that the magic numbers in this function restrict its domain to IEEE double precision numbers

hypertiling.transformation.twosum(x, y)

branch free transformation of addition by Knuth