Annotation of OpenXM_contrib2/windows/gmp/win32/mpc.h, Revision 1.1
1.1 ! ohara 1: /* mpc.h -- Include file for mpc.
! 2:
! 3: Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012, 2014, 2015 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 "gmp.h"
! 25: #include "mpfr.h"
! 26:
! 27: /* Backwards compatibility with mpfr<3.0.0 */
! 28: #ifndef mpfr_exp_t
! 29: #define mpfr_exp_t mp_exp_t
! 30: #endif
! 31:
! 32: /* Define MPC version number */
! 33: #define MPC_VERSION_MAJOR 1
! 34: #define MPC_VERSION_MINOR 0
! 35: #define MPC_VERSION_PATCHLEVEL 3
! 36: #define MPC_VERSION_STRING "1.0.3"
! 37:
! 38: /* Macros dealing with MPC VERSION */
! 39: #define MPC_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
! 40: #define MPC_VERSION \
! 41: MPC_VERSION_NUM(MPC_VERSION_MAJOR,MPC_VERSION_MINOR,MPC_VERSION_PATCHLEVEL)
! 42:
! 43: /* Check if stdint.h/inttypes.h is included */
! 44: #if defined (INTMAX_C) && defined (UINTMAX_C)
! 45: #define _MPC_H_HAVE_INTMAX_T 1
! 46: #endif
! 47:
! 48: /* Return values */
! 49:
! 50: /* Transform negative to 2, positive to 1, leave 0 unchanged */
! 51: #define MPC_INEX_POS(inex) (((inex) < 0) ? 2 : ((inex) == 0) ? 0 : 1)
! 52: /* Transform 2 to negative, 1 to positive, leave 0 unchanged */
! 53: #define MPC_INEX_NEG(inex) (((inex) == 2) ? -1 : ((inex) == 0) ? 0 : 1)
! 54:
! 55: /* The global inexact flag is made of (real flag) + 4 * (imaginary flag), where
! 56: each of the real and imaginary inexact flag are:
! 57: 0 when the result is exact (no rounding error)
! 58: 1 when the result is larger than the exact value
! 59: 2 when the result is smaller than the exact value */
! 60: #define MPC_INEX(inex_re, inex_im) \
! 61: (MPC_INEX_POS(inex_re) | (MPC_INEX_POS(inex_im) << 2))
! 62: #define MPC_INEX_RE(inex) MPC_INEX_NEG((inex) & 3)
! 63: #define MPC_INEX_IM(inex) MPC_INEX_NEG((inex) >> 2)
! 64:
! 65: /* For functions computing two results, the return value is
! 66: inexact1+16*inexact2, which is 0 iif both results are exact. */
! 67: #define MPC_INEX12(inex1, inex2) (inex1 | (inex2 << 4))
! 68: #define MPC_INEX1(inex) (inex & 15)
! 69: #define MPC_INEX2(inex) (inex >> 4)
! 70:
! 71: /* Definition of rounding modes */
! 72:
! 73: /* a complex rounding mode is just a pair of two real rounding modes
! 74: we reserve four bits for a real rounding mode. */
! 75: typedef int mpc_rnd_t;
! 76:
! 77: #define MPC_RND(r1,r2) (((int)(r1)) + ((int)(r2) << 4))
! 78: #define MPC_RND_RE(x) ((mpfr_rnd_t)((x) & 0x0F))
! 79: #define MPC_RND_IM(x) ((mpfr_rnd_t)((x) >> 4))
! 80:
! 81: #define MPC_RNDNN MPC_RND (GMP_RNDN,GMP_RNDN)
! 82: #define MPC_RNDNZ MPC_RND (GMP_RNDN,GMP_RNDZ)
! 83: #define MPC_RNDNU MPC_RND (GMP_RNDN,GMP_RNDU)
! 84: #define MPC_RNDND MPC_RND (GMP_RNDN,GMP_RNDD)
! 85:
! 86: #define MPC_RNDZN MPC_RND (GMP_RNDZ,GMP_RNDN)
! 87: #define MPC_RNDZZ MPC_RND (GMP_RNDZ,GMP_RNDZ)
! 88: #define MPC_RNDZU MPC_RND (GMP_RNDZ,GMP_RNDU)
! 89: #define MPC_RNDZD MPC_RND (GMP_RNDZ,GMP_RNDD)
! 90:
! 91: #define MPC_RNDUN MPC_RND (GMP_RNDU,GMP_RNDN)
! 92: #define MPC_RNDUZ MPC_RND (GMP_RNDU,GMP_RNDZ)
! 93: #define MPC_RNDUU MPC_RND (GMP_RNDU,GMP_RNDU)
! 94: #define MPC_RNDUD MPC_RND (GMP_RNDU,GMP_RNDD)
! 95:
! 96: #define MPC_RNDDN MPC_RND (GMP_RNDD,GMP_RNDN)
! 97: #define MPC_RNDDZ MPC_RND (GMP_RNDD,GMP_RNDZ)
! 98: #define MPC_RNDDU MPC_RND (GMP_RNDD,GMP_RNDU)
! 99: #define MPC_RNDDD MPC_RND (GMP_RNDD,GMP_RNDD)
! 100:
! 101:
! 102: /* Definitions of types and their semantics */
! 103:
! 104: typedef struct {
! 105: mpfr_t re;
! 106: mpfr_t im;
! 107: }
! 108: __mpc_struct;
! 109:
! 110: typedef __mpc_struct mpc_t[1];
! 111: typedef __mpc_struct *mpc_ptr;
! 112: typedef const __mpc_struct *mpc_srcptr;
! 113:
! 114: /* Support for WINDOWS DLL, see
! 115: http://lists.gforge.inria.fr/pipermail/mpc-discuss/2011-November/000990.html;
! 116: when building the DLL, export symbols, otherwise behave as GMP */
! 117: #if defined (__MPC_LIBRARY_BUILD) && __GMP_LIBGMP_DLL
! 118: #define __MPC_DECLSPEC __GMP_DECLSPEC_EXPORT
! 119: #else
! 120: #define __MPC_DECLSPEC __GMP_DECLSPEC
! 121: #endif
! 122:
! 123: #if defined (__cplusplus)
! 124: extern "C" {
! 125: #endif
! 126:
! 127: __MPC_DECLSPEC int mpc_add (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
! 128: __MPC_DECLSPEC int mpc_add_fr (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
! 129: __MPC_DECLSPEC int mpc_add_si (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
! 130: __MPC_DECLSPEC int mpc_add_ui (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
! 131: __MPC_DECLSPEC int mpc_sub (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
! 132: __MPC_DECLSPEC int mpc_sub_fr (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
! 133: __MPC_DECLSPEC int mpc_fr_sub (mpc_ptr, mpfr_srcptr, mpc_srcptr, mpc_rnd_t);
! 134: __MPC_DECLSPEC int mpc_sub_ui (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
! 135: __MPC_DECLSPEC int mpc_ui_ui_sub (mpc_ptr, unsigned long int, unsigned long int, mpc_srcptr, mpc_rnd_t);
! 136: __MPC_DECLSPEC int mpc_mul (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
! 137: __MPC_DECLSPEC int mpc_mul_fr (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
! 138: __MPC_DECLSPEC int mpc_mul_ui (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
! 139: __MPC_DECLSPEC int mpc_mul_si (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
! 140: __MPC_DECLSPEC int mpc_mul_i (mpc_ptr, mpc_srcptr, int, mpc_rnd_t);
! 141: __MPC_DECLSPEC int mpc_sqr (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 142: __MPC_DECLSPEC int mpc_div (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
! 143: __MPC_DECLSPEC int mpc_pow (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
! 144: __MPC_DECLSPEC int mpc_pow_fr (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
! 145: __MPC_DECLSPEC int mpc_pow_ld (mpc_ptr, mpc_srcptr, long double, mpc_rnd_t);
! 146: __MPC_DECLSPEC int mpc_pow_d (mpc_ptr, mpc_srcptr, double, mpc_rnd_t);
! 147: __MPC_DECLSPEC int mpc_pow_si (mpc_ptr, mpc_srcptr, long, mpc_rnd_t);
! 148: __MPC_DECLSPEC int mpc_pow_ui (mpc_ptr, mpc_srcptr, unsigned long, mpc_rnd_t);
! 149: __MPC_DECLSPEC int mpc_pow_z (mpc_ptr, mpc_srcptr, mpz_srcptr, mpc_rnd_t);
! 150: __MPC_DECLSPEC int mpc_div_fr (mpc_ptr, mpc_srcptr, mpfr_srcptr, mpc_rnd_t);
! 151: __MPC_DECLSPEC int mpc_fr_div (mpc_ptr, mpfr_srcptr, mpc_srcptr, mpc_rnd_t);
! 152: __MPC_DECLSPEC int mpc_div_ui (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
! 153: __MPC_DECLSPEC int mpc_ui_div (mpc_ptr, unsigned long int, mpc_srcptr, mpc_rnd_t);
! 154: __MPC_DECLSPEC int mpc_div_2ui (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
! 155: __MPC_DECLSPEC int mpc_mul_2ui (mpc_ptr, mpc_srcptr, unsigned long int, mpc_rnd_t);
! 156: __MPC_DECLSPEC int mpc_div_2si (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
! 157: __MPC_DECLSPEC int mpc_mul_2si (mpc_ptr, mpc_srcptr, long int, mpc_rnd_t);
! 158: __MPC_DECLSPEC int mpc_conj (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 159: __MPC_DECLSPEC int mpc_neg (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 160: __MPC_DECLSPEC int mpc_norm (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
! 161: __MPC_DECLSPEC int mpc_abs (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
! 162: __MPC_DECLSPEC int mpc_sqrt (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 163: __MPC_DECLSPEC int mpc_set (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 164: __MPC_DECLSPEC int mpc_set_d (mpc_ptr, double, mpc_rnd_t);
! 165: __MPC_DECLSPEC int mpc_set_d_d (mpc_ptr, double, double, mpc_rnd_t);
! 166: __MPC_DECLSPEC int mpc_set_ld (mpc_ptr, long double, mpc_rnd_t);
! 167: __MPC_DECLSPEC int mpc_set_ld_ld (mpc_ptr, long double, long double, mpc_rnd_t);
! 168: __MPC_DECLSPEC int mpc_set_f (mpc_ptr, mpf_srcptr, mpc_rnd_t);
! 169: __MPC_DECLSPEC int mpc_set_f_f (mpc_ptr, mpf_srcptr, mpf_srcptr, mpc_rnd_t);
! 170: __MPC_DECLSPEC int mpc_set_fr (mpc_ptr, mpfr_srcptr, mpc_rnd_t);
! 171: __MPC_DECLSPEC int mpc_set_fr_fr (mpc_ptr, mpfr_srcptr, mpfr_srcptr, mpc_rnd_t);
! 172: __MPC_DECLSPEC int mpc_set_q (mpc_ptr, mpq_srcptr, mpc_rnd_t);
! 173: __MPC_DECLSPEC int mpc_set_q_q (mpc_ptr, mpq_srcptr, mpq_srcptr, mpc_rnd_t);
! 174: __MPC_DECLSPEC int mpc_set_si (mpc_ptr, long int, mpc_rnd_t);
! 175: __MPC_DECLSPEC int mpc_set_si_si (mpc_ptr, long int, long int, mpc_rnd_t);
! 176: __MPC_DECLSPEC int mpc_set_ui (mpc_ptr, unsigned long int, mpc_rnd_t);
! 177: __MPC_DECLSPEC int mpc_set_ui_ui (mpc_ptr, unsigned long int, unsigned long int, mpc_rnd_t);
! 178: __MPC_DECLSPEC int mpc_set_z (mpc_ptr, mpz_srcptr, mpc_rnd_t);
! 179: __MPC_DECLSPEC int mpc_set_z_z (mpc_ptr, mpz_srcptr, mpz_srcptr, mpc_rnd_t);
! 180: __MPC_DECLSPEC void mpc_swap (mpc_ptr, mpc_ptr);
! 181: __MPC_DECLSPEC int mpc_fma (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
! 182:
! 183: __MPC_DECLSPEC void mpc_set_nan (mpc_ptr);
! 184:
! 185: __MPC_DECLSPEC int mpc_real (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
! 186: __MPC_DECLSPEC int mpc_imag (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
! 187: __MPC_DECLSPEC int mpc_arg (mpfr_ptr, mpc_srcptr, mpfr_rnd_t);
! 188: __MPC_DECLSPEC int mpc_proj (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 189: __MPC_DECLSPEC int mpc_cmp (mpc_srcptr, mpc_srcptr);
! 190: __MPC_DECLSPEC int mpc_cmp_si_si (mpc_srcptr, long int, long int);
! 191: __MPC_DECLSPEC int mpc_exp (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 192: __MPC_DECLSPEC int mpc_log (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 193: __MPC_DECLSPEC int mpc_log10 (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 194: __MPC_DECLSPEC int mpc_sin (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 195: __MPC_DECLSPEC int mpc_cos (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 196: __MPC_DECLSPEC int mpc_sin_cos (mpc_ptr, mpc_ptr, mpc_srcptr, mpc_rnd_t, mpc_rnd_t);
! 197: __MPC_DECLSPEC int mpc_tan (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 198: __MPC_DECLSPEC int mpc_sinh (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 199: __MPC_DECLSPEC int mpc_cosh (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 200: __MPC_DECLSPEC int mpc_tanh (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 201: __MPC_DECLSPEC int mpc_asin (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 202: __MPC_DECLSPEC int mpc_acos (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 203: __MPC_DECLSPEC int mpc_atan (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 204: __MPC_DECLSPEC int mpc_asinh (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 205: __MPC_DECLSPEC int mpc_acosh (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 206: __MPC_DECLSPEC int mpc_atanh (mpc_ptr, mpc_srcptr, mpc_rnd_t);
! 207: __MPC_DECLSPEC void mpc_clear (mpc_ptr);
! 208: __MPC_DECLSPEC int mpc_urandom (mpc_ptr, gmp_randstate_t);
! 209: __MPC_DECLSPEC void mpc_init2 (mpc_ptr, mpfr_prec_t);
! 210: __MPC_DECLSPEC void mpc_init3 (mpc_ptr, mpfr_prec_t, mpfr_prec_t);
! 211: __MPC_DECLSPEC mpfr_prec_t mpc_get_prec (mpc_srcptr x);
! 212: __MPC_DECLSPEC void mpc_get_prec2 (mpfr_prec_t *pr, mpfr_prec_t *pi, mpc_srcptr x);
! 213: __MPC_DECLSPEC void mpc_set_prec (mpc_ptr, mpfr_prec_t);
! 214: __MPC_DECLSPEC const char * mpc_get_version (void);
! 215:
! 216: __MPC_DECLSPEC int mpc_strtoc (mpc_ptr, const char *, char **, int, mpc_rnd_t);
! 217: __MPC_DECLSPEC int mpc_set_str (mpc_ptr, const char *, int, mpc_rnd_t);
! 218: __MPC_DECLSPEC char * mpc_get_str (int, size_t, mpc_srcptr, mpc_rnd_t);
! 219: __MPC_DECLSPEC void mpc_free_str (char *);
! 220:
! 221: /* declare certain functions only if appropriate headers have been included */
! 222: #ifdef _MPC_H_HAVE_INTMAX_T
! 223: __MPC_DECLSPEC int mpc_set_sj (mpc_ptr, intmax_t, mpc_rnd_t);
! 224: __MPC_DECLSPEC int mpc_set_uj (mpc_ptr, uintmax_t, mpc_rnd_t);
! 225: __MPC_DECLSPEC int mpc_set_sj_sj (mpc_ptr, intmax_t, intmax_t, mpc_rnd_t);
! 226: __MPC_DECLSPEC int mpc_set_uj_uj (mpc_ptr, uintmax_t, uintmax_t, mpc_rnd_t);
! 227: #endif
! 228:
! 229: #ifdef _Complex_I
! 230: __MPC_DECLSPEC int mpc_set_dc (mpc_ptr, double _Complex, mpc_rnd_t);
! 231: __MPC_DECLSPEC int mpc_set_ldc (mpc_ptr, long double _Complex, mpc_rnd_t);
! 232: __MPC_DECLSPEC double _Complex mpc_get_dc (mpc_srcptr, mpc_rnd_t);
! 233: __MPC_DECLSPEC long double _Complex mpc_get_ldc (mpc_srcptr, mpc_rnd_t);
! 234: #endif
! 235:
! 236: #ifdef _GMP_H_HAVE_FILE
! 237: __MPC_DECLSPEC int mpc_inp_str (mpc_ptr, FILE *, size_t *, int, mpc_rnd_t);
! 238: __MPC_DECLSPEC size_t mpc_out_str (FILE *, int, size_t, mpc_srcptr, mpc_rnd_t);
! 239: #endif
! 240:
! 241: #if defined (__cplusplus)
! 242: }
! 243: #endif
! 244:
! 245: #define mpc_realref(x) ((x)->re)
! 246: #define mpc_imagref(x) ((x)->im)
! 247:
! 248: #define mpc_cmp_si(x, y) \
! 249: ( mpc_cmp_si_si ((x), (y), 0l) )
! 250: #define mpc_ui_sub(x, y, z, r) mpc_ui_ui_sub (x, y, 0ul, z, r)
! 251:
! 252: /*
! 253: Define a fake mpfr_set_fr so that, for instance, mpc_set_fr_z would
! 254: be defined as follows:
! 255: mpc_set_fr_z (mpc_t rop, mpfr_t x, mpz_t y, mpc_rnd_t rnd)
! 256: MPC_SET_X_Y (fr, z, rop, x, y, rnd)
! 257: */
! 258: #ifndef mpfr_set_fr
! 259: #define mpfr_set_fr mpfr_set
! 260: #endif
! 261: #define MPC_SET_X_Y(real_t, imag_t, z, real_value, imag_value, rnd) \
! 262: { \
! 263: int _inex_re, _inex_im; \
! 264: _inex_re = (mpfr_set_ ## real_t) (mpc_realref (z), (real_value), MPC_RND_RE (rnd)); \
! 265: _inex_im = (mpfr_set_ ## imag_t) (mpc_imagref (z), (imag_value), MPC_RND_IM (rnd)); \
! 266: return MPC_INEX (_inex_re, _inex_im); \
! 267: }
! 268:
! 269: #endif /* ifndef __MPC_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>