1#ifndef DOXYGEN_SHOULD_SKIP_THIS
48#define MAX_DIGITS 255L
56#define DEFAULT_DIGITS 100L
61typedef __int64 int64_t;
62typedef unsigned __int64 uint64_t;
77#define MAXD 2147483647L
84#define MAXD 9223372036854775807L
85#define BASE 1000000000L
111#define addint(a, b, c) *(c) = *(a) + *(b)
112#define changesign(a) (*(a) = -*(a))
113#define copy(a, b) ((a)[0] = (b)[0])
114#define decint(a, b) *(a) = *(a) - *(b)
115#define divint(a, b, c) \
116 *(c) = *(a) / *(b); \
118#define exactdivint(a, b, c) *(c) = *(a) / *(b);
119#define mp_greater(a, b) (*(a) > *(b))
120#define itomp(in, a) *(a) = in
121#define linint(a, ka, b, kb) *(a) = *(a)*ka + *(b)*kb
122#define mulint(a, b, c) *(c) = *(a) * *(b)
123#define one(a) (*(a) == 1)
124#define negative(a) (*(a) < 0)
125#define normalize(a) ()0
126#define positive(a) (*(a) > 0)
127#define sign(a) (*(a) < 0 ? NEG : POS)
128#define storesign(a, sa) (*(a) = labs(*(a)) * sa)
129#define subint(a, b, c) *(c) = *(a) - *(b)
130#define iszero(a) (*(a) == 0)
137#define DEC2DIG(d) ((d) % BASE_DIG ? (d) / BASE_DIG + 1 : (d) / BASE_DIG)
138#define DIG2DEC(d) ((d)*BASE_DIG)
143#define errcheck(s, e) \
144 if ((int64_t)(e) == -1L) { \
150#define CALLOC(n, s) xcalloc(n, s, __LINE__, __FILE__)
156typedef int64_t lrs_mp[1];
157typedef int64_t* lrs_mp_t;
158typedef int64_t** lrs_mp_vector;
159typedef int64_t*** lrs_mp_matrix;
165extern int64_t lrs_digits;
166extern int64_t lrs_record_digits;
175int64_t lrs_mp_init(int64_t dec_digits,
179#define lrs_alloc_mp(a)
180#define lrs_clear_mp(a)
182lrs_mp_t lrs_alloc_mp_t();
184lrs_alloc_mp_vector(int64_t n);
186lrs_alloc_mp_matrix(int64_t m,
189void lrs_clear_mp_vector(lrs_mp_vector a, int64_t n);
190void lrs_clear_mp_matrix(lrs_mp_matrix a, int64_t m, int64_t n);
196void atomp(
const char s[], lrs_mp a);
197int64_t compare(lrs_mp a, lrs_mp b);
198void gcd(lrs_mp u, lrs_mp v);
199void mptodouble(lrs_mp a,
double* x);
200int64_t mptoi(lrs_mp a);
202string pmp(
char name[], lrs_mp a);
203string prat(
char name[], lrs_mp Nt, lrs_mp Dt);
204char* cprat(
char name[], lrs_mp Nt, lrs_mp Dt);
206plrs_readrat(lrs_mp Na,
210void pmp(
char name[], lrs_mp a);
211void prat(
char name[], lrs_mp Nt, lrs_mp Dt);
213void readmp(lrs_mp a);
214int64_t readrat(lrs_mp Na,
216void reduce(lrs_mp Na, lrs_mp Da);
223void atoaa(
const char in[],
226int64_t atos(
char s[]);
227int64_t comprod(lrs_mp Na,
231void divrat(lrs_mp Na, lrs_mp Da, lrs_mp Nb, lrs_mp Db, lrs_mp Nc, lrs_mp Dc);
233void getfactorial(lrs_mp factorial, int64_t k);
234void linrat(lrs_mp Na,
242void lcm(lrs_mp a, lrs_mp b);
243void mulrat(lrs_mp Na, lrs_mp Da, lrs_mp Nb, lrs_mp Db, lrs_mp Nc, lrs_mp Dc);
245int64_t myrandom(int64_t num,
247void notimpl(
char s[]);
248void rattodouble(lrs_mp a,
251void reduceint(lrs_mp Na, lrs_mp Da);
252void reducearray(lrs_mp_vector p,
254void scalerat(lrs_mp Na, lrs_mp Da, int64_t ka);
260void lrs_getdigits(int64_t* a, int64_t* b);
262void stringcpy(
char* s,
char* t);
266void* xcalloc(int64_t n, int64_t s, int64_t l,
char* f);
268void lrs_default_digits_overflow();