arb/doc/source/fmpcb.rst

211 lines
6.7 KiB
ReStructuredText
Raw Normal View History

2012-11-07 12:35:28 +01:00
fmpcb.h -- complex numbers
===============================================================================
2012-11-07 12:35:28 +01:00
Types, macros and constants
-------------------------------------------------------------------------------
.. type:: fmpcb_struct
.. type:: fmpcb_t
An *fmpcb_struct* consists of a pair of *fmprb_struct*:s.
An *fmpcb_t* is defined as an array of length one of type
*fmpcb_struct*, permitting an *fmpcb_t* to be passed by
reference.
.. macro:: fmpcb_realref(x)
Macro returning a pointer to the real part of *x* as an *fmprb_t*.
.. macro:: fmprb_imagref(x)
Macro returning a pointer to the imaginary part of *x* as an *fmprb_t*.
Memory management
-------------------------------------------------------------------------------
.. function:: void fmpcb_init(fmprb_t x)
Initializes the variable *x* for use. Its midpoint and radius are both
set to zero.
.. function:: void fmpcb_clear(fmpcb_t x)
Clears the variable *x*, freeing or recycling its allocated memory.
.. function:: fmpcb_struct * _fmpcb_vec_init(long n)
Returns a pointer to an array of *n* initialized *fmpcb_struct*:s.
.. function:: void _fmpcb_vec_clear(fmpcb_struct * v, long n)
Clears an array of *n* initialized *fmpcb_struct*:s.
Basic manipulation
-------------------------------------------------------------------------------
.. function:: int fmpcb_is_zero(const fmpcb_t z)
Returns nonzero iff *z* is zero.
.. function:: int fmpcb_is_exact(const fmpcb_t z)
Returns nonzero iff *z* is exact.
2012-11-07 18:16:29 +01:00
.. function:: void fmpcb_zero(fmpcb_t z)
2012-11-07 12:35:28 +01:00
2012-11-07 18:16:29 +01:00
.. function:: void fmpcb_one(fmpcb_t z)
2012-11-07 12:35:28 +01:00
2012-11-07 18:16:29 +01:00
.. function:: void fmpcb_onei(fmpcb_t z)
2012-11-07 12:35:28 +01:00
Sets *z* respectively to 0, 1, `i = \sqrt{-1}`.
.. function:: void fmpcb_set(fmpcb_t z, const fmpcb_t x)
2012-11-07 18:16:29 +01:00
.. function:: void fmpcb_set_si(fmpcb_t z, long x)
.. function:: void fmpcb_set_fmpz(fmpcb_t z, const fmpz_t x)
.. function:: void fmpcb_set_fmpq(fmpcb_t z, const fmpq_t x, long prec)
2012-11-07 12:35:28 +01:00
Sets *z* to a copy of *x*.
.. function:: void fmpcb_swap(fmpcb_t z, fmpcb_t x)
Swaps *z* and *x* efficiently.
Input and output
-------------------------------------------------------------------------------
.. function:: void fmpcb_print(const fmpcb_t x)
Prints the internal representation of *x*.
.. function:: void fmpcb_printd(const fmpcb_t z, long digits)
Prints *x* in decimal. The printed value of the radius is not adjusted
to compensate for the fact that the binary-to-decimal conversion
of both the midpoint and the radius introduces additional error.
Random number generation
-------------------------------------------------------------------------------
.. function:: void fmpcb_randtest(fmpcb_t z, flint_rand_t state, long prec, long mag_bits)
Generates a random complex number by generating separate random
real and imaginary parts.
Precision and comparisons
-------------------------------------------------------------------------------
.. function:: int fmpcb_equal(const fmpcb_t x, const fmpcb_t y)
Returns nonzero iff *x* and *y* are identical.
.. function:: int fmpcb_overlaps(const fmpcb_t x, const fmpcb_t y)
Returns nonzero iff *x* and *y* have some point in common.
.. function:: void fmpcb_get_abs_ubound_fmpr(fmpr_t u, const fmpcb_t z, long prec)
Sets *u* to an upper bound for the absolute value of *z*, computed
using a working precision of *prec* bits.
2012-11-07 18:16:29 +01:00
.. function:: int fmpcb_contains_fmpq(const fmpcb_t x, const fmpq_t y)
.. function:: int fmpcb_contains_fmpz(const fmpcb_t x, const fmpz_t y)
Returns nonzero iff *y* is contained in *x*.
.. function:: int fmpcb_contains_zero(const fmpcb_t x)
Returns nonzero iff zero is contained in *x*.
2012-11-09 17:45:25 +01:00
Complex parts
-------------------------------------------------------------------------------
.. function:: void fmpcb_arg(fmprb_t r, const fmpcb_t z, long prec)
Sets *r* to a real interval containing the complex argument of *z*. We
define the complex argument have a discontinuity on `(-\infty,0]`, with
the special value `\operatorname{arg}(0) = 0`, and
`\operatorname{arg}(x+0i) = \pi` for `x < 0`.
2012-11-07 12:35:28 +01:00
Arithmetic
-------------------------------------------------------------------------------
.. function:: void fmpcb_neg(fmpcb_t z, const fmpcb_t x)
Sets *z* to the negation of *x*.
.. function:: void fmpcb_conj(fmpcb_t z, const fmpcb_t x)
Sets *z* to the complex conjugate of *x*.
.. function:: void fmpcb_add(fmpcb_t z, const fmpcb_t x, const fmpcb_t y, long prec)
Sets *z* to the sum of *x* and *y*.
.. function:: void fmpcb_sub(fmpcb_t z, const fmpcb_t x, const fmpcb_t y, long prec)
Sets *z* to the difference of *x* and *y*.
.. function:: void fmpcb_mul_onei(fmpcb_t z, const fmpcb_t x)
Sets *z* to *x* multiplied by the imaginary unit.
.. function:: void fmpcb_mul_ui(fmpcb_t z, const fmpcb_t x, ulong y, long prec)
.. function:: void fmpcb_mul_fmprb(fmpcb_t z, const fmpcb_t x, const fmprb_t y, long prec)
Sets *z* to the product of *x* and *y*.
.. function:: void fmpcb_mul(fmpcb_t z, const fmpcb_t x, const fmpcb_t y, long prec)
Sets *z* to the product of *x* and *y*. If at least one part of
*x* or *y* is zero, the operations is reduced to two real multiplications.
Otherwise, letting `x = a + bi`, `y = c + di`, `z = e + fi`, we use
the formula `e = ac - bd`, `f = (a+b)(c+d) - ac - bd`,
which requires three real multiplications instead of four.
2012-11-07 18:16:29 +01:00
.. function:: void fmpcb_addmul(fmpcb_t z, const fmpcb_t x, const fmpcb_t y, long prec)
.. function:: void fmpcb_submul(fmpcb_t z, const fmpcb_t x, const fmpcb_t y, long prec)
Adds (subtracts) the product of *x* and *y* to *z*.
2012-11-07 12:35:28 +01:00
.. function:: void fmpcb_inv(fmpcb_t z, const fmpcb_t x, long prec)
Sets *z* to the multiplicative inverse of *x*.
2012-11-07 18:16:29 +01:00
.. function:: void fmpcb_div(fmpcb_t z, const fmpcb_t x, const fmpcb_t y, long prec)
Sets *z* to the quotient of *x* and *y*.
2012-11-09 17:45:25 +01:00
Elementary functions
-------------------------------------------------------------------------------
.. function:: void fmpcb_log(fmpcb_t y, const fmpcb_t z, long prec)
Sets *y* to the principal branch of the natural logarithm of *z*,
computed as
`\log(a+bi) = \frac{1}{2} \log(a^2 + b^2) + i \operatorname{arg}(a+bi)`.
.. function:: void fmpcb_exp(fmpcb_t y, const fmpcb_t z, long prec)
Sets *y* to the exponential function of *z*, computed as
`\exp(a+bi) = \exp(a) \left( \cos(b) + \sin(b) i \right)`.
2012-11-07 18:16:29 +01:00
.. function:: void fmpcb_pow_fmpz(fmpcb_t y, const fmpcb_t b, const fmpz_t e, long prec)
.. function:: void fmpcb_pow_ui(fmpcb_t y, const fmpcb_t b, ulong e, long prec)
2012-11-09 17:45:25 +01:00
Sets *y* to *b* raised to the power *e*, computed using binary exponentiation.
.. function:: void fmpcb_pow(fmpcb_t r, const fmpcb_t x, const fmpcb_t y, long prec)
Sets *r* to *x* raised to the power *y*, computed as `x^y = \exp(y \log x)`.
2012-11-07 18:16:29 +01:00