diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2019-08-24 17:57:51 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2019-08-24 17:57:51 +0200 |
| commit | 77ac9ce0a5c55d4f79f8fb8f7daa59ddb53cb507 (patch) | |
| tree | 93d4e30a207265af03394d347bfff76ba677f3ce /src/benchmarks/cfrac/pfactor.c | |
| parent | 971adefadb94e8780b1a73f08ed11d76c2ead8a2 (diff) | |
| download | allocbench-77ac9ce0a5c55d4f79f8fb8f7daa59ddb53cb507.tar.gz allocbench-77ac9ce0a5c55d4f79f8fb8f7daa59ddb53cb507.zip | |
add cfrac benchmark
Diffstat (limited to 'src/benchmarks/cfrac/pfactor.c')
| -rw-r--r-- | src/benchmarks/cfrac/pfactor.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/benchmarks/cfrac/pfactor.c b/src/benchmarks/cfrac/pfactor.c new file mode 100644 index 0000000..6c765d1 --- /dev/null +++ b/src/benchmarks/cfrac/pfactor.c @@ -0,0 +1,55 @@ +#include <stdio.h> +#include "precision.h" +#include "pfactor.h" + +void showfactors(); + + +int main(argc, argv) + int argc; + char *argv[]; +{ + precision n = pUndef; + + --argc; + if (argc != 0) { + do { + pset(&n, atop(*++argv)); + showfactors(n); + } while (--argc > 0); + } else { + do { + pset(&n, fgetp(stdin)); + if (n == pUndef) break; + showfactors(n); + } while (1); + } + pdestroy(n); + return 0; +} + +void showfactors(n) + precision n; +{ + precision r = pUndef; + FactorList factors = (FactorList) 0; + + (void) pparm(n); + pset(&r, ptrial(n, (unsigned *) 0, &factors)); + fputp(stdout, n); + fputs(" = ", stdout); + pputfactors(stdout, factors); + if pne(r, pone) { + if pne(r, n) putc('*', stdout); + if (!pprime(r, 16)) { + fputc('(', stdout); fputp(stdout, r); fputc(')', stdout); + } else { + fputp(stdout, r); + } + } + putc('\n', stdout); + + pfreefactors(&factors); + pdestroy(r); + pdestroy(n); +} |
