aboutsummaryrefslogtreecommitdiff
path: root/src/benchmarks/cfrac/precision.h
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2019-08-24 17:57:51 +0200
committerFlorian Fischer <florian.fl.fischer@fau.de>2019-08-24 17:57:51 +0200
commit77ac9ce0a5c55d4f79f8fb8f7daa59ddb53cb507 (patch)
tree93d4e30a207265af03394d347bfff76ba677f3ce /src/benchmarks/cfrac/precision.h
parent971adefadb94e8780b1a73f08ed11d76c2ead8a2 (diff)
downloadallocbench-77ac9ce0a5c55d4f79f8fb8f7daa59ddb53cb507.tar.gz
allocbench-77ac9ce0a5c55d4f79f8fb8f7daa59ddb53cb507.zip
add cfrac benchmark
Diffstat (limited to 'src/benchmarks/cfrac/precision.h')
-rw-r--r--src/benchmarks/cfrac/precision.h314
1 files changed, 314 insertions, 0 deletions
diff --git a/src/benchmarks/cfrac/precision.h b/src/benchmarks/cfrac/precision.h
new file mode 100644
index 0000000..28befce
--- /dev/null
+++ b/src/benchmarks/cfrac/precision.h
@@ -0,0 +1,314 @@
+/*
+ * Arbitrary precision integer math package
+ *
+ * (c) Copyright 1991 by David A. Barrett (barrett@asgard.UUCP)
+ *
+ * Not to be used for profit or distributed in systems sold for profit
+ */
+
+
+/* BEGIN EDB */
+
+#include <stdlib.h>
+
+#if defined(USE_LOCH) && defined(_WIN32)
+#pragma comment(lib, "loch.lib")
+#endif
+
+#define NOMEMOPT 1
+
+/* END EDB */
+
+#ifndef BASE
+typedef unsigned short prefc; /* reference counter type */
+typedef prefc *precision; /* this a a private data structure */
+extern int pfree(); /* free (private) */
+#endif
+
+typedef precision *pvector; /* a vector of precision */
+typedef pvector *parray; /* 2d array */
+
+/*
+ * Error values passed to errorp
+ */
+#define PNOERROR 0
+#define PNOMEM 1
+#define PREFCOUNT 2
+#define PUNDEFINED 3
+#define PDOMAIN 4
+#define POVERFLOW 5
+
+#define pUndef ((precision) 0) /* An undefined value */
+#define pNull ((precision *) 0)
+
+#define peq(u, v) (pcmp((u), (v)) == 0)
+#define pne(u, v) (pcmp((u), (v)) != 0)
+#define pgt(u, v) (pcmp((u), (v)) > 0)
+#define plt(u, v) (pcmp((u), (v)) < 0)
+#define pge(u, v) (pcmp((u), (v)) >= 0)
+#define ple(u, v) (pcmp((u), (v)) <= 0)
+
+#define peqz(u) (pcmpz(u) == 0)
+#define pnez(u) (pcmpz(u) != 0)
+#define pltz(u) (pcmpz(u) < 0)
+#define pgtz(u) (pcmpz(u) > 0)
+#define plez(u) (pcmpz(u) <= 0)
+#define pgez(u) (pcmpz(u) >= 0)
+
+#define peven(u) (!podd(u))
+#define pdiv(u,v) (pdivmod(u,v, (precision *) -1, pNull))
+#define pmod(u,v) (pdivmod(u,v, pNull, (precision *) -1))
+#define pdivr(u,v,r) (pdivmod(u,v, (precision *) -1, r))
+#define pmodq(u,v,q) (pdivmod(u,v, q, (precision *) -1))
+
+/*
+ * Application programs should only use the following definitions;
+ *
+ * pnew, pdestroy, pparm, presult and pset
+ *
+ * Other variants are internal only!
+ * All are side-effect safe except for pparm and presult.
+ * -DDEBUG will enable argument checking for pset and pparm
+ */
+#ifdef __GNUC__ /* inline is NOT ansii! Sigh. */
+#ifndef BWGC
+static inline precision pnew(precision u) { (* (prefc *) u)++; return u; }
+static inline void pdestroy(precision u) {
+ if (u != pUndef && --(*(prefc *) u) == 0) pfree(u);
+}
+static inline precision pparmq(precision u) {
+ if (u != pUndef) (* (prefc *) u)++; return u;
+}
+static inline precision presult(precision u) {
+ if (u != pUndef) --(*(prefc *) u); return u;
+}
+static inline precision psetq(precision *up, precision v) {
+ precision u = *up;
+ *up = v;
+ if (v != pUndef) (* (prefc *) v)++;
+ if (u != pUndef && --(* (prefc *) u) == 0) pfree(u);
+ return v;
+}
+#define pvoid(u) pdestroy(u)
+#else
+extern inline precision pnew(precision u) { return u; }
+extern inline void pdestroy(precision u) {}
+extern inline precision pparmq(precision u) { return u; }
+extern inline precision presult(precision u) { return u; }
+extern inline precision psetq(precision *up, precision v) {
+ precision u = *up;
+ *up = v;
+ return v;
+}
+#define pvoid(u) pdestroy(u)
+#endif
+#else
+#ifndef BWGC
+#define pdestroy(u) (void) ((u)!=pUndef&&--(*(prefc *)(u))==0&&pfree(u))
+#define pparmq(u) ((u) != pUndef && (* (prefc *) (u))++, (u))
+#define pvoid(u) pdestroyf(u)
+#else
+#define pdestroy(u) (void) (0)
+#define pparmq(u) (u)
+#define pvoid(u) pdestroyf(u)
+#endif
+#endif
+
+
+#ifdef PDEBUG
+#define pset(u, v) psetv(u, v)
+#define pparm(u) pparmv(u)
+#else
+#define pset(u, v) psetq(u, v)
+#define pparm(u) pparmq(u)
+#endif
+
+#ifdef __STDC__ /* if ANSI compiler */
+#ifndef __GNUC__
+extern precision pnew(precision); /* initialization */
+extern precision presult(precision); /* function result */
+extern precision psetq(precision *, precision); /* quick assignment */
+#endif
+extern precision psetv(precision *, precision); /* checked assignment */
+extern precision pparmv(precision); /* checked parameter */
+extern precision pparmf(precision); /* unchecked parameter (fn) */
+
+extern int pcmpz(precision); /* compare to zero */
+extern int pcmp(precision, precision); /* compare */
+extern int picmp(precision, int); /* single digit cmp */
+
+extern precision padd(precision, precision); /* add */
+extern precision psub(precision, precision); /* subtract */
+extern precision pmul(precision, precision); /* multiply */
+
+extern precision pdivmod(precision, precision,
+ precision *q, precision *r);
+
+extern precision pidiv(precision, int); /* single digit pdiv */
+extern int pimod(precision, int); /* single digit pmod */
+extern void pidivmod(precision, int, /* single pdivmod */
+ precision *q, int *r);
+
+extern precision pneg(precision); /* negate */
+extern precision pabs(precision); /* absolute value */
+extern int podd(precision); /* true if odd */
+extern precision phalf(precision); /* divide by two */
+
+extern precision pmin(precision, precision); /* minimum value */
+extern precision pmax(precision, precision); /* maximum value */
+
+extern precision prand(precision); /* random number generator */
+
+extern precision itop(int); /* int to precision */
+extern precision utop(unsigned); /* unsigned to precision */
+extern precision ltop(long); /* long to precision */
+extern precision ultop(unsigned long); /* unsigned long to precision */
+
+extern int ptoi(precision); /* precision to int */
+extern unsigned int ptou(precision); /* precision to unsigned */
+extern long ptol(precision); /* precision to long */
+extern unsigned long ptoul(precision); /* precision to unsigned long */
+
+extern precision atop(char *); /* ascii to precision */
+extern char *ptoa(precision); /* precision to ascii */
+
+extern int btop(precision *result, /* base to precision */
+ char *src, unsigned size, int *digitmap, unsigned radix);
+
+extern int /* precision to base */
+ ptob(precision, char *result, unsigned size, char *alphabet, unsigned radix);
+
+/*
+ * Can't do prototyping for these unless stdio.h has been included
+ */
+#ifdef BUFSIZ
+extern precision fgetp(FILE *stream); /* input precision */
+extern int fputp(FILE *stream, precision); /* output precision */
+extern int
+ fprintp(FILE *stream, precision, int minWidth); /* output within a field */
+#else
+extern precision fgetp(); /* input precision */
+extern int fputp(); /* output precision */
+extern int fprintp(); /* output within a field */
+#endif
+
+extern int putp(precision); /* stdout with '\n' */
+
+extern void pshow(precision); /* display debug info */
+extern precision prandnum(); /* debug and profil only */
+extern precision pshift(precision, int); /* shift left */
+
+extern precision errorp(int errnum, char *routine, char *message);
+
+extern precision pzero, pone, ptwo; /* constants 0, 1, and 2 */
+extern precision p_one; /* constant -1 */
+
+extern precision psqrt(precision); /* square root */
+extern precision pfactorial(precision); /* factorial */
+extern precision pipow(precision, unsigned); /* unsigned int power */
+extern precision ppow(precision, precision); /* precision power */
+extern precision
+ ppowmod(precision, precision, precision); /* precision power mod m */
+extern int plogb(precision, precision); /* log base b of n */
+
+extern precision dtop(double); /* double to precision */
+extern double ptod(precision); /* precision to double */
+
+/*
+ * vector operations
+ */
+pvector pvundef(pvector, unsigned size); /* local variable entry */
+void pvdestroy(pvector, unsigned size); /* local variable exit */
+
+pvector pvalloc(unsigned size); /* pvec allocate */
+void pvfree(pvector, unsigned size); /* pvec free */
+
+pvector pvset(pvector, unsigned size, precision value);
+
+#else
+
+/*
+ * Function versions of above if you still want side effects
+ */
+
+#ifndef __GNUC__
+extern precision pnew(); /* initialization */
+extern precision presult(); /* function result */
+extern precision psetq(); /* quick assignment */
+#endif
+extern precision psetv(); /* checked assignment */
+extern precision pparmv(); /* checked parameter */
+extern precision pparmf(); /* unchecked parameter (fn) */
+
+extern int pcmpz(); /* compare to zero */
+extern int pcmp(); /* compare */
+extern int picmp(); /* single digit compare */
+
+extern precision padd(); /* add */
+extern precision psub(); /* subtract */
+extern precision pmul(); /* multiply */
+
+extern precision pdivmod(); /* divide/remainder */
+extern void pidivmod(); /* single digit divide/remainder */
+extern precision pidiv(); /* single digit divide */
+extern int pimod(); /* single digit remainder */
+extern precision pneg(); /* negate */
+extern precision pabs(); /* absolute value */
+extern int podd(); /* true if odd */
+extern precision phalf(); /* divide by two */
+
+extern precision pmin(); /* minimum value */
+extern precision pmax(); /* maximum value */
+
+extern precision prand(); /* random number generator */
+
+extern precision itop(); /* int to precision */
+extern precision utop(); /* unsigned to precision */
+extern precision ltop(); /* long to precision */
+extern precision ultop(); /* unsigned long to precision */
+
+extern int ptoi(); /* precision to int */
+extern unsigned int ptou(); /* precision to unsigned */
+extern long ptol(); /* precision to long */
+extern unsigned long ptoul(); /* precision to unsigned long */
+
+extern precision atop(); /* ascii to precision */
+extern char *ptoa(); /* precision to ascii */
+
+extern int btop(); /* base to precision */
+extern int ptob(); /* precision to base */
+
+extern precision fgetp(); /* input a precision */
+extern int fputp(); /* output a precision */
+extern int putp(); /* output precision '\n' to stdout */
+extern int fprintp(); /* output a precision within a field */
+
+extern void pshow(); /* display debug info */
+extern precision prandnum(); /* for debug and profil only */
+extern precision pshift(); /* shift left */
+
+extern precision errorp(); /* user-substitutable error handler */
+
+extern precision pzero, pone, ptwo; /* constants 0, 1, and 2 */
+extern precision p_one; /* constant -1 */
+
+extern precision psqrt(); /* square root */
+extern precision pfactorial(); /* factorial */
+extern precision pipow(); /* unsigned int power */
+extern precision ppow(); /* precision power */
+extern precision ppowmod(); /* precision power mod m */
+extern int plogb(); /* log base b of n */
+
+extern precision dtop(); /* double to precision */
+extern double ptod(); /* precision to double */
+
+/*
+ * vector operations
+ */
+pvector pvundef(); /* local variable entry */
+void pvdestroy(); /* local variable exit */
+pvector pvalloc(); /* pvec allocate */
+void pvfree(); /* pvec free */
+pvector pvset(); /* set each element to scaler */
+
+#endif