Home | History | Annotate | Line # | Download | only in src
      1 /* mpc.h -- Include file for mpc.
      2 
      3 Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2016, 2017, 2018, 2020, 2021, 2022 INRIA
      4 
      5 This file is part of GNU MPC.
      6 
      7 GNU MPC is free software; you can redistribute it and/or modify it under
      8 the terms of the GNU Lesser General Public License as published by the
      9 Free Software Foundation; either version 3 of the License, or (at your
     10 option) any later version.
     11 
     12 GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
     13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
     14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
     15 more details.
     16 
     17 You should have received a copy of the GNU Lesser General Public License
     18 along with this program. If not, see http://www.gnu.org/licenses/ .
     19 */
     20 
     21 #ifndef __MPC_H
     22 #define __MPC_H
     23 
     24 #include <stdint.h>
     25 #include "gmp.h"
     26 #include "mpfr.h"
     27 
     28 /* Define MPC version number */
     29 #define MPC_VERSION_MAJOR 1
     30 #define MPC_VERSION_MINOR 3
     31 #define MPC_VERSION_PATCHLEVEL 1
     32 #define MPC_VERSION_STRING "1.3.1"
     33 
     34 /* Macros dealing with MPC VERSION */
     35 #define MPC_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
     36 #define MPC_VERSION                                                     \
     37   MPC_VERSION_NUM(MPC_VERSION_MAJOR,MPC_VERSION_MINOR,MPC_VERSION_PATCHLEVEL)
     38 
     39 /* Check if stdint.h/inttypes.h is included */
     40 #if defined (INTMAX_C) && defined (UINTMAX_C)
     41 #define _MPC_H_HAVE_INTMAX_T 1
     42 #endif
     43 
     44 /* Return values */
     45 
     46 /* Transform negative to 2, positive to 1, leave 0 unchanged.
     47    Warning: since inex is evaluated two times, we should avoid
     48    MPC_INEX(mpc_mul (...), mpc_mul (...)) */
     49 #define MPC_INEX_POS(inex) (((inex) < 0) ? 2 : ((inex) == 0) ? 0 : 1)
     50 /* Transform 2 to negative, 1 to positive, leave 0 unchanged */
     51 #define MPC_INEX_NEG(inex) (((inex) == 2) ? -1 : ((inex) == 0) ? 0 : 1)
     52 
     53 /* The global inexact flag is made of (real flag) + 4 * (imaginary flag), where
     54    each of the real and imaginary inexact flag are:
     55    0 when the result is exact (no rounding error)
     56    1 when the result is larger than the exact value
     57    2 when the result is smaller than the exact value */
     58 #define MPC_INEX(inex_re, inex_im) \
     59         (MPC_INEX_POS(inex_re) | (MPC_INEX_POS(inex_im) << 2))
     60 #define MPC_INEX_RE(inex) MPC_INEX_NEG((inex) & 3)
     61 #define MPC_INEX_IM(inex) MPC_INEX_NEG((inex) >> 2)
     62 
     63 /* For functions computing two results, the return value is
     64    inexact1+16*inexact2, which is 0 iif both results are exact. */
     65 #define MPC_INEX12(inex1, inex2) (inex1 | (inex2 << 4))
     66 #define MPC_INEX1(inex) (inex & 15)
     67 #define MPC_INEX2(inex) (inex >> 4)
     68 
     69 /* Definition of rounding modes */
     70 
     71 /* a complex rounding mode is just a pair of two real rounding modes
     72    we reserve four bits for a real rounding mode.  */
     73 typedef int mpc_rnd_t;
     74 
     75 #define MPC_RND(r1,r2) (((int)(r1)) + ((int)(r2) << 4))
     76 #define MPC_RND_RE(x) ((mpfr_rnd_t)((x) & 0x0F))
     77 #define MPC_RND_IM(x) ((mpfr_rnd_t)((x) >> 4))
     78 
     79 #define MPC_RNDNN MPC_RND (MPFR_RNDN,MPFR_RNDN)
     80 #define MPC_RNDNZ MPC_RND (MPFR_RNDN,MPFR_RNDZ)
     81 #define MPC_RNDNU MPC_RND (MPFR_RNDN,MPFR_RNDU)
     82 #define MPC_RNDND MPC_RND (MPFR_RNDN,MPFR_RNDD)
     83 #define MPC_RNDNA MPC_RND (MPFR_RNDN,MPFR_RNDA)
     84 
     85 #define MPC_RNDZN MPC_RND (MPFR_RNDZ,MPFR_RNDN)
     86 #define MPC_RNDZZ MPC_RND (MPFR_RNDZ,MPFR_RNDZ)
     87 #define MPC_RNDZU MPC_RND (MPFR_RNDZ,MPFR_RNDU)
     88 #define MPC_RNDZD MPC_RND (MPFR_RNDZ,MPFR_RNDD)
     89 #define MPC_RNDZA MPC_RND (MPFR_RNDZ,MPFR_RNDA)
     90 
     91 #define MPC_RNDUN MPC_RND (MPFR_RNDU,MPFR_RNDN)
     92 #define MPC_RNDUZ MPC_RND (MPFR_RNDU,MPFR_RNDZ)
     93 #define MPC_RNDUU MPC_RND (MPFR_RNDU,MPFR_RNDU)
     94 #define MPC_RNDUD MPC_RND (MPFR_RNDU,MPFR_RNDD)
     95 #define MPC_RNDUA MPC_RND (MPFR_RNDU,MPFR_RNDA)
     96 
     97 #define MPC_RNDDN MPC_RND (MPFR_RNDD,MPFR_RNDN)
     98 #define MPC_RNDDZ MPC_RND (MPFR_RNDD,MPFR_RNDZ)
     99 #define MPC_RNDDU MPC_RND (MPFR_RNDD,MPFR_RNDU)
    100 #define MPC_RNDDD MPC_RND (MPFR_RNDD,MPFR_RNDD)
    101 #define MPC_RNDDA MPC_RND (MPFR_RNDD,MPFR_RNDA)
    102 
    103 #define MPC_RNDAN MPC_RND (MPFR_RNDA,MPFR_RNDN)
    104 #define MPC_RNDAZ MPC_RND (MPFR_RNDA,MPFR_RNDZ)
    105 #define MPC_RNDAU MPC_RND (MPFR_RNDA,MPFR_RNDU)
    106 #define MPC_RNDAD MPC_RND (MPFR_RNDA,MPFR_RNDD)
    107 #define MPC_RNDAA MPC_RND (MPFR_RNDA,MPFR_RNDA)
    108 
    109 
    110 /* Definitions of types and their semantics */
    111 
    112 typedef struct {
    113   mpfr_t re;
    114   mpfr_t im;
    115 }
    116 __mpc_struct;
    117 
    118 typedef __mpc_struct mpc_t[1];
    119 typedef __mpc_struct *mpc_ptr;
    120 typedef const __mpc_struct *mpc_srcptr;
    121 
    122 typedef struct {
    123    int64_t mant;
    124    int64_t exp;
    125 }
    126 __mpcr_struct;
    127 
    128 typedef __mpcr_struct mpcr_t [1];
    129 typedef __mpcr_struct *mpcr_ptr;
    130 typedef const __mpcr_struct *mpcr_srcptr;
    131 
    132 typedef struct {
    133   mpc_t  c;
    134   mpcr_t r;
    135 }
    136 __mpcb_struct;
    137 
    138 typedef __mpcb_struct mpcb_t [1];
    139 typedef __mpcb_struct *mpcb_ptr;
    140 typedef const __mpcb_struct *mpcb_srcptr;
    141 
    142 /* Support for WINDOWS DLL, see
    143    https://sympa.inria.fr/sympa/arc/mpc-discuss/2011-11/ ;
    144    when building the DLL, export symbols, otherwise behave as GMP           */
    145 #if defined (__MPC_LIBRARY_BUILD) && __GMP_LIBGMP_DLL
    146 #define __MPC_DECLSPEC __GMP_DECLSPEC_EXPORT
    147 #else
    148 #define __MPC_DECLSPEC __GMP_DECLSPEC
    149 #endif
    150 
    151 #if defined (__cplusplus)
    152 extern "C" {
    153 #endif
    154 
    155 __MPC_DECLSPEC int  mpc_add       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
    156 __MPC_DECLSPEC int  mpc_add_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
    157 __MPC_DECLSPEC int  mpc_add_si    (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
    158 __MPC_DECLSPEC int  mpc_add_ui    (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
    159 __MPC_DECLSPEC int  mpc_sub       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
    160 __MPC_DECLSPEC int  mpc_sub_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
    161 __MPC_DECLSPEC int  mpc_fr_sub    (mpc_ptr, mpfr_srcptr, mpc_srcptr, mpc_rnd_t);
    162 __MPC_DECLSPEC int  mpc_sub_ui    (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
    163 __MPC_DECLSPEC int  mpc_ui_ui_sub (mpc_ptr, unsigned long int, unsigned long int, mpc_srcptr, mpc_rnd_t);
    164 __MPC_DECLSPEC int  mpc_mul       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
    165 __MPC_DECLSPEC int  mpc_mul_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
    166 __MPC_DECLSPEC int  mpc_mul_ui    (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
    167 __MPC_DECLSPEC int  mpc_mul_si    (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
    168 __MPC_DECLSPEC int  mpc_mul_i     (mpc_ptr, mpc_srcptr, int, mpc_rnd_t);
    169 __MPC_DECLSPEC int  mpc_sqr       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    170 __MPC_DECLSPEC int  mpc_div       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
    171 __MPC_DECLSPEC int  mpc_pow       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
    172 __MPC_DECLSPEC int  mpc_pow_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
    173 __MPC_DECLSPEC int  mpc_pow_ld    (mpc_ptr, mpc_srcptr, long double, mpc_rnd_t);
    174 __MPC_DECLSPEC int  mpc_pow_d     (mpc_ptr, mpc_srcptr, double, mpc_rnd_t);
    175 __MPC_DECLSPEC int  mpc_pow_si    (mpc_ptr, mpc_srcptr, long, mpc_rnd_t);
    176 __MPC_DECLSPEC int  mpc_pow_ui    (mpc_ptr, mpc_srcptr, unsigned long, mpc_rnd_t);
    177 __MPC_DECLSPEC int  mpc_pow_z     (mpc_ptr, mpc_srcptr, mpz_srcptr, mpc_rnd_t);
    178 __MPC_DECLSPEC int  mpc_div_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
    179 __MPC_DECLSPEC int  mpc_fr_div    (mpc_ptr, mpfr_srcptr, mpc_srcptr, mpc_rnd_t);
    180 __MPC_DECLSPEC int  mpc_div_ui    (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
    181 __MPC_DECLSPEC int  mpc_ui_div    (mpc_ptr, unsigned long int, mpc_srcptr, mpc_rnd_t);
    182 __MPC_DECLSPEC int  mpc_div_2ui   (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
    183 __MPC_DECLSPEC int  mpc_mul_2ui   (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
    184 __MPC_DECLSPEC int  mpc_div_2si   (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
    185 __MPC_DECLSPEC int  mpc_mul_2si   (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
    186 __MPC_DECLSPEC int  mpc_conj      (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    187 __MPC_DECLSPEC int  mpc_neg       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    188 __MPC_DECLSPEC int  mpc_sum (mpc_ptr, const mpc_ptr *, unsigned long, mpc_rnd_t);
    189 __MPC_DECLSPEC int  mpc_dot (mpc_ptr, const mpc_ptr *, const mpc_ptr *, unsigned long, mpc_rnd_t);
    190 __MPC_DECLSPEC int  mpc_norm      (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
    191 __MPC_DECLSPEC int  mpc_abs       (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
    192 __MPC_DECLSPEC int  mpc_sqrt      (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    193 __MPC_DECLSPEC int  mpc_set       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    194 __MPC_DECLSPEC int  mpc_set_d     (mpc_ptr, double, mpc_rnd_t);
    195 __MPC_DECLSPEC int  mpc_set_d_d   (mpc_ptr, double, double, mpc_rnd_t);
    196 __MPC_DECLSPEC int  mpc_set_ld    (mpc_ptr, long double, mpc_rnd_t);
    197 __MPC_DECLSPEC int  mpc_set_ld_ld (mpc_ptr, long double, long double, mpc_rnd_t);
    198 __MPC_DECLSPEC int  mpc_set_f     (mpc_ptr, mpf_srcptr, mpc_rnd_t);
    199 __MPC_DECLSPEC int  mpc_set_f_f   (mpc_ptr, mpf_srcptr, mpf_srcptr, mpc_rnd_t);
    200 __MPC_DECLSPEC int  mpc_set_fr    (mpc_ptr, mpfr_srcptr, mpc_rnd_t);
    201 __MPC_DECLSPEC int  mpc_set_fr_fr (mpc_ptr, mpfr_srcptr, mpfr_srcptr, mpc_rnd_t);
    202 __MPC_DECLSPEC int  mpc_set_q     (mpc_ptr, mpq_srcptr, mpc_rnd_t);
    203 __MPC_DECLSPEC int  mpc_set_q_q   (mpc_ptr, mpq_srcptr, mpq_srcptr, mpc_rnd_t);
    204 __MPC_DECLSPEC int  mpc_set_si    (mpc_ptr, long int, mpc_rnd_t);
    205 __MPC_DECLSPEC int  mpc_set_si_si (mpc_ptr, long int, long int, mpc_rnd_t);
    206 __MPC_DECLSPEC int  mpc_set_ui    (mpc_ptr, unsigned long int, mpc_rnd_t);
    207 __MPC_DECLSPEC int  mpc_set_ui_ui (mpc_ptr, unsigned long int, unsigned long int, mpc_rnd_t);
    208 __MPC_DECLSPEC int  mpc_set_z     (mpc_ptr, mpz_srcptr, mpc_rnd_t);
    209 __MPC_DECLSPEC int  mpc_set_z_z   (mpc_ptr, mpz_srcptr, mpz_srcptr, mpc_rnd_t);
    210 __MPC_DECLSPEC void mpc_swap      (mpc_ptr, mpc_ptr);
    211 __MPC_DECLSPEC int  mpc_fma       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
    212 
    213 __MPC_DECLSPEC void mpc_set_nan   (mpc_ptr);
    214 
    215 __MPC_DECLSPEC int  mpc_real        (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
    216 __MPC_DECLSPEC int  mpc_imag        (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
    217 __MPC_DECLSPEC int  mpc_arg         (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
    218 __MPC_DECLSPEC int  mpc_proj        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    219 __MPC_DECLSPEC int  mpc_cmp         (mpc_srcptr, mpc_srcptr);
    220 __MPC_DECLSPEC int  mpc_cmp_si_si   (mpc_srcptr, long int, long int);
    221 __MPC_DECLSPEC int  mpc_cmp_abs     (mpc_srcptr, mpc_srcptr);
    222 __MPC_DECLSPEC int  mpc_exp         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    223 __MPC_DECLSPEC int  mpc_log         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    224 __MPC_DECLSPEC int  mpc_log10       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    225 __MPC_DECLSPEC int  mpc_agm         (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
    226 __MPC_DECLSPEC int  mpc_sin         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    227 __MPC_DECLSPEC int  mpc_cos         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    228 __MPC_DECLSPEC int  mpc_sin_cos     (mpc_ptr, mpc_ptr, mpc_srcptr, mpc_rnd_t, mpc_rnd_t);
    229 __MPC_DECLSPEC int  mpc_tan         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    230 __MPC_DECLSPEC int  mpc_sinh        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    231 __MPC_DECLSPEC int  mpc_cosh        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    232 __MPC_DECLSPEC int  mpc_tanh        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    233 __MPC_DECLSPEC int  mpc_asin        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    234 __MPC_DECLSPEC int  mpc_acos        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    235 __MPC_DECLSPEC int  mpc_atan        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    236 __MPC_DECLSPEC int  mpc_asinh       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    237 __MPC_DECLSPEC int  mpc_acosh       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    238 __MPC_DECLSPEC int  mpc_atanh       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    239 __MPC_DECLSPEC int  mpc_rootofunity (mpc_ptr, unsigned long int, unsigned long int, mpc_rnd_t);
    240 __MPC_DECLSPEC void mpc_clear       (mpc_ptr);
    241 __MPC_DECLSPEC int  mpc_urandom     (mpc_ptr, gmp_randstate_t);
    242 __MPC_DECLSPEC void mpc_init2       (mpc_ptr, mpfr_prec_t);
    243 __MPC_DECLSPEC void mpc_init3       (mpc_ptr, mpfr_prec_t, mpfr_prec_t);
    244 __MPC_DECLSPEC mpfr_prec_t mpc_get_prec (mpc_srcptr x);
    245 __MPC_DECLSPEC void mpc_get_prec2   (mpfr_prec_t *pr, mpfr_prec_t *pi, mpc_srcptr x);
    246 __MPC_DECLSPEC void mpc_set_prec    (mpc_ptr, mpfr_prec_t);
    247 __MPC_DECLSPEC const char * mpc_get_version (void);
    248 
    249 __MPC_DECLSPEC int  mpc_strtoc      (mpc_ptr, const char *, char **, int, mpc_rnd_t);
    250 __MPC_DECLSPEC int  mpc_set_str     (mpc_ptr, const char *, int, mpc_rnd_t);
    251 __MPC_DECLSPEC char * mpc_get_str   (int, size_t, mpc_srcptr, mpc_rnd_t);
    252 __MPC_DECLSPEC void mpc_free_str    (char *);
    253 
    254 /* declare certain functions only if appropriate headers have been included */
    255 #ifdef _MPC_H_HAVE_INTMAX_T
    256 __MPC_DECLSPEC int  mpc_set_sj      (mpc_ptr, intmax_t, mpc_rnd_t);
    257 __MPC_DECLSPEC int  mpc_set_uj      (mpc_ptr, uintmax_t,  mpc_rnd_t);
    258 __MPC_DECLSPEC int  mpc_set_sj_sj   (mpc_ptr, intmax_t, intmax_t, mpc_rnd_t);
    259 __MPC_DECLSPEC int  mpc_set_uj_uj   (mpc_ptr, uintmax_t, uintmax_t, mpc_rnd_t);
    260 #endif
    261 
    262 #ifdef _Complex_I
    263 __MPC_DECLSPEC int  mpc_set_dc      (mpc_ptr, double _Complex, mpc_rnd_t);
    264 __MPC_DECLSPEC int  mpc_set_ldc     (mpc_ptr, long double _Complex, mpc_rnd_t);
    265 __MPC_DECLSPEC double _Complex mpc_get_dc (mpc_srcptr, mpc_rnd_t);
    266 __MPC_DECLSPEC long double _Complex mpc_get_ldc (mpc_srcptr, mpc_rnd_t);
    267 #endif
    268 
    269 #ifdef _GMP_H_HAVE_FILE
    270 __MPC_DECLSPEC int mpc_inp_str    (mpc_ptr, FILE *, size_t *, int, mpc_rnd_t);
    271 __MPC_DECLSPEC size_t mpc_out_str (FILE *, int, size_t, mpc_srcptr, mpc_rnd_t);
    272 __MPC_DECLSPEC void mpcb_out_str  (FILE *f, mpcb_srcptr);
    273 __MPC_DECLSPEC void mpcr_out_str (FILE *f, mpcr_srcptr r);
    274 #endif
    275 
    276 __MPC_DECLSPEC int mpcr_inf_p (mpcr_srcptr r);
    277 __MPC_DECLSPEC int mpcr_zero_p (mpcr_srcptr r);
    278 __MPC_DECLSPEC int mpcr_lt_half_p (mpcr_srcptr r);
    279 __MPC_DECLSPEC int mpcr_cmp (mpcr_srcptr r, mpcr_srcptr s);
    280 __MPC_DECLSPEC void mpcr_set_inf (mpcr_ptr r);
    281 __MPC_DECLSPEC void mpcr_set_zero (mpcr_ptr r);
    282 __MPC_DECLSPEC void mpcr_set_one (mpcr_ptr r);
    283 __MPC_DECLSPEC void mpcr_set (mpcr_ptr r, mpcr_srcptr s);
    284 __MPC_DECLSPEC void mpcr_set_ui64_2si64 (mpcr_ptr r, uint64_t mant,
    285    int64_t exp);
    286 __MPC_DECLSPEC void mpcr_max (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t);
    287 __MPC_DECLSPEC int64_t mpcr_get_exp (mpcr_srcptr r);
    288 __MPC_DECLSPEC void mpcr_mul (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t);
    289 __MPC_DECLSPEC void mpcr_mul_2ui (mpcr_ptr r, mpcr_srcptr s,
    290    unsigned long int e);
    291 __MPC_DECLSPEC void mpcr_sqr (mpcr_ptr r, mpcr_srcptr s);
    292 __MPC_DECLSPEC void mpcr_add (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t);
    293 __MPC_DECLSPEC void mpcr_sub (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t);
    294 __MPC_DECLSPEC void mpcr_sub_rnd (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t,
    295    mpfr_rnd_t rnd);
    296 __MPC_DECLSPEC void mpcr_div (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t);
    297 __MPC_DECLSPEC void mpcr_div_2ui (mpcr_ptr r, mpcr_srcptr s,
    298    unsigned long int e);
    299 __MPC_DECLSPEC int64_t sqrt_int64 (int64_t n);
    300 __MPC_DECLSPEC void mpcr_sqrt (mpcr_ptr r, mpcr_srcptr s);
    301 __MPC_DECLSPEC void mpcr_add_rounding_error (mpcr_ptr r, mpfr_prec_t p,
    302    mpfr_rnd_t rnd);
    303 __MPC_DECLSPEC void mpcr_c_abs_rnd (mpcr_ptr r, mpc_srcptr z,
    304    mpfr_rnd_t rnd);
    305 
    306 __MPC_DECLSPEC void mpcb_init (mpcb_ptr);
    307 __MPC_DECLSPEC void mpcb_clear (mpcb_ptr);
    308 __MPC_DECLSPEC mpfr_prec_t mpcb_get_prec (mpcb_srcptr);
    309 __MPC_DECLSPEC void mpcb_set_prec (mpcb_ptr, mpfr_prec_t);
    310 __MPC_DECLSPEC void mpcb_set (mpcb_ptr, mpcb_srcptr);
    311 __MPC_DECLSPEC void mpcb_set_inf (mpcb_ptr);
    312 __MPC_DECLSPEC void mpcb_set_c (mpcb_ptr, mpc_srcptr, mpfr_prec_t,
    313    unsigned long int, unsigned long int);
    314 __MPC_DECLSPEC void mpcb_set_ui_ui (mpcb_ptr, unsigned long int,
    315    unsigned long int, mpfr_prec_t);
    316 __MPC_DECLSPEC void mpcb_neg (mpcb_ptr, mpcb_srcptr);
    317 __MPC_DECLSPEC void mpcb_mul (mpcb_ptr, mpcb_srcptr, mpcb_srcptr);
    318 __MPC_DECLSPEC void mpcb_sqr (mpcb_ptr, mpcb_srcptr);
    319 __MPC_DECLSPEC void mpcb_pow_ui (mpcb_ptr, mpcb_srcptr, unsigned long int);
    320 __MPC_DECLSPEC void mpcb_add (mpcb_ptr, mpcb_srcptr, mpcb_srcptr);
    321 __MPC_DECLSPEC void mpcb_sqrt (mpcb_ptr, mpcb_srcptr);
    322 __MPC_DECLSPEC void mpcb_div (mpcb_ptr, mpcb_srcptr, mpcb_srcptr);
    323 __MPC_DECLSPEC void mpcb_div_2ui (mpcb_ptr, mpcb_srcptr, unsigned long int);
    324 __MPC_DECLSPEC int mpcb_can_round (mpcb_srcptr, mpfr_prec_t, mpfr_prec_t,
    325    mpc_rnd_t);
    326 __MPC_DECLSPEC int mpcb_round (mpc_ptr, mpcb_srcptr, mpc_rnd_t);
    327 __MPC_DECLSPEC int mpc_eta_fund (mpc_ptr, mpc_srcptr, mpc_rnd_t);
    328 
    329 #if defined (__cplusplus)
    330 }
    331 #endif
    332 
    333 #define mpc_realref(x) ((x)->re)
    334 #define mpc_imagref(x) ((x)->im)
    335 
    336 #define mpc_cmp_si(x, y) \
    337  ( mpc_cmp_si_si ((x), (y), 0l) )
    338 #define mpc_ui_sub(x, y, z, r) mpc_ui_ui_sub (x, y, 0ul, z, r)
    339 
    340 /*
    341    Define a fake mpfr_set_fr so that, for instance, mpc_set_fr_z would
    342    be defined as follows:
    343    mpc_set_fr_z (mpc_t rop, mpfr_t x, mpz_t y, mpc_rnd_t rnd)
    344        MPC_SET_X_Y (fr, z, rop, x, y, rnd)
    345 */
    346 #ifndef mpfr_set_fr
    347 #define mpfr_set_fr mpfr_set
    348 #endif
    349 #define MPC_SET_X_Y(real_t, imag_t, z, real_value, imag_value, rnd)     \
    350   {                                                                     \
    351     int _inex_re, _inex_im;                                             \
    352     _inex_re = (mpfr_set_ ## real_t) (mpc_realref (z), (real_value), MPC_RND_RE (rnd)); \
    353     _inex_im = (mpfr_set_ ## imag_t) (mpc_imagref (z), (imag_value), MPC_RND_IM (rnd)); \
    354     return MPC_INEX (_inex_re, _inex_im);                               \
    355   }
    356 
    357 #endif /* ifndef __MPC_H */
    358