5.7 Basic Arithmetic Functions

All the following functions are designed in such a way that, when working with real numbers instead of complex numbers, their complexity should essentially be the same as with the GNU MPFR library, with only a marginal overhead due to the GNU MPC layer.

For functions taking as input an integer argument (for example mpc_add_ui), when this argument is zero, it is considered as an unsigned (that is, exact in this context) zero, and we follow the MPFR conventions: (0) + (+0) = +0, (0) - (+0) = -0, (0) - (+0) = -0, (0) - (-0) = +0. The same applies for functions taking an argument of type mpfr_t, such as mpc_add_fr, of which the imaginary part is considered to be an exact, unsigned zero.

Function: int mpc_add (mpc_t rop, const mpc_t op1, const mpc_t op2, mpc_rnd_t rnd)
Function: int mpc_add_ui (mpc_t rop, const mpc_t op1, unsigned long int op2, mpc_rnd_t rnd)
Function: int mpc_add_fr (mpc_t rop, const mpc_t op1, const mpfr_t op2, mpc_rnd_t rnd)

Set rop to op1 + op2 rounded according to rnd.

Function: int mpc_sub (mpc_t rop, const mpc_t op1, const mpc_t op2, mpc_rnd_t rnd)
Function: int mpc_sub_fr (mpc_t rop, const mpc_t op1, const mpfr_t op2, mpc_rnd_t rnd)
Function: int mpc_fr_sub (mpc_t rop, const mpfr_t op1, const mpc_t op2, mpc_rnd_t rnd)
Function: int mpc_sub_ui (mpc_t rop, const mpc_t op1, unsigned long int op2, mpc_rnd_t rnd)
Macro: int mpc_ui_sub (mpc_t rop, unsigned long int op1, const mpc_t op2, mpc_rnd_t rnd)
Function: int mpc_ui_ui_sub (mpc_t rop, unsigned long int re1, unsigned long int im1, mpc_t op2, mpc_rnd_t rnd)

Set rop to op1op2 rounded according to rnd. For mpc_ui_ui_sub, op1 is re1 + im1.

Function: int mpc_neg (mpc_t rop, const mpc_t op, mpc_rnd_t rnd)

Set rop to −op rounded according to rnd. Just changes the sign if rop and op are the same variable.

Function: int mpc_sum (mpc_t rop, const mpc_ptr* op, unsigned long n, mpc_rnd_t rnd)

Set rop to the sum of the elements in the array op of length n, rounded according to rnd.

Function: int mpc_mul (mpc_t rop, const mpc_t op1, const mpc_t op2, mpc_rnd_t rnd)
Function: int mpc_mul_ui (mpc_t rop, const mpc_t op1, unsigned long int op2, mpc_rnd_t rnd)
Function: int mpc_mul_si (mpc_t rop, const mpc_t op1, long int op2, mpc_rnd_t rnd)
Function: int mpc_mul_fr (mpc_t rop, const mpc_t op1, const mpfr_t op2, mpc_rnd_t rnd)

Set rop to op1 times op2 rounded according to rnd. Note: for mpc_mul, in case op1 and op2 have the same value, use mpc_sqr for better efficiency.

Function: int mpc_mul_i (mpc_t rop, const mpc_t op, int sgn, mpc_rnd_t rnd)

Set rop to op times the imaginary unit i if sgn is non-negative, set rop to op times -i otherwise, in both cases rounded according to rnd.

Function: int mpc_sqr (mpc_t rop, const mpc_t op, mpc_rnd_t rnd)

Set rop to the square of op rounded according to rnd.

Function: int mpc_fma (mpc_t rop, const mpc_t op1, const mpc_t op2, const mpc_t op3, mpc_rnd_t rnd)

Set rop to op1*op2+op3, rounded according to rnd, with only one final rounding.

Function: int mpc_dot (mpc_t rop, const mpc_ptr* op1, mpc_ptr* op2, unsigned long n, mpc_rnd_t rnd)

Set rop to the dot product of the elements in the arrays op1 and op2, both of length n, rounded according to rnd.

Function: int mpc_div (mpc_t rop, const mpc_t op1, const mpc_t op2, mpc_rnd_t rnd)
Function: int mpc_div_ui (mpc_t rop, const mpc_t op1, unsigned long int op2, mpc_rnd_t rnd)
Function: int mpc_div_fr (mpc_t rop, const mpc_t op1, const mpfr_t op2, mpc_rnd_t rnd)
Function: int mpc_ui_div (mpc_t rop, unsigned long int op1, const mpc_t op2, mpc_rnd_t rnd)
Function: int mpc_fr_div (mpc_t rop, const mpfr_t op1, const mpc_t op2, mpc_rnd_t rnd)

Set rop to op1/op2 rounded according to rnd.

Function: int mpc_conj (mpc_t rop, const mpc_t op, mpc_rnd_t rnd)

Set rop to the conjugate of op rounded according to rnd. Just changes the sign of the imaginary part if rop and op are the same variable.

Function: int mpc_abs (mpfr_t rop, const mpc_t op, mpfr_rnd_t rnd)

Set the floating-point number rop to the absolute value of op, rounded in the direction rnd.

Function: int mpc_norm (mpfr_t rop, const mpc_t op, mpfr_rnd_t rnd)

Set the floating-point number rop to the norm of op (i.e., the square of its absolute value), rounded in the direction rnd.

Function: int mpc_mul_2ui (mpc_t rop, const mpc_t op1, unsigned long int op2, mpc_rnd_t rnd)
Function: int mpc_mul_2si (mpc_t rop, const mpc_t op1, long int op2, mpc_rnd_t rnd)

Set rop to op1 times 2 raised to op2 rounded according to rnd. Just modifies the exponents of the real and imaginary parts by op2 when rop and op1 are identical.

Function: int mpc_div_2ui (mpc_t rop, const mpc_t op1, unsigned long int op2, mpc_rnd_t rnd)
Function: int mpc_div_2si (mpc_t rop, const mpc_t op1, long int op2, mpc_rnd_t rnd)

Set rop to op1 divided by 2 raised to op2 rounded according to rnd. Just modifies the exponents of the real and imaginary parts by op2 when rop and op1 are identical.