15 #ifndef __GMPTOOLS_H__
16 #define __GMPTOOLS_H__
30 #define mpz_Val(Z) (*Z)
31 #define mpz_Move(Z1, Z2) (*Z1 = *Z2)
35 void mpz_swap (mpz_t z1, mpz_t z2);
38 int mpz_tstbit (mpz_t z,
unsigned long int pos);
40 #define mpz_get_bit(Z, N) mpz_tstbit (Z, N)
42 #define mpz_mul_eq(Z1, Z2) mpz_mul (Z1, Z1, Z2)
43 #define mpz_add_eq(Z1, Z2) mpz_add (Z1, Z1, Z2)
46 #define mpz_valloc(N) (mpz_t*)malloc ((N)*sizeof(mpz_t))
47 void mpz_vinit (mpz_t v[],
unsigned long int size);
48 void mpz_vclear (mpz_t v[],
unsigned long int size);
49 #define mpz_vfree(V) free (V)
55 #define mpq_Val(Q) (*Q)
56 #define mpq_Move(Q1, Q2) (*Q1 = *Q2)
60 void mpq_swap (mpq_t q1, mpq_t q2);
65 void mpq_out_str (FILE * stream,
int base, mpq_t q);
69 #define mpq_valloc(N) (mpq_t*)malloc ((N)*sizeof(mpq_t))
70 void mpq_vinit (mpq_t v[],
unsigned long int size);
71 void mpq_vclear (mpq_t v[],
unsigned long int size);
72 #define mpq_vfree(V) free (V)
78 #define mpf_Val(F) (*F)
79 #define mpf_Move(F1, F2) (*F1 = *F2)
83 void mpf_swap (mpf_t f1, mpf_t f2);
85 void mpf_set_2dl (mpf_t f,
double d,
long int l);
86 void mpf_get_2dl (
double *d,
long int *l, mpf_t f);
87 long int mpf_size_2 (mpf_t f);
90 #define mpf_inv(R, F) mpf_ui_div (R, 1, F)
91 #define mpf_sqr(R, F) mpf_mul (R, F, F)
92 void mpf_add_si (mpf_t r, mpf_t f,
long int i);
93 void mpf_sub_si (mpf_t r, mpf_t f,
long int i);
94 void mpf_si_sub (mpf_t r,
long int i, mpf_t f);
95 void mpf_mul_si (mpf_t r, mpf_t f,
long int i);
96 void mpf_div_si (mpf_t r, mpf_t f,
long int i);
98 void mpf_pow_ui (mpf_t r, mpf_t f,
unsigned long int i);
100 void mpf_pow_si (mpf_t r, mpf_t f,
long int i);
103 #define mpf_neg_eq(F) mpf_neg (F, F)
104 #define mpf_inv_eq(F) mpf_ui_div (F, 1, F)
105 #define mpf_sqr_eq(F) mpf_mul (F, F, F)
106 #define mpf_sqrt_eq(F) mpf_sqrt (F, F)
107 #define mpf_add_eq(F1, F2) mpf_add (F1, F1, F2)
108 #define mpf_add_eq_ui(F, I) mpf_add_ui (F, F, I)
109 #define mpf_add_eq_si(F, I) mpf_add_si (F, F, I)
110 #define mpf_sub_eq(F1, F2) mpf_sub (F1, F1, F2)
111 #define mpf_sub_eq_ui(F, I) mpf_sub_ui (F, F, I)
112 #define mpf_sub_eq_si(F, I) mpf_sub_si (F, F, I)
113 #define mpf_ui_sub_eq(F, I) mpf_ui_sub (F, I, F)
114 #define mpf_si_sub_eq(F, I) mpf_si_sub (F, I, F)
115 #define mpf_mul_eq(F1, F2) mpf_mul (F1, F1, F2)
116 #define mpf_mul_eq_ui(F, I) mpf_mul_ui (F, F, I)
117 #define mpf_mul_eq_si(F, I) mpf_mul_si (F, F, I)
118 #define mpf_mul_eq_2exp(F, I) mpf_mul_2exp (F, F, I)
119 #define mpf_div_eq(F1, F2) mpf_div (F1, F1, F2)
120 #define mpf_div_eq_ui(F, I) mpf_div_ui (F, F, I)
121 #define mpf_div_eq_si(F, I) mpf_div_si (F, F, I)
122 #define mpf_ui_div_eq(F, I) mpf_ui_div (F, I, F)
123 #define mpf_si_div_eq(F, I) mpf_si_div (F, I, F)
124 #define mpf_div_eq_2exp(F, I) mpf_div_2exp (F, F, I)
125 #define mpf_pow_eq_si(F, I) mpf_pow_si (F, F, I)
127 #define mpf_is_zero_p(F) (mpf_sgn (F) ? 0 : 1)
130 #define mpf_valloc(N) (mpf_t*)malloc ((N)*sizeof(mpf_t))
131 void mpf_vinit (mpf_t v[],
unsigned long int size);
132 void mpf_vinit2 (mpf_t v[],
unsigned long int size,
unsigned long int prec);
133 void mpf_vclear (mpf_t v[],
unsigned long int size);
134 #define mpf_vfree(V) free (V)