2016-04-26 17:20:05 +02:00
|
|
|
/*
|
2014-05-15 16:36:30 +02:00
|
|
|
Copyright (C) 2012 Fredrik Johansson
|
|
|
|
|
2016-04-26 17:20:05 +02:00
|
|
|
This file is part of Arb.
|
|
|
|
|
|
|
|
Arb is free software: you can redistribute it and/or modify it under
|
|
|
|
the terms of the GNU Lesser General Public License (LGPL) as published
|
|
|
|
by the Free Software Foundation; either version 2.1 of the License, or
|
|
|
|
(at your option) any later version. See <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
2014-05-15 16:36:30 +02:00
|
|
|
|
|
|
|
#ifndef ACB_H
|
|
|
|
#define ACB_H
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
#ifdef ACB_INLINES_C
|
|
|
|
#define ACB_INLINE
|
|
|
|
#else
|
|
|
|
#define ACB_INLINE static __inline__
|
|
|
|
#endif
|
|
|
|
|
2016-01-01 17:18:55 -05:00
|
|
|
#include <stdio.h>
|
2014-05-15 16:36:30 +02:00
|
|
|
#include "arf.h"
|
|
|
|
#include "arb.h"
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
arb_struct real;
|
|
|
|
arb_struct imag;
|
|
|
|
}
|
|
|
|
acb_struct;
|
|
|
|
|
|
|
|
typedef acb_struct acb_t[1];
|
|
|
|
typedef acb_struct * acb_ptr;
|
|
|
|
typedef const acb_struct * acb_srcptr;
|
|
|
|
|
|
|
|
#define acb_realref(x) (&(x)->real)
|
|
|
|
#define acb_imagref(x) (&(x)->imag)
|
|
|
|
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_init(acb_t x)
|
|
|
|
{
|
|
|
|
arb_init(acb_realref(x));
|
|
|
|
arb_init(acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2016-07-04 23:59:04 +02:00
|
|
|
void acb_clear(acb_t x);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE acb_ptr
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_init(slong n)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_ptr v = (acb_ptr) flint_malloc(sizeof(acb_struct) * n);
|
|
|
|
|
|
|
|
for (i = 0; i < n; i++)
|
|
|
|
acb_init(v + i);
|
|
|
|
|
|
|
|
return v;
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_clear(acb_ptr v, slong n)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < n; i++)
|
|
|
|
acb_clear(v + i);
|
|
|
|
flint_free(v);
|
|
|
|
}
|
|
|
|
|
2015-10-02 09:03:53 +02:00
|
|
|
ACB_INLINE arb_ptr acb_real_ptr(acb_t z) { return acb_realref(z); }
|
|
|
|
ACB_INLINE arb_ptr acb_imag_ptr(acb_t z) { return acb_imagref(z); }
|
|
|
|
|
2015-09-24 17:46:29 +02:00
|
|
|
ACB_INLINE void
|
|
|
|
acb_get_real(arb_t re, const acb_t z)
|
|
|
|
{
|
|
|
|
arb_set(re, acb_realref(z));
|
|
|
|
}
|
|
|
|
|
|
|
|
ACB_INLINE void
|
|
|
|
acb_get_imag(arb_t im, const acb_t z)
|
|
|
|
{
|
|
|
|
arb_set(im, acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_is_zero(const acb_t z)
|
|
|
|
{
|
|
|
|
return arb_is_zero(acb_realref(z)) && arb_is_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_is_one(const acb_t z)
|
|
|
|
{
|
|
|
|
return arb_is_one(acb_realref(z)) && arb_is_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_is_exact(const acb_t z)
|
|
|
|
{
|
|
|
|
return arb_is_exact(acb_realref(z)) && arb_is_exact(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2015-01-21 16:14:46 +01:00
|
|
|
ACB_INLINE int
|
|
|
|
acb_is_int(const acb_t z)
|
|
|
|
{
|
|
|
|
return arb_is_zero(acb_imagref(z)) && arb_is_int(acb_realref(z));
|
|
|
|
}
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_zero(acb_t z)
|
|
|
|
{
|
|
|
|
arb_zero(acb_realref(z));
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_one(acb_t z)
|
|
|
|
{
|
|
|
|
arb_one(acb_realref(z));
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_onei(acb_t z)
|
|
|
|
{
|
|
|
|
arb_zero(acb_realref(z));
|
|
|
|
arb_one(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_set(acb_t z, const acb_t x)
|
|
|
|
{
|
|
|
|
arb_set(acb_realref(z), acb_realref(x));
|
|
|
|
arb_set(acb_imagref(z), acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_set_round(acb_t z, const acb_t x, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_set_round(acb_realref(z), acb_realref(x), prec);
|
|
|
|
arb_set_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_neg_round(acb_t z, const acb_t x, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_neg_round(acb_realref(z), acb_realref(x), prec);
|
|
|
|
arb_neg_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_swap(acb_t z, acb_t x)
|
|
|
|
{
|
|
|
|
arb_swap(acb_realref(z), acb_realref(x));
|
|
|
|
arb_swap(acb_imagref(z), acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_equal(const acb_t x, const acb_t y)
|
|
|
|
{
|
|
|
|
return arb_equal(acb_realref(x), acb_realref(y)) &&
|
2015-04-18 20:19:11 +02:00
|
|
|
arb_equal(acb_imagref(x), acb_imagref(y));
|
|
|
|
}
|
|
|
|
|
2016-01-18 14:37:59 +01:00
|
|
|
ACB_INLINE int
|
|
|
|
acb_equal_si(const acb_t x, slong y)
|
|
|
|
{
|
|
|
|
return arb_equal_si(acb_realref(x), y) && arb_is_zero(acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2015-04-18 20:19:11 +02:00
|
|
|
ACB_INLINE int
|
|
|
|
acb_eq(const acb_t x, const acb_t y)
|
|
|
|
{
|
|
|
|
return arb_eq(acb_realref(x), acb_realref(y)) &&
|
|
|
|
arb_eq(acb_imagref(x), acb_imagref(y));
|
|
|
|
}
|
|
|
|
|
|
|
|
ACB_INLINE int
|
|
|
|
acb_ne(const acb_t x, const acb_t y)
|
|
|
|
{
|
|
|
|
return arb_ne(acb_realref(x), acb_realref(y)) ||
|
|
|
|
arb_ne(acb_imagref(x), acb_imagref(y));
|
2014-05-15 16:36:30 +02:00
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_overlaps(const acb_t x, const acb_t y)
|
|
|
|
{
|
|
|
|
return arb_overlaps(acb_realref(x), acb_realref(y)) &&
|
|
|
|
arb_overlaps(acb_imagref(x), acb_imagref(y));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_contains_zero(const acb_t x)
|
|
|
|
{
|
|
|
|
return arb_contains_zero(acb_realref(x)) &&
|
|
|
|
arb_contains_zero(acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_contains_fmpq(const acb_t x, const fmpq_t y)
|
|
|
|
{
|
|
|
|
return arb_contains_fmpq(acb_realref(x), y) &&
|
|
|
|
arb_contains_zero(acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_contains_fmpz(const acb_t x, const fmpz_t y)
|
|
|
|
{
|
|
|
|
return arb_contains_fmpz(acb_realref(x), y) &&
|
|
|
|
arb_contains_zero(acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_contains(const acb_t x, const acb_t y)
|
|
|
|
{
|
|
|
|
return arb_contains(acb_realref(x), acb_realref(y)) &&
|
|
|
|
arb_contains(acb_imagref(x), acb_imagref(y));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_set_ui(acb_t z, ulong c)
|
|
|
|
{
|
|
|
|
arb_set_ui(acb_realref(z), c);
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2015-08-13 06:05:23 -04:00
|
|
|
ACB_INLINE void
|
|
|
|
acb_set_d(acb_t z, double c)
|
|
|
|
{
|
|
|
|
arb_set_d(acb_realref(z), c);
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_set_si(acb_t z, slong c)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_set_si(acb_realref(z), c);
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2015-08-11 09:04:59 -04:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_set_si_si(acb_t z, slong x, slong y)
|
2015-08-11 09:04:59 -04:00
|
|
|
{
|
2015-08-23 12:59:52 +02:00
|
|
|
arb_set_si(acb_realref(z), x);
|
|
|
|
arb_set_si(acb_imagref(z), y);
|
2015-08-11 09:04:59 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
ACB_INLINE void
|
|
|
|
acb_set_d_d(acb_t z, double x, double y)
|
2015-08-11 08:19:10 -04:00
|
|
|
{
|
2015-08-11 09:04:59 -04:00
|
|
|
arb_set_d(acb_realref(z), x);
|
|
|
|
arb_set_d(acb_imagref(z), y);
|
2015-08-11 08:19:10 -04:00
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_set_fmpz(acb_t z, const fmpz_t c)
|
|
|
|
{
|
|
|
|
arb_set_fmpz(acb_realref(z), c);
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2015-08-13 06:05:23 -04:00
|
|
|
ACB_INLINE void
|
|
|
|
acb_set_fmpz_fmpz(acb_t z, const fmpz_t x, const fmpz_t y)
|
|
|
|
{
|
|
|
|
arb_set_fmpz(acb_realref(z), x);
|
|
|
|
arb_set_fmpz(acb_imagref(z), y);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_set_round_fmpz(acb_t z, const fmpz_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_set_round_fmpz(acb_realref(z), y, prec);
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2015-11-04 16:08:27 +01:00
|
|
|
int acb_contains_int(const acb_t x);
|
|
|
|
|
2015-01-16 17:02:03 +01:00
|
|
|
int acb_get_unique_fmpz(fmpz_t z, const acb_t x);
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_set_fmpq(acb_t z, const fmpq_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_set_fmpq(acb_realref(z), c, prec);
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_set_arb(acb_t z, const arb_t c)
|
|
|
|
{
|
|
|
|
arb_set(acb_realref(z), c);
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2015-08-11 09:04:59 -04:00
|
|
|
ACB_INLINE void
|
|
|
|
acb_set_arb_arb(acb_t z, const arb_t x, const arb_t y)
|
|
|
|
{
|
|
|
|
arb_set(acb_realref(z), x);
|
|
|
|
arb_set(acb_imagref(z), y);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_set_round_arb(acb_t z, const arb_t x, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_set_round(acb_realref(z), x, prec);
|
|
|
|
arb_zero(acb_imagref(z));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_trim(acb_t z, const acb_t x)
|
|
|
|
{
|
|
|
|
arb_trim(acb_realref(z), acb_realref(x));
|
|
|
|
arb_trim(acb_imagref(z), acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_add_error_arf(acb_t x, const arf_t err)
|
|
|
|
{
|
|
|
|
arb_add_error_arf(acb_realref(x), err);
|
|
|
|
arb_add_error_arf(acb_imagref(x), err);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-07-06 17:15:25 +02:00
|
|
|
acb_add_error_mag(acb_t x, const mag_t err)
|
|
|
|
{
|
|
|
|
arb_add_error_mag(acb_realref(x), err);
|
|
|
|
arb_add_error_mag(acb_imagref(x), err);
|
|
|
|
}
|
|
|
|
|
2014-08-15 14:03:42 +02:00
|
|
|
void acb_get_mag(mag_t z, const acb_t x);
|
|
|
|
|
|
|
|
void acb_get_mag_lower(mag_t z, const acb_t x);
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_get_abs_ubound_arf(arf_t u, const acb_t z, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
if (arb_is_zero(acb_imagref(z)))
|
|
|
|
{
|
|
|
|
arb_get_abs_ubound_arf(u, acb_realref(z), prec);
|
|
|
|
}
|
|
|
|
else if (arb_is_zero(acb_realref(z)))
|
|
|
|
{
|
|
|
|
arb_get_abs_ubound_arf(u, acb_imagref(z), prec);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
arf_t v;
|
|
|
|
arf_init(v);
|
|
|
|
|
|
|
|
arb_get_abs_ubound_arf(u, acb_realref(z), prec);
|
|
|
|
arb_get_abs_ubound_arf(v, acb_imagref(z), prec);
|
|
|
|
|
|
|
|
arf_mul(u, u, u, prec, ARF_RND_UP);
|
|
|
|
arf_mul(v, v, v, prec, ARF_RND_UP);
|
|
|
|
arf_add(u, u, v, prec, ARF_RND_UP);
|
|
|
|
arf_sqrt(u, u, prec, ARF_RND_UP);
|
|
|
|
|
|
|
|
arf_clear(v);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_get_abs_lbound_arf(arf_t u, const acb_t z, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
if (arb_is_zero(acb_imagref(z)))
|
|
|
|
{
|
|
|
|
arb_get_abs_lbound_arf(u, acb_realref(z), prec);
|
|
|
|
}
|
|
|
|
else if (arb_is_zero(acb_realref(z)))
|
|
|
|
{
|
|
|
|
arb_get_abs_lbound_arf(u, acb_imagref(z), prec);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
arf_t v;
|
|
|
|
arf_init(v);
|
|
|
|
|
|
|
|
arb_get_abs_lbound_arf(u, acb_realref(z), prec);
|
|
|
|
arb_get_abs_lbound_arf(v, acb_imagref(z), prec);
|
|
|
|
|
|
|
|
arf_mul(u, u, u, prec, ARF_RND_DOWN);
|
|
|
|
arf_mul(v, v, v, prec, ARF_RND_DOWN);
|
|
|
|
arf_add(u, u, v, prec, ARF_RND_DOWN);
|
|
|
|
arf_sqrt(u, u, prec, ARF_RND_DOWN);
|
|
|
|
|
|
|
|
arf_clear(v);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_get_rad_ubound_arf(arf_t u, const acb_t z, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
/* fixme: this bound is very sloppy */
|
|
|
|
|
|
|
|
if (mag_cmp(arb_radref(acb_realref(z)), arb_radref(acb_imagref(z))) >= 0)
|
|
|
|
arf_set_mag(u, arb_radref(acb_realref(z)));
|
|
|
|
else
|
|
|
|
arf_set_mag(u, arb_radref(acb_imagref(z)));
|
|
|
|
|
|
|
|
arf_mul_2exp_si(u, u, 1);
|
|
|
|
}
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_arg(arb_t r, const acb_t z, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2016-02-18 00:55:43 +01:00
|
|
|
void acb_sgn(acb_t res, const acb_t z, slong prec);
|
|
|
|
|
2016-02-18 01:37:51 +01:00
|
|
|
void acb_csgn(arb_t res, const acb_t z);
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_add(acb_t z, const acb_t x, const acb_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_add(acb_realref(z), acb_realref(x), acb_realref(y), prec);
|
|
|
|
arb_add(acb_imagref(z), acb_imagref(x), acb_imagref(y), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_sub(acb_t z, const acb_t x, const acb_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_sub(acb_realref(z), acb_realref(x), acb_realref(y), prec);
|
|
|
|
arb_sub(acb_imagref(z), acb_imagref(x), acb_imagref(y), prec);
|
|
|
|
}
|
|
|
|
|
2015-09-24 17:46:29 +02:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_add_si(acb_t z, const acb_t x, ulong c, slong prec)
|
2015-09-24 17:46:29 +02:00
|
|
|
{
|
|
|
|
arb_add_si(acb_realref(z), acb_realref(x), c, prec);
|
|
|
|
arb_set_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_add_ui(acb_t z, const acb_t x, ulong c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_add_ui(acb_realref(z), acb_realref(x), c, prec);
|
|
|
|
arb_set_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2015-09-24 17:46:29 +02:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_sub_si(acb_t z, const acb_t x, ulong c, slong prec)
|
2015-09-24 17:46:29 +02:00
|
|
|
{
|
|
|
|
arb_sub_si(acb_realref(z), acb_realref(x), c, prec);
|
|
|
|
arb_set_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_sub_ui(acb_t z, const acb_t x, ulong c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_sub_ui(acb_realref(z), acb_realref(x), c, prec);
|
|
|
|
arb_set_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_add_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_add_fmpz(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_set_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_add_arb(acb_t z, const acb_t x, const arb_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_add(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_set_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_sub_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_sub_fmpz(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_set_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_sub_arb(acb_t z, const acb_t x, const arb_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_sub(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_set_round(acb_imagref(z), acb_imagref(x), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_neg(acb_t z, const acb_t x)
|
|
|
|
{
|
|
|
|
arb_neg(acb_realref(z), acb_realref(x));
|
|
|
|
arb_neg(acb_imagref(z), acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_conj(acb_t z, const acb_t x)
|
|
|
|
{
|
|
|
|
arb_set(acb_realref(z), acb_realref(x));
|
|
|
|
arb_neg(acb_imagref(z), acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_abs(arb_t u, const acb_t z, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_hypot(u, acb_realref(z), acb_imagref(z), prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_mul_ui(acb_t z, const acb_t x, ulong y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_mul_ui(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_mul_ui(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_mul_si(acb_t z, const acb_t x, slong y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_mul_si(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_mul_si(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_mul_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_mul_fmpz(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_mul_fmpz(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_mul_arb(acb_t z, const acb_t x, const arb_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_mul(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_mul(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_mul_onei(acb_t z, const acb_t x)
|
|
|
|
{
|
|
|
|
if (z == x)
|
|
|
|
{
|
|
|
|
arb_swap(acb_realref(z), acb_imagref(z));
|
|
|
|
arb_neg(acb_realref(z), acb_realref(z));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
arb_neg(acb_realref(z), acb_imagref(x));
|
|
|
|
arb_set(acb_imagref(z), acb_realref(x));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-06-16 10:33:19 +02:00
|
|
|
ACB_INLINE void
|
|
|
|
acb_div_onei(acb_t z, const acb_t x)
|
|
|
|
{
|
|
|
|
if (z == x)
|
|
|
|
{
|
|
|
|
arb_swap(acb_realref(z), acb_imagref(z));
|
|
|
|
arb_neg(acb_imagref(z), acb_imagref(z));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
arb_set(acb_realref(z), acb_imagref(x));
|
|
|
|
arb_neg(acb_imagref(z), acb_realref(x));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_mul(acb_t z, const acb_t x, const acb_t y, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_mul_naive(acb_t z, const acb_t x, const acb_t y, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_mul_2exp_si(acb_t z, const acb_t x, slong e)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_mul_2exp_si(acb_realref(z), acb_realref(x), e);
|
|
|
|
arb_mul_2exp_si(acb_imagref(z), acb_imagref(x), e);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-12-20 22:37:43 +01:00
|
|
|
acb_mul_2exp_fmpz(acb_t z, const acb_t x, const fmpz_t c)
|
|
|
|
{
|
|
|
|
arb_mul_2exp_fmpz(acb_realref(z), acb_realref(x), c);
|
|
|
|
arb_mul_2exp_fmpz(acb_imagref(z), acb_imagref(x), c);
|
|
|
|
}
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_addmul(acb_t z, const acb_t x, const acb_t y, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_submul(acb_t z, const acb_t x, const acb_t y, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_addmul_ui(acb_t z, const acb_t x, ulong y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_addmul_ui(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_addmul_ui(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_addmul_si(acb_t z, const acb_t x, slong y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_addmul_si(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_addmul_si(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_submul_ui(acb_t z, const acb_t x, ulong y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_submul_ui(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_submul_ui(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_submul_si(acb_t z, const acb_t x, slong y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_submul_si(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_submul_si(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_addmul_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_addmul_fmpz(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_addmul_fmpz(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_submul_fmpz(acb_t z, const acb_t x, const fmpz_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_submul_fmpz(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_submul_fmpz(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_addmul_arb(acb_t z, const acb_t x, const arb_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_addmul(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_addmul(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_submul_arb(acb_t z, const acb_t x, const arb_t y, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_submul(acb_realref(z), acb_realref(x), y, prec);
|
|
|
|
arb_submul(acb_imagref(z), acb_imagref(x), y, prec);
|
|
|
|
}
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_inv(acb_t z, const acb_t x, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_div(acb_t z, const acb_t x, const acb_t y, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_div_ui(acb_t z, const acb_t x, ulong c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_div_ui(acb_realref(z), acb_realref(x), c, prec);
|
|
|
|
arb_div_ui(acb_imagref(z), acb_imagref(x), c, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_div_si(acb_t z, const acb_t x, slong c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_div_si(acb_realref(z), acb_realref(x), c, prec);
|
|
|
|
arb_div_si(acb_imagref(z), acb_imagref(x), c, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_div_arb(acb_t z, const acb_t x, const arb_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_div(acb_realref(z), acb_realref(x), c, prec);
|
|
|
|
arb_div(acb_imagref(z), acb_imagref(x), c, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_div_fmpz(acb_t z, const acb_t x, const fmpz_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_div_fmpz(acb_realref(z), acb_realref(x), c, prec);
|
|
|
|
arb_div_fmpz(acb_imagref(z), acb_imagref(x), c, prec);
|
|
|
|
}
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_cube(acb_t y, const acb_t x, slong prec);
|
|
|
|
void acb_pow_fmpz(acb_t y, const acb_t b, const fmpz_t e, slong prec);
|
|
|
|
void acb_pow_ui(acb_t y, const acb_t b, ulong e, slong prec);
|
|
|
|
void acb_pow_si(acb_t y, const acb_t b, slong e, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_const_pi(acb_t x, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
arb_const_pi(acb_realref(x), prec);
|
|
|
|
arb_zero(acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_log(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_log1p(acb_t r, const acb_t z, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_exp(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_exp_pi_i(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_exp_invexp(acb_t r, acb_t s, const acb_t z, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_sin(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_cos(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_sin_cos(acb_t s, acb_t c, const acb_t z, slong prec);
|
|
|
|
void acb_tan(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_cot(acb_t r, const acb_t z, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_asin(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_acos(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_atan(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_asinh(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_acosh(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_atanh(acb_t r, const acb_t z, slong prec);
|
2015-11-01 01:56:29 +01:00
|
|
|
|
2015-06-16 10:33:19 +02:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_sinh(acb_t y, const acb_t x, slong prec)
|
2015-06-16 10:33:19 +02:00
|
|
|
{
|
|
|
|
acb_mul_onei(y, x);
|
|
|
|
acb_sin(y, y, prec);
|
|
|
|
acb_div_onei(y, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_cosh(acb_t y, const acb_t x, slong prec)
|
2015-06-16 10:33:19 +02:00
|
|
|
{
|
|
|
|
acb_mul_onei(y, x);
|
|
|
|
acb_cos(y, y, prec);
|
|
|
|
}
|
|
|
|
|
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_sinh_cosh(acb_t y, acb_t z, const acb_t x, slong prec)
|
2015-06-16 10:33:19 +02:00
|
|
|
{
|
|
|
|
acb_mul_onei(y, x);
|
|
|
|
acb_sin_cos(y, z, y, prec);
|
|
|
|
acb_div_onei(y, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_tanh(acb_t y, const acb_t x, slong prec)
|
2015-06-16 10:33:19 +02:00
|
|
|
{
|
|
|
|
acb_mul_onei(y, x);
|
|
|
|
acb_tan(y, y, prec);
|
|
|
|
acb_div_onei(y, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
acb_coth(acb_t y, const acb_t x, slong prec)
|
2015-06-16 10:33:19 +02:00
|
|
|
{
|
|
|
|
acb_mul_onei(y, x);
|
|
|
|
acb_cot(y, y, prec);
|
|
|
|
acb_mul_onei(y, y);
|
|
|
|
}
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_sin_pi(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_cos_pi(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_sin_cos_pi(acb_t s, acb_t c, const acb_t z, slong prec);
|
|
|
|
void acb_tan_pi(acb_t r, const acb_t z, slong prec);
|
|
|
|
void acb_cot_pi(acb_t r, const acb_t z, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2016-01-07 18:21:26 +01:00
|
|
|
void acb_sinc(acb_t res, const acb_t z, slong prec);
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_pow_arb(acb_t z, const acb_t x, const arb_t y, slong prec);
|
|
|
|
void acb_pow(acb_t r, const acb_t x, const acb_t y, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_sqrt(acb_t y, const acb_t x, slong prec);
|
|
|
|
void acb_rsqrt(acb_t y, const acb_t x, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-11-23 15:09:10 +01:00
|
|
|
void acb_root_ui(acb_t y, const acb_t x, ulong k, slong prec);
|
|
|
|
|
2015-11-23 15:34:28 +01:00
|
|
|
void acb_quadratic_roots_fmpz(acb_t r1, acb_t r2,
|
|
|
|
const fmpz_t a, const fmpz_t b, const fmpz_t c, slong prec);
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_chebyshev_t_ui(acb_t a, ulong n, const acb_t x, slong prec);
|
|
|
|
void acb_chebyshev_t2_ui(acb_t a, acb_t b, ulong n, const acb_t x, slong prec);
|
|
|
|
void acb_chebyshev_u_ui(acb_t a, ulong n, const acb_t x, slong prec);
|
|
|
|
void acb_chebyshev_u2_ui(acb_t a, acb_t b, ulong n, const acb_t x, slong prec);
|
2015-11-01 06:05:48 +01:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_rising_ui_bs(acb_t y, const acb_t x, ulong n, slong prec);
|
|
|
|
void acb_rising_ui_rs(acb_t y, const acb_t x, ulong n, ulong m, slong prec);
|
|
|
|
void acb_rising_ui_rec(acb_t y, const acb_t x, ulong n, slong prec);
|
|
|
|
void acb_rising_ui(acb_t z, const acb_t x, ulong n, slong prec);
|
|
|
|
void acb_rising(acb_t z, const acb_t x, const acb_t n, slong prec);
|
2014-06-04 13:36:51 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_rising2_ui_bs(acb_t u, acb_t v, const acb_t x, ulong n, slong prec);
|
|
|
|
void acb_rising2_ui_rs(acb_t u, acb_t v, const acb_t x, ulong n, ulong m, slong prec);
|
|
|
|
void acb_rising2_ui(acb_t u, acb_t v, const acb_t x, ulong n, slong prec);
|
2014-06-04 16:00:51 +02:00
|
|
|
|
2014-12-21 00:27:30 +01:00
|
|
|
void acb_rising_ui_get_mag(mag_t bound, const acb_t s, ulong n);
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_gamma(acb_t y, const acb_t x, slong prec);
|
|
|
|
void acb_rgamma(acb_t y, const acb_t x, slong prec);
|
|
|
|
void acb_lgamma(acb_t y, const acb_t x, slong prec);
|
|
|
|
void acb_log_sin_pi(acb_t res, const acb_t z, slong prec);
|
|
|
|
void acb_digamma(acb_t y, const acb_t x, slong prec);
|
|
|
|
void acb_zeta(acb_t z, const acb_t s, slong prec);
|
|
|
|
void acb_hurwitz_zeta(acb_t z, const acb_t s, const acb_t a, slong prec);
|
|
|
|
void acb_polygamma(acb_t res, const acb_t s, const acb_t z, slong prec);
|
2014-06-13 22:08:25 +02:00
|
|
|
|
2016-01-24 15:05:21 +01:00
|
|
|
void acb_bernoulli_poly_ui(acb_t res, ulong n, const acb_t x, slong prec);
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_log_barnes_g(acb_t res, const acb_t z, slong prec);
|
|
|
|
void acb_barnes_g(acb_t res, const acb_t z, slong prec);
|
2015-07-13 18:39:05 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_polylog(acb_t w, const acb_t s, const acb_t z, slong prec);
|
|
|
|
void acb_polylog_si(acb_t w, slong s, const acb_t z, slong prec);
|
2014-06-04 15:26:18 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_agm1(acb_t m, const acb_t z, slong prec);
|
|
|
|
void acb_agm1_cpx(acb_ptr m, const acb_t z, slong len, slong prec);
|
2014-12-16 16:53:24 +01:00
|
|
|
|
2016-04-20 06:15:31 -04:00
|
|
|
ACB_INLINE void
|
2016-04-20 06:28:07 -04:00
|
|
|
acb_sqr(acb_t res, const acb_t val, slong prec)
|
2016-04-20 06:15:31 -04:00
|
|
|
{
|
|
|
|
acb_mul(res, val, val, prec);
|
|
|
|
}
|
|
|
|
|
2014-05-15 16:36:30 +02:00
|
|
|
/*
|
|
|
|
TBD
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_invroot_newton(acb_t r, const acb_t a, ulong m, const acb_t r0, slong startprec, slong prec);
|
|
|
|
void acb_root_exp(acb_t r, const acb_t a, slong m, slong index, slong prec);
|
|
|
|
void acb_root_newton(acb_t r, const acb_t a, slong m, slong index, slong prec);
|
|
|
|
void acb_root(acb_t r, const acb_t a, slong m, slong index, slong prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
*/
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-07-06 17:15:25 +02:00
|
|
|
acb_is_finite(const acb_t x)
|
|
|
|
{
|
|
|
|
return arb_is_finite(acb_realref(x)) && arb_is_finite(acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2014-07-06 17:15:25 +02:00
|
|
|
acb_indeterminate(acb_t x)
|
|
|
|
{
|
|
|
|
arb_indeterminate(acb_realref(x));
|
|
|
|
arb_indeterminate(acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2015-10-02 09:46:02 +02:00
|
|
|
ACB_INLINE acb_ptr
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_entry_ptr(acb_ptr vec, slong i)
|
2015-10-02 09:46:02 +02:00
|
|
|
{
|
|
|
|
return vec + i;
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_zero(acb_ptr A, slong n)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < n; i++)
|
|
|
|
acb_zero(A + i);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_is_zero(acb_srcptr vec, slong len)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
if (!acb_is_zero(vec + i))
|
|
|
|
return 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_set(acb_ptr res, acb_srcptr vec, slong len)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_set(res + i, vec + i);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_set_round(acb_ptr res, acb_srcptr vec, slong len, slong prec)
|
2014-10-21 16:39:48 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-10-21 16:39:48 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_set_round(res + i, vec + i, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_neg(acb_ptr res, acb_srcptr vec, slong len)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_neg(res + i, vec + i);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_add(acb_ptr res, acb_srcptr vec1, acb_srcptr vec2, slong len, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_add(res + i, vec1 + i, vec2 + i, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_sub(acb_ptr res, acb_srcptr vec1, acb_srcptr vec2, slong len, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_sub(res + i, vec1 + i, vec2 + i, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_submul(acb_ptr res, acb_srcptr vec, slong len, const acb_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-19 21:01:45 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_submul(res + i, vec + i, c, prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_addmul(acb_ptr res, acb_srcptr vec, slong len, const acb_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-19 21:01:45 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_addmul(res + i, vec + i, c, prec);
|
2014-05-15 16:36:30 +02:00
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_mul(acb_ptr res, acb_srcptr vec, slong len, const acb_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_mul(res + i, vec + i, c, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_mul_ui(acb_ptr res, acb_srcptr vec, slong len, ulong c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_mul_ui(res + i, vec + i, c, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_mul_2exp_si(acb_ptr res, acb_srcptr vec, slong len, slong c)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_mul_2exp_si(res + i, vec + i, c);
|
|
|
|
}
|
|
|
|
|
2015-06-16 13:10:18 +02:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_mul_onei(acb_ptr res, acb_srcptr vec, slong len)
|
2015-06-16 13:10:18 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2015-06-16 13:10:18 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_mul_onei(res + i, vec + i);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_div_ui(acb_ptr res, acb_srcptr vec, slong len, ulong c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_div_ui(res + i, vec + i, c, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_div(acb_ptr res, acb_srcptr vec, slong len, const acb_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_div(res + i, vec + i, c, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_mul_arb(acb_ptr res, acb_srcptr vec, slong len, const arb_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_mul_arb(res + i, vec + i, c, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_div_arb(acb_ptr res, acb_srcptr vec, slong len, const arb_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
{
|
|
|
|
arb_div(acb_realref(res + i), acb_realref(vec + i), c, prec);
|
|
|
|
arb_div(acb_imagref(res + i), acb_imagref(vec + i), c, prec);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_mul_fmpz(acb_ptr res, acb_srcptr vec, slong len, const fmpz_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_mul_fmpz(res + i, vec + i, c, prec);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_scalar_div_fmpz(acb_ptr res, acb_srcptr vec, slong len, const fmpz_t c, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_div_fmpz(res + i, vec + i, c, prec);
|
|
|
|
}
|
|
|
|
|
2015-12-31 18:26:05 -05:00
|
|
|
ACB_INLINE void
|
|
|
|
acb_fprint(FILE * file, const acb_t x)
|
|
|
|
{
|
|
|
|
flint_fprintf(file, "(");
|
|
|
|
arb_fprint(file, acb_realref(x));
|
|
|
|
flint_fprintf(file, ", ");
|
|
|
|
arb_fprint(file, acb_imagref(x));
|
|
|
|
flint_fprintf(file, ")");
|
|
|
|
}
|
|
|
|
|
2016-01-01 17:18:55 -05:00
|
|
|
ACB_INLINE void
|
|
|
|
acb_print(const acb_t x)
|
|
|
|
{
|
|
|
|
acb_fprint(stdout, x);
|
|
|
|
}
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-12-31 18:26:05 -05:00
|
|
|
void acb_fprintd(FILE * file, const acb_t z, slong digits);
|
|
|
|
|
2016-01-01 17:18:55 -05:00
|
|
|
ACB_INLINE void
|
|
|
|
acb_printd(const acb_t z, slong digits)
|
|
|
|
{
|
|
|
|
acb_fprintd(stdout, z, digits);
|
|
|
|
}
|
|
|
|
|
2016-09-06 18:01:14 +02:00
|
|
|
void acb_fprintn(FILE * fp, const acb_t z, long digits, ulong flags);
|
|
|
|
|
2016-09-07 00:05:44 +02:00
|
|
|
ACB_INLINE void
|
2016-09-06 18:01:14 +02:00
|
|
|
acb_printn(const acb_t x, slong digits, ulong flags)
|
|
|
|
{
|
|
|
|
acb_fprintn(stdout, x, digits, flags);
|
|
|
|
}
|
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_randtest(acb_t z, flint_rand_t state, slong prec, slong mag_bits);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_randtest_special(acb_t z, flint_rand_t state, slong prec, slong mag_bits);
|
2014-05-15 19:20:44 +02:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_randtest_precise(acb_t z, flint_rand_t state, slong prec, slong mag_bits);
|
2015-01-18 00:14:42 +01:00
|
|
|
|
2015-11-06 11:11:35 +00:00
|
|
|
void acb_randtest_param(acb_t z, flint_rand_t state, slong prec, slong mag_bits);
|
2015-06-05 23:39:02 -04:00
|
|
|
|
2015-11-10 13:41:43 +00:00
|
|
|
slong acb_rel_error_bits(const acb_t x);
|
2015-02-19 18:15:47 +01:00
|
|
|
|
2015-11-10 13:58:05 +00:00
|
|
|
ACB_INLINE slong
|
2015-02-19 18:15:47 +01:00
|
|
|
acb_rel_accuracy_bits(const acb_t x)
|
|
|
|
{
|
|
|
|
return -acb_rel_error_bits(x);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-11-10 13:58:05 +00:00
|
|
|
ACB_INLINE slong
|
2014-05-15 16:36:30 +02:00
|
|
|
acb_bits(const acb_t x)
|
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong b1, b2;
|
2014-05-15 16:36:30 +02:00
|
|
|
b1 = arb_bits(acb_realref(x));
|
|
|
|
b2 = arb_bits(acb_imagref(x));
|
|
|
|
return FLINT_MAX(b1, b2);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2014-11-06 16:03:49 +01:00
|
|
|
acb_is_real(const acb_t x)
|
|
|
|
{
|
|
|
|
return arb_is_zero(acb_imagref(x));
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE int
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_is_real(acb_srcptr v, slong len)
|
2014-11-06 16:03:49 +01:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-11-06 16:03:49 +01:00
|
|
|
|
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
{
|
|
|
|
if (!acb_is_real(v + i))
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2015-11-10 13:58:05 +00:00
|
|
|
ACB_INLINE slong
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_bits(acb_srcptr vec, slong len)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
return _arb_vec_bits((arb_srcptr) vec, 2 * len);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_set_powers(acb_ptr xs, const acb_t x, slong len, slong prec)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
|
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
{
|
|
|
|
if (i == 0)
|
|
|
|
acb_one(xs + i);
|
|
|
|
else if (i == 1)
|
|
|
|
acb_set_round(xs + i, x, prec);
|
|
|
|
else if (i % 2 == 0)
|
|
|
|
acb_mul(xs + i, xs + i / 2, xs + i / 2, prec);
|
|
|
|
else
|
|
|
|
acb_mul(xs + i, xs + i - 1, x, prec);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_add_error_arf_vec(acb_ptr res, arf_srcptr err, slong len)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_add_error_arf(res + i, err + i);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_add_error_mag_vec(acb_ptr res, mag_srcptr err, slong len)
|
2014-06-05 00:43:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-06-05 00:43:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
{
|
|
|
|
mag_add(arb_radref(acb_realref(res + i)),
|
|
|
|
arb_radref(acb_realref(res + i)), err + i);
|
|
|
|
mag_add(arb_radref(acb_imagref(res + i)),
|
|
|
|
arb_radref(acb_imagref(res + i)), err + i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_indeterminate(acb_ptr vec, slong len)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
|
|
|
_arb_vec_indeterminate((arb_ptr) vec, 2 * len);
|
|
|
|
}
|
|
|
|
|
2014-12-25 15:50:37 +01:00
|
|
|
ACB_INLINE void
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_trim(acb_ptr res, acb_srcptr vec, slong len)
|
2014-05-15 16:36:30 +02:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2014-05-15 16:36:30 +02:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
acb_trim(res + i, vec + i);
|
|
|
|
}
|
|
|
|
|
2015-10-02 09:03:53 +02:00
|
|
|
ACB_INLINE int
|
2015-11-06 11:11:35 +00:00
|
|
|
_acb_vec_get_unique_fmpz_vec(fmpz * res, acb_srcptr vec, slong len)
|
2015-01-16 17:02:03 +01:00
|
|
|
{
|
2015-11-06 11:11:35 +00:00
|
|
|
slong i;
|
2015-01-16 17:02:03 +01:00
|
|
|
for (i = 0; i < len; i++)
|
|
|
|
if (!acb_get_unique_fmpz(res + i, vec + i))
|
|
|
|
return 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2015-01-13 17:00:42 +01:00
|
|
|
/* sort complex numbers in a nice-to-display order */
|
2015-11-06 11:11:35 +00:00
|
|
|
void _acb_vec_sort_pretty(acb_ptr vec, slong len);
|
2014-05-15 16:36:30 +02:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|