6 #include "subr_random.h"
9 static int isbanned(const char *fname, int argc, char *argv[]);
10 static void usage(void);
13 main(int argc, char *argv[])
16 struct ulp_complex uc;
17 int i, total, all, realonly, complexonly, ban, list;
19 const struct fentry *f;
21 /* Skip program name */
26 * Parse command line arguments
27 * all = probe all supported functions
28 * list = list all supported functions
37 } else if (argc == 1 && !strcmp(argv[0], "all")) {
40 } else if (argc == 1 && !strcmp(argv[0], "real")) {
43 } else if (argc == 1 && !strcmp(argv[0], "complex")) {
44 all = complexonly = 1;
46 } else if (argc > 1 && !strcmp(argv[0], "ban")) {
49 } else if (argc == 1 && !strcmp(argv[0], "list")) {
57 /* Initialize random number generator */
62 printf("\tFUNCTION Max ULP Min ULP Avg ULP "
65 total = all ? fsize : argc;
67 for (i = 0; i < total; i++) {
69 f = getfunctionbyidx(i);
70 if ((realonly && !f->f_mpfr) ||
71 (complexonly && f->f_mpfr))
75 if (isbanned(f->f_name, argc, argv)) {
76 printf("[%2u/%2u] %-12s %s\n",
77 i+1, total, f->f_name,
78 "\t\t--- banned ---");
88 /* Is it real or complex value function ? */
89 f = getfunctionbyname(target);
91 fprintf(stderr, "function: %s not found\n",
98 getfunctionulp_real(f, &u);
100 getfunctionulp_complex(f, &uc);
103 printf("[%2u/%2u] %-12s ", i+1, total, target);
105 if (all && f->f_libml_real) {
106 printf(" %-12s ", f->f_namel);
107 printulps_long_double(u);
110 printf("[%2u/%2u] %-12s ", i+1, total, target);
111 printulps_double_complex(uc);
119 isbanned(const char *fname, int argc, char *argv[])
123 for (i = 0; i < argc; i++) {
124 if (!strcmp(fname, argv[i])) {
136 "ulps: [list | all | real | complex | "
137 "ban <function1> <function2> ...] | "
138 "<function1> <function2> ... \n");