MPSolve  3.2.1
gmptools.h
Go to the documentation of this file.
1 /***********************************************************
2 ** GMP Tools **
3 ** Version 2.0 **
4 ** **
5 ** Written by Giuseppe Fiorentino **
6 ** (fiorent@dm.unipi.it) **
7 ***********************************************************/
8 
15 #ifndef __GMPTOOLS_H__
16 #define __GMPTOOLS_H__
17 
18 #include <gmp.h>
19 #include <stdio.h>
20 
21 #ifdef __cplusplus
22 extern "C"
23 {
24 #endif
25 
26 /**********************************************
27 * MPZ_T *
28 **********************************************/
29 
30 #define mpz_Val(Z) (*Z)
31 #define mpz_Move(Z1, Z2) (*Z1 = *Z2)
32 
33 /* missing functions */
34 #ifndef mpz_swap
35 void mpz_swap (mpz_t z1, mpz_t z2);
36 #endif
37 #ifndef mpz_tstbit
38 int mpz_tstbit (mpz_t z, unsigned long int pos);
39 #endif
40 #define mpz_get_bit(Z, N) mpz_tstbit (Z, N)
41 
42 #define mpz_mul_eq(Z1, Z2) mpz_mul (Z1, Z1, Z2)
43 #define mpz_add_eq(Z1, Z2) mpz_add (Z1, Z1, Z2)
44 
45 /* vector support functions */
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)
50 
51 /**********************************************
52 * MPQ_T *
53 **********************************************/
54 
55 #define mpq_Val(Q) (*Q)
56 #define mpq_Move(Q1, Q2) (*Q1 = *Q2)
57 
58 /* missing functions */
59 #ifndef mpq_swap
60 void mpq_swap (mpq_t q1, mpq_t q2);
61 #endif
62 
63 /* I/O */
64 #ifndef mpq_out_str
65 void mpq_out_str (FILE * stream, int base, mpq_t q);
66 #endif
67 
68 /* vector support functions */
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)
73 
74 /**********************************************
75 * MPF_T *
76 **********************************************/
77 
78 #define mpf_Val(F) (*F)
79 #define mpf_Move(F1, F2) (*F1 = *F2)
80 
81 /* missing functions */
82 #ifndef mpf_swap
83 void mpf_swap (mpf_t f1, mpf_t f2);
84 #endif
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);
88 
89 /* missing operators */
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);
97 #ifndef mpf_pow_ui
98 void mpf_pow_ui (mpf_t r, mpf_t f, unsigned long int i);
99 #endif
100 void mpf_pow_si (mpf_t r, mpf_t f, long int i);
101 
102 /* op= style operators for mpf_t */
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)
126 
127 #define mpf_is_zero_p(F) (mpf_sgn (F) ? 0 : 1)
128 
129 /* vector support functions */
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)
135 
136 
137 
138 /*
139  * End of extern "C" {
140  * ...
141  * }
142  */
143 #ifdef __cplusplus
144 }
145 #endif
146 
147 #endif