9 {FE_INVALID, "FE_INVALID"},
10 {FE_DIVBYZERO, "FE_DIVBYZERO"},
11 {FE_OVERFLOW, "FE_OVERFLOW"},
12 {FE_UNDERFLOW, "FE_UNDERFLOW"},
13 {FE_INEXACT, "FE_INEXACT"},
15 static int ne = sizeof eflags / sizeof *eflags;
21 {FE_TONEAREST,"FE_TONEAREST"},
22 {FE_DOWNWARD,"FE_DOWNWARD"},
23 {FE_UPWARD,"FE_UPWARD"},
24 {FE_TOWARDZERO,"FE_TOWARDZERO"},
26 static int nr = sizeof rflags / sizeof *rflags;
28 char *strexcept(int f) {
34 for (i = 0; i < ne; i++)
35 if (f & eflags[i].flag) {
36 p += sprintf(p, "%s%s", all ? "|" : "", eflags[i].s);
37 all |= eflags[i].flag;
40 p += sprintf(p, "%s%d", all ? "|" : "", f & ~all);
43 p += sprintf(p, "%s", all ? "" : "0");
47 char *strround(int f) {
51 for (i = 0; i < nr; i++)
52 if (f == rflags[i].flag) {
53 sprintf(buf, "%s", rflags[i].s);
56 sprintf(buf, "%d", f);