MPSolve 3.2.1
Loading...
Searching...
No Matches
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
22extern "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
35void mpz_swap (mpz_t z1, mpz_t z2);
36#endif
37#ifndef mpz_tstbit
38int 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))
47void mpz_vinit (mpz_t v[], unsigned long int size);
48void 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
60void mpq_swap (mpq_t q1, mpq_t q2);
61#endif
62
63/* I/O */
64#ifndef mpq_out_str
65void 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))
70void mpq_vinit (mpq_t v[], unsigned long int size);
71void 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
83void mpf_swap (mpf_t f1, mpf_t f2);
84#endif
85void mpf_set_2dl (mpf_t f, double d, long int l);
86void mpf_get_2dl (double *d, long int *l, mpf_t f);
87long 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)
92void mpf_add_si (mpf_t r, mpf_t f, long int i);
93void mpf_sub_si (mpf_t r, mpf_t f, long int i);
94void mpf_si_sub (mpf_t r, long int i, mpf_t f);
95void mpf_mul_si (mpf_t r, mpf_t f, long int i);
96void mpf_div_si (mpf_t r, mpf_t f, long int i);
97#ifndef mpf_pow_ui
98void mpf_pow_ui (mpf_t r, mpf_t f, unsigned long int i);
99#endif
100void 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))
131void mpf_vinit (mpf_t v[], unsigned long int size);
132void mpf_vinit2 (mpf_t v[], unsigned long int size, unsigned long int prec);
133void 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