Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
- Complex numbers
- Types
- Memory management
- Basic manipulation
- Input and output
- Random number generation
- Precision and comparisons
- Complex parts
- Arithmetic
- Dot product
- Mathematical constants
- Powers and roots
- Exponentials and logarithms
- Trigonometric functions
- Inverse trigonometric functions
- Hyperbolic functions
- Inverse hyperbolic functions
- Lambert W function
- Rising factorials
- Gamma function
- Zeta function
- Polylogarithms
- Arithmetic-geometric mean
- Other special functions
- Piecewise real functions
- Vector functions
An Acb
represents a complex number with error bounds. An Acb
consists of a pair of real number balls of type Arb
,
representing the real and imaginary part with separate error bounds.
An Acb
thus represents a
rectangle \([m_1-r_1, m_1+r_1] + [m_2-r_2, m_2+r_2] i\) in the complex plane.
This is used instead of a disk or
square representation (consisting of a complex floating-point midpoint
with a single radius), since it allows implementing many operations more
conveniently by splitting into ball operations on the real and imaginary
parts. It also allows tracking when complex numbers have an exact (for
example exactly zero) real part and an inexact imaginary part, or vice
versa.
The interface for the Acb
type is slightly less developed than that
for the Arb
type. In many cases, the user can easily perform missing
operations by directly manipulating the real and imaginary parts.
Synopsis
- data Acb = Acb !(ForeignPtr CAcb)
- data CAcb = CAcb CArb CArb
- newAcb :: IO Acb
- withAcb :: Acb -> (Ptr CAcb -> IO a) -> IO (Acb, a)
- withNewAcb :: (Ptr CAcb -> IO a) -> IO (Acb, a)
- withAcbRe :: Acb -> (Ptr CArb -> IO t) -> IO (Acb, t)
- withAcbIm :: Acb -> (Ptr CArb -> IO t) -> IO (Acb, t)
- acb_realref :: Ptr CAcb -> Ptr CArb
- acb_imagref :: Ptr CAcb -> Ptr CArb
- acb_init :: Ptr CAcb -> IO ()
- acb_clear :: Ptr CAcb -> IO ()
- _acb_vec_init :: CLong -> IO (Ptr CAcb)
- _acb_vec_clear :: Ptr CAcb -> CLong -> IO ()
- acb_allocated_bytes :: Ptr CAcb -> IO CLong
- _acb_vec_allocated_bytes :: Ptr CAcb -> CLong -> IO CLong
- _acb_vec_estimate_allocated_bytes :: CLong -> CLong -> IO CDouble
- acb_zero :: Ptr CAcb -> IO ()
- acb_one :: Ptr CAcb -> IO ()
- acb_onei :: Ptr CAcb -> IO ()
- acb_set :: Ptr CAcb -> Ptr CAcb -> IO ()
- acb_set_ui :: Ptr CAcb -> CULong -> IO ()
- acb_set_si :: Ptr CAcb -> CLong -> IO ()
- acb_set_d :: Ptr CAcb -> CDouble -> IO ()
- acb_set_fmpz :: Ptr CAcb -> Ptr CFmpz -> IO ()
- acb_set_arb :: Ptr CAcb -> Ptr CArb -> IO ()
- acb_set_si_si :: Ptr CAcb -> CLong -> CLong -> IO ()
- acb_set_d_d :: Ptr CAcb -> CDouble -> CDouble -> IO ()
- acb_set_fmpz_fmpz :: Ptr CAcb -> Ptr CFmpz -> Ptr CFmpz -> IO ()
- acb_set_arb_arb :: Ptr CAcb -> Ptr CArb -> Ptr CArb -> IO ()
- acb_set_fmpq :: Ptr CAcb -> Ptr CFmpq -> CLong -> IO ()
- acb_set_round :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_set_round_fmpz :: Ptr CAcb -> Ptr CFmpz -> CLong -> IO ()
- acb_set_round_arb :: Ptr CAcb -> Ptr CArb -> CLong -> IO ()
- acb_swap :: Ptr CAcb -> Ptr CAcb -> IO ()
- acb_add_error_arf :: Ptr CAcb -> Ptr CArf -> IO ()
- acb_add_error_mag :: Ptr CAcb -> Ptr CMag -> IO ()
- acb_add_error_arb :: Ptr CAcb -> Ptr CArb -> IO ()
- acb_get_mid :: Ptr CAcb -> Ptr CAcb -> IO ()
- acb_get_str :: Ptr CAcb -> IO CString
- acb_get_strd :: Ptr CAcb -> CLong -> IO CString
- acb_get_strn :: Ptr CAcb -> CLong -> ArbStrOption -> IO CString
- acb_print :: Ptr CAcb -> IO ()
- acb_fprint :: Ptr CFile -> Ptr CAcb -> IO ()
- acb_printd :: Ptr CAcb -> CLong -> IO ()
- acb_fprintd :: Ptr CFile -> Ptr CAcb -> CLong -> IO ()
- acb_printn :: Ptr CAcb -> CLong -> ArbStrOption -> IO ()
- acb_fprintn :: Ptr CFile -> Ptr CAcb -> CLong -> ArbStrOption -> IO ()
- acb_randtest :: Ptr CAcb -> Ptr CFRandState -> CLong -> CLong -> IO ()
- acb_randtest_special :: Ptr CAcb -> Ptr CFRandState -> CLong -> CLong -> IO ()
- acb_randtest_precise :: Ptr CAcb -> Ptr CFRandState -> CLong -> CLong -> IO ()
- acb_randtest_param :: Ptr CAcb -> Ptr CFRandState -> CLong -> CLong -> IO ()
- acb_is_zero :: Ptr CAcb -> IO CInt
- acb_is_one :: Ptr CAcb -> IO CInt
- acb_is_finite :: Ptr CAcb -> IO CInt
- acb_is_exact :: Ptr CAcb -> IO CInt
- acb_is_int :: Ptr CAcb -> IO CInt
- acb_is_int_2exp_si :: Ptr CAcb -> CLong -> IO CInt
- acb_equal :: Ptr CAcb -> Ptr CAcb -> IO CInt
- acb_equal_si :: Ptr CAcb -> CLong -> IO CInt
- acb_eq :: Ptr CAcb -> Ptr CAcb -> IO CInt
- acb_ne :: Ptr CAcb -> Ptr CAcb -> IO CInt
- acb_overlaps :: Ptr CAcb -> Ptr CAcb -> IO CInt
- acb_union :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_get_abs_ubound_arf :: Ptr CArf -> Ptr CAcb -> CLong -> IO ()
- acb_get_abs_lbound_arf :: Ptr CArf -> Ptr CAcb -> CLong -> IO ()
- acb_get_rad_ubound_arf :: Ptr CArf -> Ptr CAcb -> CLong -> IO ()
- acb_get_mag :: Ptr CMag -> Ptr CAcb -> IO ()
- acb_get_mag_lower :: Ptr CMag -> Ptr CAcb -> IO ()
- acb_contains_fmpq :: Ptr CAcb -> Ptr CFmpq -> IO CInt
- acb_contains_fmpz :: Ptr CAcb -> Ptr CFmpz -> IO CInt
- acb_contains :: Ptr CAcb -> Ptr CAcb -> IO CInt
- acb_contains_zero :: Ptr CAcb -> IO CInt
- acb_contains_int :: Ptr CAcb -> IO CInt
- acb_contains_interior :: Ptr CAcb -> Ptr CAcb -> IO CInt
- acb_rel_error_bits :: Ptr CAcb -> IO CLong
- acb_rel_accuracy_bits :: Ptr CAcb -> IO CLong
- acb_rel_one_accuracy_bits :: Ptr CAcb -> IO CLong
- acb_bits :: Ptr CAcb -> IO CLong
- acb_indeterminate :: Ptr CAcb -> IO ()
- acb_trim :: Ptr CAcb -> Ptr CAcb -> IO ()
- acb_is_real :: Ptr CAcb -> IO CInt
- acb_get_unique_fmpz :: Ptr CFmpz -> Ptr CAcb -> IO CInt
- acb_get_real :: Ptr CArb -> Ptr CAcb -> IO ()
- acb_get_imag :: Ptr CArb -> Ptr CAcb -> IO ()
- acb_arg :: Ptr CArb -> Ptr CAcb -> CLong -> IO ()
- acb_abs :: Ptr CArb -> Ptr CAcb -> CLong -> IO ()
- acb_sgn :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_csgn :: Ptr CArb -> Ptr CAcb -> IO ()
- acb_neg :: Ptr CAcb -> Ptr CAcb -> IO ()
- acb_neg_round :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_conj :: Ptr CAcb -> Ptr CAcb -> IO ()
- acb_add_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO ()
- acb_add_si :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- acb_add_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CLong -> IO ()
- acb_add_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO ()
- acb_add :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sub_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO ()
- acb_sub_si :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- acb_sub_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CLong -> IO ()
- acb_sub_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO ()
- acb_sub :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_mul_onei :: Ptr CAcb -> Ptr CAcb -> IO ()
- acb_div_onei :: Ptr CAcb -> Ptr CAcb -> IO ()
- acb_mul_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO ()
- acb_mul_si :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- acb_mul_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CLong -> IO ()
- acb_mul_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO ()
- acb_mul :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_mul_2exp_si :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_mul_2exp_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> IO ()
- acb_sqr :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_cube :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_addmul :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_addmul_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO ()
- acb_addmul_si :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- acb_addmul_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CLong -> IO ()
- acb_addmul_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO ()
- acb_submul :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_submul_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO ()
- acb_submul_si :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- acb_submul_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CLong -> IO ()
- acb_submul_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO ()
- acb_inv :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_div_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO ()
- acb_div_si :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- acb_div_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CLong -> IO ()
- acb_div_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO ()
- acb_div :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_dot_precise :: Ptr CAcb -> Ptr CAcb -> CInt -> Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> CLong -> CLong -> IO ()
- acb_approx_dot :: Ptr CAcb -> Ptr CAcb -> CInt -> Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> CLong -> CLong -> IO ()
- acb_dot_ui :: Ptr CAcb -> Ptr CAcb -> CInt -> Ptr CAcb -> CLong -> Ptr CULong -> CLong -> CLong -> CLong -> IO ()
- acb_const_pi :: Ptr CAcb -> CLong -> IO ()
- acb_sqrt :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sqrt_analytic :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_rsqrt :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_rsqrt_analytic :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_quadratic_roots_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> CLong -> IO ()
- acb_root_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO ()
- acb_pow_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CLong -> IO ()
- acb_pow_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO ()
- acb_pow_si :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- acb_pow_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO ()
- acb_pow :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_pow_analytic :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_unit_root :: Ptr CAcb -> CULong -> CLong -> IO ()
- acb_exp :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_exp_pi_i :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_exp_invexp :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_expm1 :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_log :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_log_analytic :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_log1p :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sin :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_cos :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sin_cos :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_tan :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_cot :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sin_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_cos_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sin_cos_pi :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_tan_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_cot_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sec :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_csc :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_csc_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sinc :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sinc_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_asin :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_acos :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_atan :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sinh :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_cosh :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sinh_cosh :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_tanh :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_coth :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_sech :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_csch :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_asinh :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_acosh :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_atanh :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_lambertw_asymp :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CLong -> CLong -> CLong -> IO ()
- acb_lambertw_check_branch :: Ptr CAcb -> Ptr CFmpz -> CLong -> IO CInt
- acb_lambertw_bound_deriv :: Ptr CMag -> Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> IO ()
- acb_lambertw :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CInt -> CLong -> IO ()
- acb_rising_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO ()
- acb_gamma :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_rgamma :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_lgamma :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_digamma :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_log_sin_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_polygamma :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_barnes_g :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_log_barnes_g :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_zeta :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_hurwitz_zeta :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_bernoulli_poly_ui :: Ptr CAcb -> CULong -> Ptr CAcb -> CLong -> IO ()
- acb_polylog :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_polylog_si :: Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> IO ()
- acb_agm1 :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_agm1_cpx :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- acb_agm :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- acb_chebyshev_t_ui :: Ptr CAcb -> CULong -> Ptr CAcb -> CLong -> IO ()
- acb_chebyshev_u_ui :: Ptr CAcb -> CULong -> Ptr CAcb -> CLong -> IO ()
- acb_chebyshev_t2_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> Ptr CAcb -> CLong -> IO ()
- acb_chebyshev_u2_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> Ptr CAcb -> CLong -> IO ()
- acb_real_abs :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_real_sgn :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_real_heaviside :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_real_floor :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_real_ceil :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_real_max :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_real_min :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- acb_real_sqrtpos :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO ()
- _acb_vec_zero :: Ptr CAcb -> CLong -> IO ()
- _acb_vec_is_zero :: Ptr CAcb -> CLong -> IO CInt
- _acb_vec_is_real :: Ptr CAcb -> CLong -> IO CInt
- _acb_vec_set :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- _acb_vec_set_round :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- _acb_vec_swap :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- _acb_vec_neg :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- _acb_vec_add :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- _acb_vec_sub :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- _acb_vec_scalar_submul :: Ptr CAcb -> Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> IO ()
- _acb_vec_scalar_addmul :: Ptr CAcb -> Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> IO ()
- _acb_vec_scalar_mul :: Ptr CAcb -> Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> IO ()
- _acb_vec_scalar_mul_ui :: Ptr CAcb -> Ptr CAcb -> CLong -> CULong -> CLong -> IO ()
- _acb_vec_scalar_mul_2exp_si :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- _acb_vec_scalar_mul_onei :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- _acb_vec_scalar_div_ui :: Ptr CAcb -> Ptr CAcb -> CLong -> CULong -> CLong -> IO ()
- _acb_vec_scalar_div :: Ptr CAcb -> Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> IO ()
- _acb_vec_scalar_mul_arb :: Ptr CAcb -> Ptr CAcb -> CLong -> Ptr CArb -> CLong -> IO ()
- _acb_vec_scalar_div_arb :: Ptr CAcb -> Ptr CAcb -> CLong -> Ptr CArb -> CLong -> IO ()
- _acb_vec_scalar_mul_fmpz :: Ptr CAcb -> Ptr CAcb -> CLong -> Ptr CFmpz -> CLong -> IO ()
- _acb_vec_scalar_div_fmpz :: Ptr CAcb -> Ptr CAcb -> CLong -> Ptr CFmpz -> CLong -> IO ()
- _acb_vec_bits :: Ptr CAcb -> CLong -> IO CLong
- _acb_vec_set_powers :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO ()
- _acb_vec_unit_roots :: Ptr CAcb -> CLong -> CLong -> CLong -> IO ()
- _acb_vec_add_error_arf_vec :: Ptr CAcb -> Ptr CArf -> CLong -> IO ()
- _acb_vec_add_error_mag_vec :: Ptr CAcb -> Ptr CMag -> CLong -> IO ()
- _acb_vec_indeterminate :: Ptr CAcb -> CLong -> IO ()
- _acb_vec_trim :: Ptr CAcb -> Ptr CAcb -> CLong -> IO ()
- _acb_vec_get_unique_fmpz_vec :: Ptr CFmpz -> Ptr CAcb -> CLong -> IO CInt
- _acb_vec_sort_pretty :: Ptr CAcb -> CLong -> IO ()
Complex numbers
Types
An CArb consists of a pair of Arb:s.
Acb !(ForeignPtr CAcb) |
Instances
Storable CAcb Source # | |
Defined in Data.Number.Flint.Acb.FFI |
withAcbIm :: Acb -> (Ptr CArb -> IO t) -> IO (Acb, t) Source #
Apply function f
to imaginary part of Acb
acb_realref :: Ptr CAcb -> Ptr CArb Source #
acb_realref z
acb_realref returns a CArb
pointer to the real part of z.
acb_imagref :: Ptr CAcb -> Ptr CArb Source #
acb_imagref z
acb_imagref returns a CArb
pointer to the imaginary part of z.
Memory management
acb_init :: Ptr CAcb -> IO () Source #
acb_init x
Initializes the variable x for use, and sets its value to zero.
acb_clear :: Ptr CAcb -> IO () Source #
acb_clear x
Clears the variable x, freeing or recycling its allocated memory.
_acb_vec_init :: CLong -> IO (Ptr CAcb) Source #
_acb_vec_init n
Returns a pointer to an array of n initialized acb_struct:s.
_acb_vec_clear :: Ptr CAcb -> CLong -> IO () Source #
_acb_vec_clear v n
Clears an array of n initialized acb_struct:s.
acb_allocated_bytes :: Ptr CAcb -> IO CLong Source #
acb_allocated_bytes x
Returns the total number of bytes heap-allocated internally by this
object. The count excludes the size of the structure itself. Add
sizeof(acb_struct)
to get the size of the object as a whole.
_acb_vec_allocated_bytes :: Ptr CAcb -> CLong -> IO CLong Source #
_acb_vec_allocated_bytes vec len
Returns the total number of bytes allocated for this vector, i.e. the space taken up by the vector itself plus the sum of the internal heap allocation sizes for all its member elements.
_acb_vec_estimate_allocated_bytes :: CLong -> CLong -> IO CDouble Source #
_acb_vec_estimate_allocated_bytes len prec
Estimates the number of bytes that need to be allocated for a vector of
len elements with prec bits of precision, including the space for
internal limb data. See comments for
_arb_vec_estimate_allocated_bytes
.
Basic manipulation
acb_set_arb_arb :: Ptr CAcb -> Ptr CArb -> Ptr CArb -> IO () Source #
acb_set_arb_arb z x y
Sets the real and imaginary part of z to the values x and y respectively
acb_set_round_arb :: Ptr CAcb -> Ptr CArb -> CLong -> IO () Source #
acb_set_round_arb z x prec
Sets z to x, rounded to prec bits.
acb_add_error_arb :: Ptr CAcb -> Ptr CArb -> IO () Source #
acb_add_error_arb x err
Adds err to the error bounds of both the real and imaginary parts of x, modifying x in-place.
Input and output
acb_get_strn :: Ptr CAcb -> CLong -> ArbStrOption -> IO CString Source #
acb_fprint :: Ptr CFile -> Ptr CAcb -> IO () Source #
acb_fprint file x
Prints the internal representation of x.
acb_printd :: Ptr CAcb -> CLong -> IO () Source #
acb_printd file x digits
Prints x in decimal to stdout. 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.
acb_fprintd :: Ptr CFile -> Ptr CAcb -> CLong -> IO () Source #
acb_fprintd file x digits
Prints x in decimal to stream file. 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.
acb_printn :: Ptr CAcb -> CLong -> ArbStrOption -> IO () Source #
acb_fprintn :: Ptr CFile -> Ptr CAcb -> CLong -> ArbStrOption -> IO () Source #
acb_fprintn file x digits flags
Prints a nice decimal representation of x, using the format of
arb_get_str
(or the corresponding arb_printn
) for the real and
imaginary parts.
By default, the output shows the midpoint of both the real and imaginary parts with a guaranteed error of at most one unit in the last decimal place. In addition, explicit error bounds are printed so that the displayed decimal interval is guaranteed to enclose x.
Any flags understood by arb_get_str
can be passed via flags to
control the format of the real and imaginary parts.
Random number generation
acb_randtest :: Ptr CAcb -> Ptr CFRandState -> CLong -> CLong -> IO () Source #
acb_randtest z state prec mag_bits
Generates a random complex number by generating separate random real and imaginary parts.
acb_randtest_special :: Ptr CAcb -> Ptr CFRandState -> CLong -> CLong -> IO () Source #
acb_randtest_special z state prec mag_bits
Generates a random complex number by generating separate random real and imaginary parts. Also generates NaNs and infinities.
acb_randtest_precise :: Ptr CAcb -> Ptr CFRandState -> CLong -> CLong -> IO () Source #
acb_randtest_precise z state prec mag_bits
Generates a random complex number with precise real and imaginary parts.
acb_randtest_param :: Ptr CAcb -> Ptr CFRandState -> CLong -> CLong -> IO () Source #
acb_randtest_param z state prec mag_bits
Generates a random complex number, with very high probability of generating integers and half-integers.
Precision and comparisons
acb_is_finite :: Ptr CAcb -> IO CInt Source #
acb_is_finite z
Returns nonzero iff z certainly is finite.
acb_is_int_2exp_si :: Ptr CAcb -> CLong -> IO CInt Source #
acb_is_int_2exp_si x e
Returns nonzero iff z exactly equals \(n 2^e\) for some integer n.
acb_equal :: Ptr CAcb -> Ptr CAcb -> IO CInt Source #
acb_equal x y
Returns nonzero iff x and y are identical as sets, i.e. if the real and imaginary parts are equal as balls.
Note that this is not the same thing as testing whether both x and y
certainly represent the same complex number, unless either x or y is
exact (and neither contains NaN). To test whether both operands might
represent the same mathematical quantity, use acb_overlaps
or
acb_contains
, depending on the circumstance.
acb_equal_si :: Ptr CAcb -> CLong -> IO CInt Source #
acb_equal_si x y
Returns nonzero iff x is equal to the integer y.
acb_eq :: Ptr CAcb -> Ptr CAcb -> IO CInt Source #
acb_eq x y
Returns nonzero iff x and y are certainly equal, as determined by
testing that arb_eq
holds for both the real and imaginary parts.
acb_ne :: Ptr CAcb -> Ptr CAcb -> IO CInt Source #
acb_ne x y
Returns nonzero iff x and y are certainly not equal, as determined
by testing that arb_ne
holds for either the real or imaginary parts.
acb_overlaps :: Ptr CAcb -> Ptr CAcb -> IO CInt Source #
acb_overlaps x y
Returns nonzero iff x and y have some point in common.
acb_union :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_union z x y prec
Sets z to a complex interval containing both x and y.
acb_get_abs_ubound_arf :: Ptr CArf -> Ptr CAcb -> CLong -> IO () Source #
acb_get_abs_ubound_arf u z prec
Sets u to an upper bound for the absolute value of z, computed using a working precision of prec bits.
acb_get_abs_lbound_arf :: Ptr CArf -> Ptr CAcb -> CLong -> IO () Source #
acb_get_abs_lbound_arf u z prec
Sets u to a lower bound for the absolute value of z, computed using a working precision of prec bits.
acb_get_rad_ubound_arf :: Ptr CArf -> Ptr CAcb -> CLong -> IO () Source #
acb_get_rad_ubound_arf u z prec
Sets u to an upper bound for the error radius of z (the value is currently not computed tightly).
acb_get_mag :: Ptr CMag -> Ptr CAcb -> IO () Source #
acb_get_mag u x
Sets u to an upper bound for the absolute value of x.
acb_get_mag_lower :: Ptr CMag -> Ptr CAcb -> IO () Source #
acb_get_mag_lower u x
Sets u to a lower bound for the absolute value of x.
acb_contains :: Ptr CAcb -> Ptr CAcb -> IO CInt Source #
acb_contains x y
Returns nonzero iff y is contained in x.
acb_contains_zero :: Ptr CAcb -> IO CInt Source #
acb_contains_zero x
Returns nonzero iff zero is contained in x.
acb_contains_int :: Ptr CAcb -> IO CInt Source #
acb_contains_int x
Returns nonzero iff the complex interval represented by x contains an integer.
acb_contains_interior :: Ptr CAcb -> Ptr CAcb -> IO CInt Source #
acb_contains_interior x y
Tests if y is contained in the interior of x. This predicate always evaluates to false if x and y are both real-valued, since an imaginary part of 0 is not considered contained in the interior of the point interval 0. More generally, the same problem occurs for intervals with an exact real or imaginary part. Such intervals must be handled specially by the user where a different interpretation is intended.
acb_rel_error_bits :: Ptr CAcb -> IO CLong Source #
acb_rel_error_bits x
Returns the effective relative error of x measured in bits. This is
computed as if calling arb_rel_error_bits
on the real ball whose
midpoint is the larger out of the real and imaginary midpoints of x,
and whose radius is the larger out of the real and imaginary radiuses of
x.
acb_rel_accuracy_bits :: Ptr CAcb -> IO CLong Source #
acb_rel_accuracy_bits x
Returns the effective relative accuracy of x measured in bits, equal
to the negative of the return value from acb_rel_error_bits
.
acb_rel_one_accuracy_bits :: Ptr CAcb -> IO CLong Source #
acb_rel_one_accuracy_bits x
Given a ball with midpoint m and radius r, returns an approximation of the relative accuracy of \([\max(1,|m|) \pm r]\) measured in bits.
acb_bits :: Ptr CAcb -> IO CLong Source #
acb_bits x
Returns the maximum of arb_bits applied to the real and imaginary parts of x, i.e. the minimum precision sufficient to represent x exactly.
acb_indeterminate :: Ptr CAcb -> IO () Source #
acb_indeterminate x
Sets x to \([\operatorname{NaN} \pm \infty] + [\operatorname{NaN} \pm \infty]i\), representing an indeterminate result.
acb_trim :: Ptr CAcb -> Ptr CAcb -> IO () Source #
acb_trim y x
Sets y to a a copy of x with both the real and imaginary parts
trimmed (see arb_trim
).
acb_is_real :: Ptr CAcb -> IO CInt Source #
acb_is_real x
Returns nonzero iff the imaginary part of x is zero. It does not test whether the real part of x also is finite.
acb_get_unique_fmpz :: Ptr CFmpz -> Ptr CAcb -> IO CInt Source #
acb_get_unique_fmpz z x
If x contains a unique integer, sets z to that value and returns nonzero. Otherwise (if x represents no integers or more than one integer), returns zero.
Complex parts
acb_get_real :: Ptr CArb -> Ptr CAcb -> IO () Source #
acb_get_real re z
Sets re to the real part of z.
acb_get_imag :: Ptr CArb -> Ptr CAcb -> IO () Source #
acb_get_imag im z
Sets im to the imaginary part of z.
acb_arg :: Ptr CArb -> Ptr CAcb -> CLong -> IO () Source #
acb_arg r z prec
Sets r to a real interval containing the complex argument (phase) of
z. We define the complex argument have a discontinuity on
\((-\infty,0]\), with the special value \(\operatorname{arg}(0) = 0\),
and \(\operatorname{arg}(a+0i) = \pi\) for \(a < 0\). Equivalently, if
\(z = a+bi\), the argument is given by \(\operatorname{atan2}(b,a)\)
(see arb_atan2
).
acb_abs :: Ptr CArb -> Ptr CAcb -> CLong -> IO () Source #
acb_abs r z prec
Sets r to the absolute value of z.
acb_sgn :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_sgn r z prec
Sets r to the complex sign of z, defined as 0 if z is exactly zero and the projection onto the unit circle \(z / |z| = \exp(i \arg(z))\) otherwise.
acb_csgn :: Ptr CArb -> Ptr CAcb -> IO () Source #
acb_csgn r z
Sets r to the extension of the real sign function taking the value 1 for z strictly in the right half plane, -1 for z strictly in the left half plane, and the sign of the imaginary part when z is on the imaginary axis. Equivalently, \(\operatorname{csgn}(z) = z / \sqrt{z^2}\) except that the value is 0 when z is exactly zero.
Arithmetic
acb_neg_round :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_neg_round z x prec
Sets z to the negation of x.
acb_conj :: Ptr CAcb -> Ptr CAcb -> IO () Source #
acb_conj z x
Sets z to the complex conjugate of x.
acb_add :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_add z x y prec
Sets z to the sum of x and y.
acb_sub :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_sub z x y prec
Sets z to the difference of x and y.
acb_mul_onei :: Ptr CAcb -> Ptr CAcb -> IO () Source #
acb_mul_onei z x
Sets z to x multiplied by the imaginary unit.
acb_div_onei :: Ptr CAcb -> Ptr CAcb -> IO () Source #
acb_div_onei z x
Sets z to x divided by the imaginary unit.
acb_mul_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO () Source #
acb_mul_arb z x y prec
Sets z to the product of x and y.
acb_mul :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_mul z x y 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. If x and y are the same pointers, they are assumed to represent the same mathematical quantity and the squaring formula is used.
acb_mul_2exp_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> IO () Source #
acb_mul_2exp_fmpz z x e
Sets z to x multiplied by \(2^e\), without rounding.
acb_cube :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_cube z x prec
Sets z to x cubed, computed efficiently using two real squarings, two real multiplications, and scalar operations.
acb_addmul_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO () Source #
acb_addmul_arb z x y prec
Sets z to z plus the product of x and y.
acb_submul_arb :: Ptr CAcb -> Ptr CAcb -> Ptr CArb -> CLong -> IO () Source #
acb_submul_arb z x y prec
Sets z to z minus the product of x and y.
acb_inv :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_inv z x prec
Sets z to the multiplicative inverse of x.
acb_div :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_div z x y prec
Sets z to the quotient of x and y.
Dot product
acb_dot_precise :: Ptr CAcb -> Ptr CAcb -> CInt -> Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> CLong -> CLong -> IO () Source #
acb_dot_precise res s subtract x xstep y ystep len prec
Computes the dot product of the vectors x and y, setting res to \(s + (-1)^{subtract} \sum_{i=0}^{len-1} x_i y_i\).
The initial term s is optional and can be omitted by passing NULL (equivalently, \(s = 0\)). The parameter subtract must be 0 or 1. The length len is allowed to be negative, which is equivalent to a length of zero. The parameters xstep or ystep specify a step length for traversing subsequences of the vectors x and y; either can be negative to step in the reverse direction starting from the initial pointer. Aliasing is allowed between res and s but not between res and the entries of x and y.
The default version determines the optimal precision for each term and performs all internal calculations using mpn arithmetic with minimal overhead. This is the preferred way to compute a dot product; it is generally much faster and more precise than a simple loop.
The simple version performs fused multiply-add operations in a simple loop. This can be used for testing purposes and is also used as a fallback by the default version when the exponents are out of range for the optimized code.
The precise version computes the dot product exactly up to the final rounding. This can be extremely slow and is only intended for testing.
acb_approx_dot :: Ptr CAcb -> Ptr CAcb -> CInt -> Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> CLong -> CLong -> IO () Source #
acb_approx_dot res s subtract x xstep y ystep len prec
Computes an approximate dot product without error bounds. The radii of the inputs are ignored (only the midpoints are read) and only the midpoint of the output is written.
acb_dot_ui :: Ptr CAcb -> Ptr CAcb -> CInt -> Ptr CAcb -> CLong -> Ptr CULong -> CLong -> CLong -> CLong -> IO () Source #
acb_dot_ui res initial subtract x xstep y ystep len prec
Equivalent to acb_dot
, but with integers in the array y. The uiui
and siui versions take an array of double-limb integers as input; the
siui version assumes that these represent signed integers in two's
complement form.
Mathematical constants
acb_const_pi :: Ptr CAcb -> CLong -> IO () Source #
acb_const_pi y prec
Sets y to the constant \(\pi\).
Powers and roots
acb_sqrt :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_sqrt r z prec
Sets r to the square root of z. If either the real or imaginary part is exactly zero, only a single real square root is needed. Generally, we use the formula \(\sqrt{a+bi} = u/2 + ib/u, u = \sqrt{2(|a+bi|+a)}\), requiring two real square root extractions.
acb_sqrt_analytic :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_sqrt_analytic r z analytic prec
Computes the square root. If analytic is set, gives a NaN-containing result if z touches the branch cut.
acb_rsqrt :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_rsqrt r z prec
Sets r to the reciprocal square root of z. If either the real or imaginary part is exactly zero, only a single real reciprocal square root is needed. Generally, we use the formula \(1/\sqrt{a+bi} = ((a+r) - bi)/v, r = |a+bi|, v = \sqrt{r |a+bi+r|^2}\), requiring one real square root and one real reciprocal square root.
acb_rsqrt_analytic :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_rsqrt_analytic r z analytic prec
Computes the reciprocal square root. If analytic is set, gives a NaN-containing result if z touches the branch cut.
acb_quadratic_roots_fmpz :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> Ptr CFmpz -> Ptr CFmpz -> CLong -> IO () Source #
acb_quadratic_roots_fmpz r1 r2 a b c prec
Sets r1 and r2 to the roots of the quadratic polynomial \(ax^2 + bx + c\). Requires that a is nonzero. This function is implemented so that both roots are computed accurately even when direct use of the quadratic formula would lose accuracy.
acb_root_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO () Source #
acb_root_ui r z k prec
Sets r to the principal k-th root of z.
acb_pow_si :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO () Source #
acb_pow_si y b e prec
Sets \(y = b^e\) using binary exponentiation (with an initial division
if \(e < 0\)). Note that these functions can get slow if the exponent is
extremely large (in such cases acb_pow
may be superior).
acb_pow :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_pow z x y prec
Sets \(z = x^y\), computed using binary exponentiation if \(y\) if a small exact integer, as \(z = (x^{1/2})^{2y}\) if \(y\) is a small exact half-integer, and generally as \(z = \exp(y \log x)\).
acb_pow_analytic :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_pow_analytic r x y analytic prec
Computes the power \(x^y\). If analytic is set, gives a NaN-containing result if x touches the branch cut (unless y is an integer).
acb_unit_root :: Ptr CAcb -> CULong -> CLong -> IO () Source #
acb_unit_root res order prec
Sets res to \(\exp(\frac{2i\pi}{\mathrm{order}})\) to precision prec.
Exponentials and logarithms
acb_exp :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_exp y z prec
Sets y to the exponential function of z, computed as \(\exp(a+bi) = \exp(a) \left( \cos(b) + \sin(b) i \right)\).
acb_exp_pi_i :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_exp_pi_i y z prec
Sets y to \(\exp(\pi i z)\).
acb_exp_invexp :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_exp_invexp s t z prec
Sets \(s = \exp(z)\) and \(t = \exp(-z)\).
acb_expm1 :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_expm1 res z prec
Sets res to \(\exp(z)-1\), using a more accurate method when \(z \approx 0\).
acb_log :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_log y z 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)\).
acb_log_analytic :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_log_analytic r z analytic prec
Computes the natural logarithm. If analytic is set, gives a NaN-containing result if z touches the branch cut.
acb_log1p :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_log1p z x prec
Sets \(z = \log(1+x)\), computed accurately when \(x \approx 0\).
Trigonometric functions
acb_sin_cos :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_sin_cos s c z prec
Sets \(s = \sin(z)\), \(c = \cos(z)\), evaluated as \(\sin(a+bi) = \sin(a)\cosh(b) + i \cos(a)\sinh(b)\), \(\cos(a+bi) = \cos(a)\cosh(b) - i \sin(a)\sinh(b)\).
acb_tan :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_tan s z prec
Sets \(s = \tan(z) = \sin(z) / \cos(z)\). For large imaginary parts, the function is evaluated in a numerically stable way as \(\pm i\) plus a decreasing exponential factor.
acb_cot :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_cot s z prec
Sets \(s = \cot(z) = \cos(z) / \sin(z)\). For large imaginary parts, the function is evaluated in a numerically stable way as \(\pm i\) plus a decreasing exponential factor.
acb_sin_cos_pi :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_sin_cos_pi s c z prec
Sets \(s = \sin(\pi z)\), \(c = \cos(\pi z)\), evaluating the
trigonometric factors of the real and imaginary part accurately via
arb_sin_cos_pi
.
acb_tan_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_tan_pi s z prec
Sets \(s = \tan(\pi z)\). Uses the same algorithm as acb_tan
, but
evaluates the sine and cosine accurately via arb_sin_cos_pi
.
acb_cot_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_cot_pi s z prec
Sets \(s = \cot(\pi z)\). Uses the same algorithm as acb_cot
, but
evaluates the sine and cosine accurately via arb_sin_cos_pi
.
acb_sec :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_sec res z prec
Computes \(\sec(z) = 1 / \cos(z)\).
acb_csc :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_csc res z prec
Computes \(\csc(x) = 1 / \sin(z)\).
acb_csc_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_csc_pi res z prec
Computes \(\csc(\pi x) = 1 / \sin(\pi z)\). Evaluates the sine
accurately via acb_sin_pi
.
acb_sinc :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_sinc s z prec
Sets \(s = \operatorname{sinc}(x) = \sin(z) / z\).
acb_sinc_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_sinc_pi s z prec
Sets \(s = \operatorname{sinc}(\pi x) = \sin(\pi z) / (\pi z)\).
Inverse trigonometric functions
acb_asin :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_asin res z prec
Sets res to \(\operatorname{asin}(z) = -i \log(iz + \sqrt{1-z^2})\).
acb_acos :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_acos res z prec
Sets res to \(\operatorname{acos}(z) = \tfrac{1}{2} \pi - \operatorname{asin}(z)\).
acb_atan :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_atan res z prec
Sets res to \(\operatorname{atan}(z) = \tfrac{1}{2} i (\log(1-iz)-\log(1+iz))\).
Hyperbolic functions
acb_coth :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_coth s z prec
Respectively computes \(\sinh(z) = -i\sin(iz)\), \(\cosh(z) = \cos(iz)\), \(\tanh(z) = -i\tan(iz)\), \(\coth(z) = i\cot(iz)\).
acb_sech :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_sech res z prec
Computes \(\operatorname{sech}(z) = 1 / \cosh(z)\).
acb_csch :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_csch res z prec
Computes \(\operatorname{csch}(z) = 1 / \sinh(z)\).
Inverse hyperbolic functions
acb_asinh :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_asinh res z prec
Sets res to \(\operatorname{asinh}(z) = -i \operatorname{asin}(iz)\).
acb_acosh :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_acosh res z prec
Sets res to \(\operatorname{acosh}(z) = \log(z + \sqrt{z+1} \sqrt{z-1})\).
acb_atanh :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_atanh res z prec
Sets res to \(\operatorname{atanh}(z) = -i \operatorname{atan}(iz)\).
Lambert W function
acb_lambertw_asymp :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CLong -> CLong -> CLong -> IO () Source #
acb_lambertw_asymp res z k L M prec
Sets res to the Lambert W function \(W_k(z)\) computed using L and M terms in the bivariate series giving the asymptotic expansion at zero or infinity. This algorithm is valid everywhere, but the error bound is only finite when \(|\log(z)|\) is sufficiently large.
acb_lambertw_check_branch :: Ptr CAcb -> Ptr CFmpz -> CLong -> IO CInt Source #
acb_lambertw_check_branch w k prec
Tests if w definitely lies in the image of the branch \(W_k(z)\). This function is used internally to verify that a computed approximation of the Lambert W function lies on the intended branch. Note that this will necessarily evaluate to false for points exactly on (or overlapping) the branch cuts, where a different algorithm has to be used.
acb_lambertw_bound_deriv :: Ptr CMag -> Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> IO () Source #
acb_lambertw_bound_deriv res z ez1 k
Sets res to an upper bound for \(|W_k'(z)|\). The input ez1 should contain the precomputed value of \(ez+1\).
Along the real line, the directional derivative of \(W_k(z)\) is understood to be taken. As a result, the user must handle the branch cut discontinuity separately when using this function to bound perturbations in the value of \(W_k(z)\).
acb_lambertw :: Ptr CAcb -> Ptr CAcb -> Ptr CFmpz -> CInt -> CLong -> IO () Source #
acb_lambertw res z k flags prec
Sets res to the Lambert W function \(W_k(z)\) where the index k selects the branch (with \(k = 0\) giving the principal branch). The placement of branch cuts follows [CGHJK1996].
If flags is nonzero, nonstandard branch cuts are used.
If flags is set to ACB_LAMBERTW_LEFT, computes \(W_{\mathrm{left}|k}(z)\) which corresponds to \(W_k(z)\) in the upper half plane and \(W_{k+1}(z)\) in the lower half plane, connected continuously to the left of the branch points. In other words, the branch cut on \((-\infty,0)\) is rotated counterclockwise to \((0,+\infty)\). (For \(k = -1\) and \(k = 0\), there is also a branch cut on \((-1/e,0)\), continuous from below instead of from above to maintain counterclockwise continuity.)
If flags is set to ACB_LAMBERTW_MIDDLE, computes \(W_{\mathrm{middle}}(z)\) which corresponds to \(W_{-1}(z)\) in the upper half plane and \(W_{1}(z)\) in the lower half plane, connected continuously through \((-1/e,0)\) with branch cuts on \((-\infty,-1/e)\) and \((0,+\infty)\). \(W_{\mathrm{middle}}(z)\) extends the real analytic function \(W_{-1}(x)\) defined on \((-1/e,0)\) to a complex analytic function, whereas the standard branch \(W_{-1}(z)\) has a branch cut along the real segment.
The algorithm used to compute the Lambert W function is described in [Joh2017b].
Rising factorials
acb_rising_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> CLong -> IO () Source #
acb_rising_ui z x n prec
Computes the rising factorial \(z = x (x+1) (x+2) \cdots (x+n-1)\).
These functions are aliases for acb_hypgeom_rising_ui
and
acb_hypgeom_rising
.
Gamma function
acb_gamma :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_gamma y x prec
Computes the gamma function \(y = \Gamma(x)\). This is an alias for
acb_hypgeom_gamma
.
acb_rgamma :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_rgamma y x prec
Computes the reciprocal gamma function \(y = 1/\Gamma(x)\), avoiding
division by zero at the poles of the gamma function. This is an alias
for acb_hypgeom_rgamma
.
acb_lgamma :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_lgamma y x prec
Computes the logarithmic gamma function \(y = \log \Gamma(x)\). This is
an alias for acb_hypgeom_lgamma
.
The branch cut of the logarithmic gamma function is placed on the
negative half-axis, which means that
\(\log \Gamma(z) + \log z = \log \Gamma(z+1)\) holds for all \(z\),
whereas \(\log \Gamma(z) \ne \log(\Gamma(z))\) in general. In the left
half plane, the reflection formula with correct branch structure is
evaluated via acb_log_sin_pi
.
acb_digamma :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_digamma y x prec
Computes the digamma function \(y = \psi(x) = (\log \Gamma(x))' = \Gamma'(x) / \Gamma(x)\).
acb_log_sin_pi :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_log_sin_pi res z prec
Computes the logarithmic sine function defined by
\[`\] \[S(z) = \log(\pi) - \log \Gamma(z) + \log \Gamma(1-z)\]
which is equal to
\[`\] \[S(z) = \int_{1/2}^z \pi \cot(\pi t) dt\]
where the path of integration goes through the upper half plane if \(0 < \arg(z) \le \pi\) and through the lower half plane if \(-\pi < \arg(z) \le 0\). Equivalently,
\[`\] \[S(z) = \log(\sin(\pi(z-n))) \mp n \pi i, \quad n = \lfloor \operatorname{re}(z) \rfloor\]
where the negative sign is taken if \(0 < \arg(z) \le \pi\) and the positive sign is taken otherwise (if the interval \(\arg(z)\) does not certainly satisfy either condition, the union of both cases is computed). After subtracting n, we have \(0 \le \operatorname{re}(z) < 1\). In this strip, we use use \(S(z) = \log(\sin(\pi(z)))\) if the imaginary part of z is small. Otherwise, we use \(S(z) = i \pi (z-1/2) + \log((1+e^{-2i\pi z})/2)\) in the lower half-plane and the conjugated expression in the upper half-plane to avoid exponent overflow.
The function is evaluated at the midpoint and the propagated error is computed from \(S'(z)\) to get a continuous change when \(z\) is non-real and \(n\) spans more than one possible integer value.
acb_polygamma :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_polygamma res s z prec
Sets res to the value of the generalized polygamma function \(\psi(s,z)\).
If s is a nonnegative order, this is simply the s-order derivative
of the digamma function. If \(s = 0\), this function simply calls the
digamma function internally. For integers \(s \ge 1\), it calls the
Hurwitz zeta function. Note that for small integers \(s \ge 1\), it can
be faster to use acb_poly_digamma_series
and read off the
coefficients.
The generalization to other values of s is due to Espinosa and Moll [EM2004]:
\[`\] \[\psi(s,z) = \frac{\zeta'(s+1,z) + (\gamma + \psi(-s)) \zeta(s+1,z)}{\Gamma(-s)}\]
acb_log_barnes_g :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_log_barnes_g res z prec
Computes Barnes G-function or the logarithmic Barnes G-function, respectively. The logarithmic version has branch cuts on the negative real axis and is continuous elsewhere in the complex plane, in analogy with the logarithmic gamma function. The functional equation
\[`\] \[\log G(z+1) = \log \Gamma(z) + \log G(z).\]
holds for all z.
For small integers, we directly use the recurrence relation \(G(z+1) = \Gamma(z) G(z)\) together with the initial value \(G(1) = 1\). For general z, we use the formula
\[`\] \[\log G(z) = (z-1) \log \Gamma(z) - \zeta'(-1,z) + \zeta'(-1).\]
Zeta function
acb_zeta :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_zeta z s prec
Sets z to the value of the Riemann zeta function \(\zeta(s)\). Note:
for computing derivatives with respect to \(s\), use
acb_poly_zeta_series
or related methods.
This is a wrapper of acb_dirichlet_zeta
.
acb_hurwitz_zeta :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_hurwitz_zeta z s a prec
Sets z to the value of the Hurwitz zeta function \(\zeta(s, a)\).
Note: for computing derivatives with respect to \(s\), use
acb_poly_zeta_series
or related methods.
This is a wrapper of acb_dirichlet_hurwitz
.
acb_bernoulli_poly_ui :: Ptr CAcb -> CULong -> Ptr CAcb -> CLong -> IO () Source #
acb_bernoulli_poly_ui res n x prec
Sets res to the value of the Bernoulli polynomial \(B_n(x)\).
Warning: this function is only fast if either n or x is a small integer.
This function reads Bernoulli numbers from the global cache if they are already cached, but does not automatically extend the cache by itself.
Polylogarithms
acb_polylog_si :: Ptr CAcb -> CLong -> Ptr CAcb -> CLong -> IO () Source #
acb_polylog_si w s z prec
Sets w to the polylogarithm \(\operatorname{Li}_s(z)\).
Arithmetic-geometric mean
acb_agm1 :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_agm1 m z prec
Sets m to the arithmetic-geometric mean \(M(z) = \operatorname{agm}(1,z)\), defined such that the function is continuous in the complex plane except for a branch cut along the negative half axis (where it is continuous from above). This corresponds to always choosing an "optimal" branch for the square root in the arithmetic-geometric mean iteration.
acb_agm1_cpx :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO () Source #
acb_agm1_cpx m z len prec
Sets the coefficients in the array m to the power series expansion of the arithmetic-geometric mean at the point z truncated to length len, i.e. \(M(z+x) \in \mathbb{C}[[x]]\).
acb_agm :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
acb_agm m x y prec
Sets m to the arithmetic-geometric mean of x and y. The square roots in the AGM iteration are chosen so as to form the "optimal" AGM sequence. This gives a well-defined function of x and y except when \(x / y\) is a negative real number, in which case there are two optimal AGM sequences. In that case, an arbitrary but consistent choice is made (if a decision cannot be made due to inexact arithmetic, the union of both choices is returned).
Other special functions
acb_chebyshev_u_ui :: Ptr CAcb -> CULong -> Ptr CAcb -> CLong -> IO () Source #
acb_chebyshev_u_ui a n x prec
Evaluates the Chebyshev polynomial of the first kind \(a = T_n(x)\) or the Chebyshev polynomial of the second kind \(a = U_n(x)\).
acb_chebyshev_u2_ui :: Ptr CAcb -> Ptr CAcb -> CULong -> Ptr CAcb -> CLong -> IO () Source #
acb_chebyshev_u2_ui a b n x prec
Simultaneously evaluates \(a = T_n(x), b = T_{n-1}(x)\) or \(a = U_n(x), b = U_{n-1}(x)\). Aliasing between a, b and x is not permitted.
Piecewise real functions
acb_real_abs :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_real_abs res z analytic prec
The absolute value is extended to \(+z\) in the right half plane and \(-z\) in the left half plane, with a discontinuity on the vertical line \(\operatorname{Re}(z) = 0\).
acb_real_sgn :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_real_sgn res z analytic prec
The sign function is extended to \(+1\) in the right half plane and
\(-1\) in the left half plane, with a discontinuity on the vertical line
\(\operatorname{Re}(z) = 0\). If analytic is not set, this is
effectively the same function as acb_csgn
.
acb_real_heaviside :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_real_heaviside res z analytic prec
The Heaviside step function (or unit step function) is extended to \(+1\) in the right half plane and \(0\) in the left half plane, with a discontinuity on the vertical line \(\operatorname{Re}(z) = 0\).
acb_real_floor :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_real_floor res z analytic prec
The floor function is extended to a piecewise constant function equal to \(n\) in the strips with real part \((n,n+1)\), with discontinuities on the vertical lines \(\operatorname{Re}(z) = n\).
acb_real_ceil :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_real_ceil res z analytic prec
The ceiling function is extended to a piecewise constant function equal to \(n+1\) in the strips with real part \((n,n+1)\), with discontinuities on the vertical lines \(\operatorname{Re}(z) = n\).
acb_real_max :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_real_max res x y analytic prec
The real function \(\max(x,y)\) is extended to a piecewise analytic function of two variables by returning \(x\) when \(\operatorname{Re}(x) \ge \operatorname{Re}(y)\) and returning \(y\) when \(\operatorname{Re}(x) < \operatorname{Re}(y)\), with discontinuities where \(\operatorname{Re}(x) = \operatorname{Re}(y)\).
acb_real_min :: Ptr CAcb -> Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_real_min res x y analytic prec
The real function \(\min(x,y)\) is extended to a piecewise analytic function of two variables by returning \(x\) when \(\operatorname{Re}(x) \le \operatorname{Re}(y)\) and returning \(y\) when \(\operatorname{Re}(x) > \operatorname{Re}(y)\), with discontinuities where \(\operatorname{Re}(x) = \operatorname{Re}(y)\).
acb_real_sqrtpos :: Ptr CAcb -> Ptr CAcb -> CInt -> CLong -> IO () Source #
acb_real_sqrtpos res z analytic prec
Extends the real square root function on \([0,+\infty)\) to the usual
complex square root on the cut plane. Like arb_sqrtpos
, only the
nonnegative part of z is considered if z is purely real and
analytic is not set. This is useful for integrating \(\sqrt{f(x)}\)
where it is known that \(f(x) \ge 0\): unlike acb_sqrt_analytic
, no
spurious imaginary terms \([\pm \varepsilon] i\) are created when the
balls computed for \(f(x)\) straddle zero.
Vector functions
_acb_vec_zero :: Ptr CAcb -> CLong -> IO () Source #
_acb_vec_zero A n
Sets all entries in vec to zero.
_acb_vec_is_zero :: Ptr CAcb -> CLong -> IO CInt Source #
_acb_vec_is_zero vec len
Returns nonzero iff all entries in x are zero.
_acb_vec_is_real :: Ptr CAcb -> CLong -> IO CInt Source #
_acb_vec_is_real v len
Returns nonzero iff all entries in x have zero imaginary part.
_acb_vec_set :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
_acb_vec_set res vec len
Sets res to a copy of vec.
_acb_vec_set_round :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO () Source #
_acb_vec_set_round res vec len prec
Sets res to a copy of vec, rounding each entry to prec bits.
_acb_vec_swap :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
_acb_vec_swap vec1 vec2 len
Swaps the entries of vec1 and vec2.
_acb_vec_scalar_div_fmpz :: Ptr CAcb -> Ptr CAcb -> CLong -> Ptr CFmpz -> CLong -> IO () Source #
_acb_vec_scalar_div_fmpz res vec len c prec
Performs the respective scalar operation elementwise.
_acb_vec_bits :: Ptr CAcb -> CLong -> IO CLong Source #
_acb_vec_bits vec len
Returns the maximum of arb_bits
for all entries in vec.
_acb_vec_set_powers :: Ptr CAcb -> Ptr CAcb -> CLong -> CLong -> IO () Source #
_acb_vec_set_powers xs x len prec
Sets xs to the powers \(1, x, x^2, \ldots, x^{len-1}\).
_acb_vec_unit_roots :: Ptr CAcb -> CLong -> CLong -> CLong -> IO () Source #
_acb_vec_unit_roots z order len prec
Sets z to the powers \(1,z,z^2,\dots z^{\mathrm{len}-1}\) where \(z=\exp(\frac{2i\pi}{\mathrm{order}})\) to precision prec. order can be taken negative.
In order to avoid precision loss, this function does not simply compute powers of a primitive root.
_acb_vec_add_error_mag_vec :: Ptr CAcb -> Ptr CMag -> CLong -> IO () Source #
_acb_vec_add_error_mag_vec res err len
Adds the magnitude of each entry in err to the radius of the corresponding entry in res.
_acb_vec_indeterminate :: Ptr CAcb -> CLong -> IO () Source #
_acb_vec_indeterminate vec len
Applies acb_indeterminate
elementwise.
_acb_vec_trim :: Ptr CAcb -> Ptr CAcb -> CLong -> IO () Source #
_acb_vec_trim res vec len
Applies acb_trim
elementwise.
_acb_vec_get_unique_fmpz_vec :: Ptr CFmpz -> Ptr CAcb -> CLong -> IO CInt Source #
_acb_vec_get_unique_fmpz_vec res vec len
Calls acb_get_unique_fmpz
elementwise and returns nonzero if all
entries can be rounded uniquely to integers. If any entry in vec
cannot be rounded uniquely to an integer, returns zero.