Blame src/mpc.h

Packit Service 2e9770
/* mpc.h -- Include file for mpc.
Packit Service 2e9770
Packit Service 2e9770
Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2016, 2017 INRIA
Packit Service 2e9770
Packit Service 2e9770
This file is part of GNU MPC.
Packit Service 2e9770
Packit Service 2e9770
GNU MPC is free software; you can redistribute it and/or modify it under
Packit Service 2e9770
the terms of the GNU Lesser General Public License as published by the
Packit Service 2e9770
Free Software Foundation; either version 3 of the License, or (at your
Packit Service 2e9770
option) any later version.
Packit Service 2e9770
Packit Service 2e9770
GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
Packit Service 2e9770
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
Packit Service 2e9770
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
Packit Service 2e9770
more details.
Packit Service 2e9770
Packit Service 2e9770
You should have received a copy of the GNU Lesser General Public License
Packit Service 2e9770
along with this program. If not, see http://www.gnu.org/licenses/ .
Packit Service 2e9770
*/
Packit Service 2e9770
Packit Service 2e9770
#ifndef __MPC_H
Packit Service 2e9770
#define __MPC_H
Packit Service 2e9770
Packit Service 2e9770
#include "gmp.h"
Packit Service 2e9770
#include "mpfr.h"
Packit Service 2e9770
Packit Service 2e9770
/* Define MPC version number */
Packit Service 2e9770
#define MPC_VERSION_MAJOR 1
Packit Service 2e9770
#define MPC_VERSION_MINOR 1
Packit Service 2e9770
#define MPC_VERSION_PATCHLEVEL 0
Packit Service 2e9770
#define MPC_VERSION_STRING "1.1.0"
Packit Service 2e9770
Packit Service 2e9770
/* Macros dealing with MPC VERSION */
Packit Service 2e9770
#define MPC_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
Packit Service 2e9770
#define MPC_VERSION                                                     \
Packit Service 2e9770
  MPC_VERSION_NUM(MPC_VERSION_MAJOR,MPC_VERSION_MINOR,MPC_VERSION_PATCHLEVEL)
Packit Service 2e9770
Packit Service 2e9770
/* Check if stdint.h/inttypes.h is included */
Packit Service 2e9770
#if defined (INTMAX_C) && defined (UINTMAX_C)
Packit Service 2e9770
#define _MPC_H_HAVE_INTMAX_T 1
Packit Service 2e9770
#endif
Packit Service 2e9770
Packit Service 2e9770
/* Return values */
Packit Service 2e9770
Packit Service 2e9770
/* Transform negative to 2, positive to 1, leave 0 unchanged */
Packit Service 2e9770
#define MPC_INEX_POS(inex) (((inex) < 0) ? 2 : ((inex) == 0) ? 0 : 1)
Packit Service 2e9770
/* Transform 2 to negative, 1 to positive, leave 0 unchanged */
Packit Service 2e9770
#define MPC_INEX_NEG(inex) (((inex) == 2) ? -1 : ((inex) == 0) ? 0 : 1)
Packit Service 2e9770
Packit Service 2e9770
/* The global inexact flag is made of (real flag) + 4 * (imaginary flag), where
Packit Service 2e9770
   each of the real and imaginary inexact flag are:
Packit Service 2e9770
   0 when the result is exact (no rounding error)
Packit Service 2e9770
   1 when the result is larger than the exact value
Packit Service 2e9770
   2 when the result is smaller than the exact value */
Packit Service 2e9770
#define MPC_INEX(inex_re, inex_im) \
Packit Service 2e9770
        (MPC_INEX_POS(inex_re) | (MPC_INEX_POS(inex_im) << 2))
Packit Service 2e9770
#define MPC_INEX_RE(inex) MPC_INEX_NEG((inex) & 3)
Packit Service 2e9770
#define MPC_INEX_IM(inex) MPC_INEX_NEG((inex) >> 2)
Packit Service 2e9770
Packit Service 2e9770
/* For functions computing two results, the return value is
Packit Service 2e9770
   inexact1+16*inexact2, which is 0 iif both results are exact. */
Packit Service 2e9770
#define MPC_INEX12(inex1, inex2) (inex1 | (inex2 << 4))
Packit Service 2e9770
#define MPC_INEX1(inex) (inex & 15)
Packit Service 2e9770
#define MPC_INEX2(inex) (inex >> 4)
Packit Service 2e9770
Packit Service 2e9770
/* Definition of rounding modes */
Packit Service 2e9770
Packit Service 2e9770
/* a complex rounding mode is just a pair of two real rounding modes
Packit Service 2e9770
   we reserve four bits for a real rounding mode.  */
Packit Service 2e9770
typedef int mpc_rnd_t;
Packit Service 2e9770
Packit Service 2e9770
#define MPC_RND(r1,r2) (((int)(r1)) + ((int)(r2) << 4))
Packit Service 2e9770
#define MPC_RND_RE(x) ((mpfr_rnd_t)((x) & 0x0F))
Packit Service 2e9770
#define MPC_RND_IM(x) ((mpfr_rnd_t)((x) >> 4))
Packit Service 2e9770
Packit Service 2e9770
#define MPC_RNDNN MPC_RND (MPFR_RNDN,MPFR_RNDN)
Packit Service 2e9770
#define MPC_RNDNZ MPC_RND (MPFR_RNDN,MPFR_RNDZ)
Packit Service 2e9770
#define MPC_RNDNU MPC_RND (MPFR_RNDN,MPFR_RNDU)
Packit Service 2e9770
#define MPC_RNDND MPC_RND (MPFR_RNDN,MPFR_RNDD)
Packit Service 2e9770
Packit Service 2e9770
#define MPC_RNDZN MPC_RND (MPFR_RNDZ,MPFR_RNDN)
Packit Service 2e9770
#define MPC_RNDZZ MPC_RND (MPFR_RNDZ,MPFR_RNDZ)
Packit Service 2e9770
#define MPC_RNDZU MPC_RND (MPFR_RNDZ,MPFR_RNDU)
Packit Service 2e9770
#define MPC_RNDZD MPC_RND (MPFR_RNDZ,MPFR_RNDD)
Packit Service 2e9770
Packit Service 2e9770
#define MPC_RNDUN MPC_RND (MPFR_RNDU,MPFR_RNDN)
Packit Service 2e9770
#define MPC_RNDUZ MPC_RND (MPFR_RNDU,MPFR_RNDZ)
Packit Service 2e9770
#define MPC_RNDUU MPC_RND (MPFR_RNDU,MPFR_RNDU)
Packit Service 2e9770
#define MPC_RNDUD MPC_RND (MPFR_RNDU,MPFR_RNDD)
Packit Service 2e9770
Packit Service 2e9770
#define MPC_RNDDN MPC_RND (MPFR_RNDD,MPFR_RNDN)
Packit Service 2e9770
#define MPC_RNDDZ MPC_RND (MPFR_RNDD,MPFR_RNDZ)
Packit Service 2e9770
#define MPC_RNDDU MPC_RND (MPFR_RNDD,MPFR_RNDU)
Packit Service 2e9770
#define MPC_RNDDD MPC_RND (MPFR_RNDD,MPFR_RNDD)
Packit Service 2e9770
Packit Service 2e9770
Packit Service 2e9770
/* Definitions of types and their semantics */
Packit Service 2e9770
Packit Service 2e9770
typedef struct {
Packit Service 2e9770
  mpfr_t re;
Packit Service 2e9770
  mpfr_t im;
Packit Service 2e9770
}
Packit Service 2e9770
__mpc_struct;
Packit Service 2e9770
Packit Service 2e9770
typedef __mpc_struct mpc_t[1];
Packit Service 2e9770
typedef __mpc_struct *mpc_ptr;
Packit Service 2e9770
typedef const __mpc_struct *mpc_srcptr;
Packit Service 2e9770
Packit Service 2e9770
/* Support for WINDOWS DLL, see
Packit Service 2e9770
   http://lists.gforge.inria.fr/pipermail/mpc-discuss/2011-November/000990.html;
Packit Service 2e9770
   when building the DLL, export symbols, otherwise behave as GMP           */
Packit Service 2e9770
#if defined (__MPC_LIBRARY_BUILD) && __GMP_LIBGMP_DLL
Packit Service 2e9770
#define __MPC_DECLSPEC __GMP_DECLSPEC_EXPORT
Packit Service 2e9770
#else
Packit Service 2e9770
#define __MPC_DECLSPEC __GMP_DECLSPEC
Packit Service 2e9770
#endif
Packit Service 2e9770
Packit Service 2e9770
#if defined (__cplusplus)
Packit Service 2e9770
extern "C" {
Packit Service 2e9770
#endif
Packit Service 2e9770
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_add       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_add_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_add_si    (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_add_ui    (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_sub       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_sub_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_fr_sub    (mpc_ptr, mpfr_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_sub_ui    (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_ui_ui_sub (mpc_ptr, unsigned long int, unsigned long int, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_mul       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_mul_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_mul_ui    (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_mul_si    (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_mul_i     (mpc_ptr, mpc_srcptr, int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_sqr       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_div       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_pow       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_pow_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_pow_ld    (mpc_ptr, mpc_srcptr, long double, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_pow_d     (mpc_ptr, mpc_srcptr, double, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_pow_si    (mpc_ptr, mpc_srcptr, long, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_pow_ui    (mpc_ptr, mpc_srcptr, unsigned long, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_pow_z     (mpc_ptr, mpc_srcptr, mpz_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_div_fr    (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_fr_div    (mpc_ptr, mpfr_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_div_ui    (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_ui_div    (mpc_ptr, unsigned long int, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_div_2ui   (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_mul_2ui   (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_div_2si   (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_mul_2si   (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_conj      (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_neg       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_norm      (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_abs       (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_sqrt      (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_d     (mpc_ptr, double, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_d_d   (mpc_ptr, double, double, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_ld    (mpc_ptr, long double, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_ld_ld (mpc_ptr, long double, long double, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_f     (mpc_ptr, mpf_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_f_f   (mpc_ptr, mpf_srcptr, mpf_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_fr    (mpc_ptr, mpfr_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_fr_fr (mpc_ptr, mpfr_srcptr, mpfr_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_q     (mpc_ptr, mpq_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_q_q   (mpc_ptr, mpq_srcptr, mpq_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_si    (mpc_ptr, long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_si_si (mpc_ptr, long int, long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_ui    (mpc_ptr, unsigned long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_ui_ui (mpc_ptr, unsigned long int, unsigned long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_z     (mpc_ptr, mpz_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_z_z   (mpc_ptr, mpz_srcptr, mpz_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC void mpc_swap      (mpc_ptr, mpc_ptr);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_fma       (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
Packit Service 2e9770
__MPC_DECLSPEC void mpc_set_nan   (mpc_ptr);
Packit Service 2e9770
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_real        (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_imag        (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_arg         (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_proj        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_cmp         (mpc_srcptr, mpc_srcptr);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_cmp_si_si   (mpc_srcptr, long int, long int);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_cmp_abs     (mpc_srcptr, mpc_srcptr);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_exp         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_log         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_log10       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_sin         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_cos         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_sin_cos     (mpc_ptr, mpc_ptr, mpc_srcptr, mpc_rnd_t, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_tan         (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_sinh        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_cosh        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_tanh        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_asin        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_acos        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_atan        (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_asinh       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_acosh       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_atanh       (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_rootofunity (mpc_ptr, unsigned long int, unsigned long int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC void mpc_clear       (mpc_ptr);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_urandom     (mpc_ptr, gmp_randstate_t);
Packit Service 2e9770
__MPC_DECLSPEC void mpc_init2       (mpc_ptr, mpfr_prec_t);
Packit Service 2e9770
__MPC_DECLSPEC void mpc_init3       (mpc_ptr, mpfr_prec_t, mpfr_prec_t);
Packit Service 2e9770
__MPC_DECLSPEC mpfr_prec_t mpc_get_prec (mpc_srcptr x);
Packit Service 2e9770
__MPC_DECLSPEC void mpc_get_prec2   (mpfr_prec_t *pr, mpfr_prec_t *pi, mpc_srcptr x);
Packit Service 2e9770
__MPC_DECLSPEC void mpc_set_prec    (mpc_ptr, mpfr_prec_t);
Packit Service 2e9770
__MPC_DECLSPEC const char * mpc_get_version (void);
Packit Service 2e9770
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_strtoc      (mpc_ptr, const char *, char **, int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_str     (mpc_ptr, const char *, int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC char * mpc_get_str   (int, size_t, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC void mpc_free_str    (char *);
Packit Service 2e9770
Packit Service 2e9770
/* declare certain functions only if appropriate headers have been included */
Packit Service 2e9770
#ifdef _MPC_H_HAVE_INTMAX_T
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_sj      (mpc_ptr, intmax_t, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_uj      (mpc_ptr, uintmax_t,  mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_sj_sj   (mpc_ptr, intmax_t, intmax_t, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_uj_uj   (mpc_ptr, uintmax_t, uintmax_t, mpc_rnd_t);
Packit Service 2e9770
#endif
Packit Service 2e9770
Packit Service 2e9770
#ifdef _Complex_I
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_dc      (mpc_ptr, double _Complex, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC int  mpc_set_ldc     (mpc_ptr, long double _Complex, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC double _Complex mpc_get_dc (mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC long double _Complex mpc_get_ldc (mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
#endif
Packit Service 2e9770
Packit Service 2e9770
#ifdef _GMP_H_HAVE_FILE
Packit Service 2e9770
__MPC_DECLSPEC int mpc_inp_str    (mpc_ptr, FILE *, size_t *, int, mpc_rnd_t);
Packit Service 2e9770
__MPC_DECLSPEC size_t mpc_out_str (FILE *, int, size_t, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
#endif
Packit Service 2e9770
Packit Service 2e9770
#if defined (__cplusplus)
Packit Service 2e9770
}
Packit Service 2e9770
#endif
Packit Service 2e9770
Packit Service 2e9770
#define mpc_realref(x) ((x)->re)
Packit Service 2e9770
#define mpc_imagref(x) ((x)->im)
Packit Service 2e9770
Packit Service 2e9770
#define mpc_cmp_si(x, y) \
Packit Service 2e9770
 ( mpc_cmp_si_si ((x), (y), 0l) )
Packit Service 2e9770
#define mpc_ui_sub(x, y, z, r) mpc_ui_ui_sub (x, y, 0ul, z, r)
Packit Service 2e9770
Packit Service 2e9770
/*
Packit Service 2e9770
   Define a fake mpfr_set_fr so that, for instance, mpc_set_fr_z would
Packit Service 2e9770
   be defined as follows:
Packit Service 2e9770
   mpc_set_fr_z (mpc_t rop, mpfr_t x, mpz_t y, mpc_rnd_t rnd)
Packit Service 2e9770
       MPC_SET_X_Y (fr, z, rop, x, y, rnd)
Packit Service 2e9770
*/
Packit Service 2e9770
#ifndef mpfr_set_fr
Packit Service 2e9770
#define mpfr_set_fr mpfr_set
Packit Service 2e9770
#endif
Packit Service 2e9770
#define MPC_SET_X_Y(real_t, imag_t, z, real_value, imag_value, rnd)     \
Packit Service 2e9770
  {                                                                     \
Packit Service 2e9770
    int _inex_re, _inex_im;                                             \
Packit Service 2e9770
    _inex_re = (mpfr_set_ ## real_t) (mpc_realref (z), (real_value), MPC_RND_RE (rnd)); \
Packit Service 2e9770
    _inex_im = (mpfr_set_ ## imag_t) (mpc_imagref (z), (imag_value), MPC_RND_IM (rnd)); \
Packit Service 2e9770
    return MPC_INEX (_inex_re, _inex_im);                               \
Packit Service 2e9770
  }
Packit Service 2e9770
Packit Service 2e9770
#endif /* ifndef __MPC_H */