1 #ifndef DOXYGEN_SHOULD_SKIP_THIS 46 #define MAX_DIGITS 255L
54 #define DEFAULT_DIGITS 100L
59 typedef __int64 int64_t;
60 typedef unsigned __int64 uint64_t;
74 #define FORMAT "%4.4lu" 75 #define MAXD 2147483647L
82 #define MAXD 9223372036854775807L
83 #define BASE 1000000000L
84 #define FORMAT "%9.9lu" 109 #define exactdivint(a, b, c) 110 divint((a), (b), (c)) 111 #define positive(a) (((a)[0
] < 2
|| ((a)[0
] == 2
&& (a)[1
] == 0
)) ? FALSE
: TRUE
) 112 #define negative(a) (((a)[0
] > -2
|| ((a)[0
] == -2
&& (a)[1
] == 0
)) ? FALSE
: TRUE
) 113 #define iszero(a) ((((a)[0
] == 2
|| (a)[0
] == -2
) && (a)[1
] == 0
) ? TRUE
: FALSE
) 114 #define one(a) (((a)[0
] == 2
&& (a)[1
] == 1
) ? TRUE
: FALSE
) 116 #define sign(a) (((a)[0
] < 0
) ? NEG
: POS
) 117 #define storesign(a, sa) a[0
] = ((a)[0
] > 0
) ? (sa) * ((a)[0
]) : -(sa) * ((a)[0
]) 118 #define changesign(a) a[0
] = -(a)[0
] 119 #define storelength(a, la) a[0
] = ((a)[0
] > 0
) ? (la) : -(la) 135 #define errcheck(s, e) 136 if ((int64_t)(e) == -1L
) { 142 #define CALLOC(n, s) xcalloc(n, s, __LINE__, __FILE__) 145 extern int64_t lrs_digits;
146 extern int64_t lrs_record_digits;
148 extern FILE* lrs_ifp;
149 extern FILE* lrs_ofp;
157 lrs_mp[MAX_DIGITS + 1];
158 typedef int64_t* lrs_mp_t;
159 typedef int64_t** lrs_mp_vector;
160 typedef int64_t*** lrs_mp_matrix;
167 #define lrs_alloc_mp(a) 168 #define lrs_clear_mp(a) 169 lrs_mp_t lrs_alloc_mp_t();
171 lrs_alloc_mp_vector(int64_t n);
173 lrs_alloc_mp_matrix(int64_t m,
175 int64_t lrs_mp_init(int64_t dec_digits,
178 void lrs_clear_mp_vector(lrs_mp_vector a, int64_t n);
179 void lrs_clear_mp_matrix(lrs_mp_matrix a, int64_t m, int64_t n);
185 int64_t length(lrs_mp a);
186 void atomp(
char s[], lrs_mp a);
187 int64_t compare(lrs_mp a, lrs_mp b);
188 void copy(lrs_mp a, lrs_mp b);
189 void divint(lrs_mp a,
192 void gcd(lrs_mp u, lrs_mp v);
193 int64_t mp_greater(lrs_mp a, lrs_mp b);
194 void itomp(int64_t in, lrs_mp a);
195 void linint(lrs_mp a,
199 void mptodouble(lrs_mp a,
double* x);
200 int64_t mptoi(lrs_mp a);
201 void mulint(lrs_mp a, lrs_mp b, lrs_mp c);
202 void normalize(lrs_mp a);
204 string pmp(
char name[], lrs_mp a);
205 string prat(
char name[], lrs_mp Nt, lrs_mp Dt);
206 char* cprat(
char name[], lrs_mp Nt, lrs_mp Dt);
208 plrs_readrat(lrs_mp Na,
212 void pmp(
char name[], lrs_mp a);
213 void prat(
char name[], lrs_mp Nt, lrs_mp Dt);
215 int64_t readrat(lrs_mp Na,
217 void reduce(lrs_mp Na, lrs_mp Da);
224 void atoaa(
char in[],
227 void addint(lrs_mp a, lrs_mp b, lrs_mp c);
228 int64_t atos(
char s[]);
229 int64_t comprod(lrs_mp Na,
233 void decint(lrs_mp a, lrs_mp b);
234 void divrat(lrs_mp Na, lrs_mp Da, lrs_mp Nb, lrs_mp Db, lrs_mp Nc, lrs_mp Dc);
236 void getfactorial(lrs_mp factorial, int64_t k);
238 void linrat(lrs_mp Na,
246 void lcm(lrs_mp a, lrs_mp b);
247 void mulrat(lrs_mp Na, lrs_mp Da, lrs_mp Nb, lrs_mp Db, lrs_mp Nc, lrs_mp Dc);
249 int64_t myrandom(int64_t num,
251 void notimpl(
char s[]);
252 void rattodouble(lrs_mp a,
255 void reduceint(lrs_mp Na, lrs_mp Da);
256 void reducearray(lrs_mp_vector p,
258 void scalerat(lrs_mp Na, lrs_mp Da, int64_t ka);
259 void subint(lrs_mp a, lrs_mp b, lrs_mp c);
267 void lrs_getdigits(int64_t* a, int64_t* b);
269 void stringcpy(
char* s,
char* t);
271 void* xcalloc(int64_t n, int64_t s, int64_t l,
char* f);
273 void lrs_default_digits_overflow();
274 void digits_overflow();