static int checkexcept(int got, int want, int r)
{
if (r == RN)
+#if defined CHECK_INEXACT
+ return got == want;
+#elif defined CHECK_INEXACT_OMISSION
return got == want || got == (want|INEXACT);
+#else
+ return (got|INEXACT) == (want|INEXACT);
+#endif
return (got|INEXACT|UNDERFLOW) == (want|INEXACT|UNDERFLOW);
}
+static int checkexceptall(int got, int want, int r)
+{
+ return got == want;
+}
+
static int checkulp(float d, int r)
{
// TODO: we only care about >=1.5 ulp errors for now, should be 1.0
+#define _XOPEN_SOURCE 700
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
y = ceil(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s ceil(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = ceilf(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s ceilf(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = ceill(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s ceill(%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = copysign(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s copysign(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = copysignf(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s copysignf(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = copysignl(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s copysignl(%La,%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fabs(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fabs(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fabsf(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fabsf(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fabsl(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fabsl(%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fdim(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fdim(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fdimf(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fdimf(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fdiml(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fdiml(%La,%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = floor(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s floor(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = floorf(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s floorf(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = floorl(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s floorl(%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fma(p->x, p->x2, p->x3);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ /* do not check inexact by default */
+#if defined CHECK_INEXACT || defined CHECK_INEXACT_OMISSION
+ if (!checkexceptall(e, p->e, p->r)) {
+#else
+ if (!checkexceptall(e|INEXACT, p->e|INEXACT, p->r)) {
+#endif
printf("%s:%d: bad fp exception: %s fma(%a,%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->x3, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fmaf(p->x, p->x2, p->x3);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ /* do not check inexact by default */
+#if defined CHECK_INEXACT || defined CHECK_INEXACT_OMISSION
+ if (!checkexceptall(e, p->e, p->r)) {
+#else
+ if (!checkexceptall(e|INEXACT, p->e|INEXACT, p->r)) {
+#endif
printf("%s:%d: bad fp exception: %s fmaf(%a,%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->x3, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fmal(p->x, p->x2, p->x3);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ /* do not check inexact by default */
+#if defined CHECK_INEXACT || defined CHECK_INEXACT_OMISSION
+ if (!checkexceptall(e, p->e, p->r)) {
+#else
+ if (!checkexceptall(e|INEXACT, p->e|INEXACT, p->r)) {
+#endif
printf("%s:%d: bad fp exception: %s fmal(%La,%La,%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->x3, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fmax(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fmax(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fmaxf(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fmaxf(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fmaxl(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fmaxl(%La,%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fmin(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fmin(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fminf(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fminf(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = fminl(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s fminl(%La,%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = frexp(p->x, &yi);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s frexp(%a)=%a,%lld, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, estr(p->e));
printf(" got %s\n", estr(e));
y = frexpf(p->x, &yi);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s frexpf(%a)=%a,%lld, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, estr(p->e));
printf(" got %s\n", estr(e));
y = frexpl(p->x, &yi);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s frexpl(%La)=%La,%lld, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, estr(p->e));
printf(" got %s\n", estr(e));
y = ldexp(p->x, p->i);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s ldexp(%a, %lld)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->i, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = ldexpf(p->x, p->i);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s ldexpf(%a, %lld)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->i, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = ldexpl(p->x, p->i);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s ldexpl(%La, %lld)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->i, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = logb(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s logb(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = logbf(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s logbf(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = logbl(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s logbl(%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = modf(p->x, &yi);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s modf(%a)=%a,%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, p->y2, estr(p->e));
printf(" got %s\n", estr(e));
y = modff(p->x, &yi);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s modff(%a)=%a,%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, p->y2, estr(p->e));
printf(" got %s\n", estr(e));
y = modfl(p->x, &yi);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s modf(%La)=%La,%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, p->y2, estr(p->e));
printf(" got %s\n", estr(e));
y = nearbyint(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s nearbyint(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = nearbyintf(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s nearbyintf(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = nearbyintl(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s nearbyintl(%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = nextafter(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s nextafter(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = nextafterf(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s nextafterf(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = nextafterl(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s nextafterl(%La,%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = nexttoward(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s nexttoward(%La,%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = nexttowardf(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s nexttowardf(%La,%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = nexttowardl(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s nexttowardl(%La,%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = rint(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s rint(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = rintf(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s rintf(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = rintl(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s rintl(%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = round(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s round(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = roundf(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s roundf(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = roundl(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s roundl(%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = scalb(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s scalb(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = scalbf(p->x, p->x2);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s scalbf(%a,%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->x2, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = scalbln(p->x, p->i);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s scalbln(%a, %lld)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->i, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = scalblnf(p->x, p->i);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s scalblnf(%a, %lld)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->i, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = scalblnl(p->x, p->i);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s scalblnl(%La, %lld)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->i, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = scalbn(p->x, p->i);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s scalbn(%a, %lld)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->i, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = scalbnf(p->x, p->i);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s scalbnf(%a, %lld)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->i, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = scalbnl(p->x, p->i);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s scalbnl(%La, %lld)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->i, p->y, estr(p->e));
printf(" got %s\n", estr(e));
T(RN, inf, -inf, 0x1.2d97c7f3321d2p+1, -0x1.a79394p-3, INEXACT)
T(RN, -inf, inf, -0x1.921fb54442d18p-1, 0x1.1a6264p-2, INEXACT)
T(RN, -inf, -inf, -0x1.2d97c7f3321d2p+1, 0x1.a79394p-3, INEXACT)
+T(RN, 0x1p-1023, 0x1p+0, 0x1p-1023, 0x0p+0, INEXACT|UNDERFLOW)
+T(RN, 0x1p+0, 0x1p+1023, 0x1p-1023, 0x0p+0, INEXACT|UNDERFLOW)
T(RN, inf, -inf, 0x1.2d97c8p+1, 0x1.99bc5cp-6, INEXACT)
T(RN, -inf, inf, -0x1.921fb6p-1, -0x1.777a5cp-2, INEXACT)
T(RN, -inf, -inf, -0x1.2d97c8p+1, -0x1.99bc5cp-6, INEXACT)
+T(RN, 0x1p-127, 0x1p+0, 0x1p-127, 0x0p+0, INEXACT|UNDERFLOW)
+T(RN, 0x1p+0, 0x1p+127, 0x1p-127, 0x0p+0, INEXACT|UNDERFLOW)
T(RN, inf, -inf, 0x1.2d97c7f3321d235p+1L, 0x1.b1acd8p-2, INEXACT)
T(RN, -inf, inf, -0x1.921fb54442d1846ap-1L, -0x1.d9ccecp-3, INEXACT)
T(RN, -inf, -inf, -0x1.2d97c7f3321d235p+1L, -0x1.b1acd8p-2, INEXACT)
+T(RN, 0x1p-16383L, 0x1p+0L, 0x1p-16383L, 0x0p+0, INEXACT|UNDERFLOW)
+T(RN, 0x1p+0L, 0x1p+16383L, 0x1p-16383L, 0x0p+0, INEXACT|UNDERFLOW)
T(RN, inf, inf, 0x0p+0, 0)
T(RN, -inf, -0x1p+0, 0x0p+0, 0)
T(RN, nan, nan, 0x0p+0, 0)
+T(RN, 0x1.ffffffffffffep-1023, 0x1.ffffffffffffep-1023, 0x0p+0, INEXACT|UNDERFLOW)
+T(RN,-0x1.ffffffffffffep-1023,-0x1.ffffffffffffep-1023, 0x0p+0, INEXACT|UNDERFLOW)
T(RN, inf, inf, 0x0p+0, 0)
T(RN, -inf, nan, 0x0p+0, INVALID)
T(RN, nan, nan, 0x0p+0, 0)
+T(RN,-0x1.fffffcp-127,-0x1.fffffcp-127, 0x1p-104, INEXACT|UNDERFLOW)
T(RN, 0x0p+0, -0x1p+1, inf, 0x0p+0, DIVBYZERO)
T(RN, 0x0p+0, -0x1.8p+1, inf, 0x0p+0, DIVBYZERO)
T(RN, 0x0p+0, -0x1p+2, inf, 0x0p+0, DIVBYZERO)
-T(RN, 0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RN, 0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RN, -0x0p+0, nan, nan, 0x0p+0, 0)
T(RN, -0x0p+0, inf, 0x0p+0, 0x0p+0, 0)
T(RN, -0x0p+0, 0x1.8p+1, -0x0p+0, 0x0p+0, 0)
T(RN, -0x0p+0, -0x1p+1, inf, 0x0p+0, DIVBYZERO)
T(RN, -0x0p+0, -0x1.8p+1, -inf, 0x0p+0, DIVBYZERO)
T(RN, -0x0p+0, -0x1p+2, inf, 0x0p+0, DIVBYZERO)
-T(RN, -0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RN, -0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RN, nan, 0x0p+0, 0x1p+0, 0x0p+0, 0)
T(RN, inf, 0x0p+0, 0x1p+0, 0x0p+0, 0)
T(RN, -inf, 0x0p+0, 0x1p+0, 0x0p+0, 0)
T(RN, 0x0p+0, -0x1p+1, inf, 0x0p+0, DIVBYZERO)
T(RN, 0x0p+0, -0x1.8p+1, inf, 0x0p+0, DIVBYZERO)
T(RN, 0x0p+0, -0x1p+2, inf, 0x0p+0, DIVBYZERO)
-T(RN, 0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RN, 0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RN, -0x0p+0, nan, nan, 0x0p+0, 0)
T(RN, -0x0p+0, inf, 0x0p+0, 0x0p+0, 0)
T(RN, -0x0p+0, 0x1.8p+1, -0x0p+0, 0x0p+0, 0)
T(RN, -0x0p+0, -0x1p+1, inf, 0x0p+0, DIVBYZERO)
T(RN, -0x0p+0, -0x1.8p+1, -inf, 0x0p+0, DIVBYZERO)
T(RN, -0x0p+0, -0x1p+2, inf, 0x0p+0, DIVBYZERO)
-T(RN, -0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RN, -0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RN, nan, 0x0p+0, 0x1p+0, 0x0p+0, 0)
T(RN, inf, 0x0p+0, 0x1p+0, 0x0p+0, 0)
T(RN, -inf, 0x0p+0, 0x1p+0, 0x0p+0, 0)
T(RN, 0x0p+0L, -0x1p+1L, inf, 0x0p+0, DIVBYZERO)
T(RN, 0x0p+0L, -0x1.8p+1L, inf, 0x0p+0, DIVBYZERO)
T(RN, 0x0p+0L, -0x1p+2L, inf, 0x0p+0, DIVBYZERO)
-T(RN, 0x0p+0L, -inf, inf, 0x0p+0, 0)
+T(RN, 0x0p+0L, -inf, inf, 0x0p+0, DIVBYZERO)
T(RN, -0x0p+0L, nan, nan, 0x0p+0, 0)
T(RN, -0x0p+0L, inf, 0x0p+0L, 0x0p+0, 0)
T(RN, -0x0p+0L, 0x1.8p+1L, -0x0p+0L, 0x0p+0, 0)
T(RN, -0x0p+0L, -0x1p+1L, inf, 0x0p+0, DIVBYZERO)
T(RN, -0x0p+0L, -0x1.8p+1L, -inf, 0x0p+0, DIVBYZERO)
T(RN, -0x0p+0L, -0x1p+2L, inf, 0x0p+0, DIVBYZERO)
-T(RN, -0x0p+0L, -inf, inf, 0x0p+0, 0)
+T(RN, -0x0p+0L, -inf, inf, 0x0p+0, DIVBYZERO)
T(RN, nan, 0x0p+0L, 0x1p+0L, 0x0p+0, 0)
T(RN, inf, 0x0p+0L, 0x1p+0L, 0x0p+0, 0)
T(RN, -inf, 0x0p+0L, 0x1p+0L, 0x0p+0, 0)
T(RN, -0x1.cp+0, 0x1p-1, 0x1p-2, 0x0p+0, 0)
T(RN, 0x1.cp+0, -0x1p-1, -0x1p-2, 0x0p+0, 0)
T(RN, -0x1.cp+0, -0x1p-1, 0x1p-2, 0x0p+0, 0)
+T(RN, 0x1p-1070, inf, 0x1p-1070, 0x0p+0, 0)
T(RN, -0x1.cp+0, 0x1p-1, 0x1p-2, 0x0p+0, 0)
T(RN, 0x1.cp+0, -0x1p-1, -0x1p-2, 0x0p+0, 0)
T(RN, -0x1.cp+0, -0x1p-1, 0x1p-2, 0x0p+0, 0)
+T(RN, 0x1p-127, inf, 0x1p-127, 0x0p+0, 0)
T(RN, -0x1.cp+0L, 0x1p-1L, 0x1p-2L, 0x0p+0, 0)
T(RN, 0x1.cp+0L, -0x1p-1L, -0x1p-2L, 0x0p+0, 0)
T(RN, -0x1.cp+0L, -0x1p-1L, 0x1p-2L, 0x0p+0, 0)
+T(RN, 0x1p-16383L, inf, 0x1p-16383L, 0x0p+0, 0)
y = sqrt(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s sqrt(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = sqrtf(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s sqrtf(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = sqrtl(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s sqrtl(%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = trunc(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s trunc(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = truncf(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s truncf(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
y = truncl(p->x);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
- if (!checkexcept(e, p->e, p->r)) {
+ if (!checkexceptall(e, p->e, p->r)) {
printf("%s:%d: bad fp exception: %s truncl(%La)=%La, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
// +-(|x| < 1) ** -inf is +inf
T(RN, 0x1.fffffffffffffp-1, -inf, inf, 0x0p+0, 0)
T(RN, 0x1p-1074, -inf, inf, 0x0p+0, 0)
-T(RN, 0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RN, 0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RN, -0x1.fffffffffffffp-1, -inf, inf, 0x0p+0, 0)
T(RN, -0x1p-1074, -inf, inf, 0x0p+0, 0)
-T(RN, -0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RN, -0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
// +1 ** (anthing) is +1
T(RN, 0x1p+0, nan, 0x1p+0, 0x0p+0, 0)
T(RN, 0x1p+0, inf, 0x1p+0, 0x0p+0, 0)
// +-(|x| < 1) ** -inf is +inf
T(RN, 0x1.fffffep-1, -inf, inf, 0x0p+0, 0)
T(RN, 0x1p-149, -inf, inf, 0x0p+0, 0)
-T(RN, 0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RN, 0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RN, -0x1.fffffep-1, -inf, inf, 0x0p+0, 0)
T(RN, -0x1p-149, -inf, inf, 0x0p+0, 0)
-T(RN, -0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RN, -0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RZ, 0x1.fffffep-1, -inf, inf, 0x0p+0, 0)
T(RZ, 0x1p-149, -inf, inf, 0x0p+0, 0)
-T(RZ, 0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RZ, 0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RZ, -0x1.fffffep-1, -inf, inf, 0x0p+0, 0)
T(RZ, -0x1p-149, -inf, inf, 0x0p+0, 0)
-T(RZ, -0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RZ, -0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RU, 0x1.fffffep-1, -inf, inf, 0x0p+0, 0)
T(RU, 0x1p-149, -inf, inf, 0x0p+0, 0)
-T(RU, 0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RU, 0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RU, -0x1.fffffep-1, -inf, inf, 0x0p+0, 0)
T(RU, -0x1p-149, -inf, inf, 0x0p+0, 0)
-T(RU, -0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RU, -0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RD, 0x1.fffffep-1, -inf, inf, 0x0p+0, 0)
T(RD, 0x1p-149, -inf, inf, 0x0p+0, 0)
-T(RD, 0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RD, 0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
T(RD, -0x1.fffffep-1, -inf, inf, 0x0p+0, 0)
T(RD, -0x1p-149, -inf, inf, 0x0p+0, 0)
-T(RD, -0x0p+0, -inf, inf, 0x0p+0, 0)
+T(RD, -0x0p+0, -inf, inf, 0x0p+0, DIVBYZERO)
// +-1 ** +-inf is +1
T(RN, 0x1p+0, inf, 0x1p+0, 0x0p+0, 0)
T(RN, 0x1p+0, -inf, 0x1p+0, 0x0p+0, 0)