mark known failures with X and let the test pass if the error is
acceptable and not expected to be fixed soon.
this way the excessive math failures are easier to grep out.
26 files changed:
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
- // only report at most one <2ulp error
- if (fabsf(d) < 2 && err) continue;
+ if (fabsf(d) < 2.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s acosh(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s acosh(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
- // only report at most one <2ulp error
- if (fabsf(d) < 2 && err) continue;
+ if (fabsf(d) < 2.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s asinh(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s asinh(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (p->r != RN)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s cos(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s cos(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (fabs(d) < 4.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s erf(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s erf(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (fabs(d) < 4.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s erfc(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s erfc(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
if (!checkexcept(e, p->e, p->r)) {
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
if (!checkexcept(e, p->e, p->r)) {
+ if (fabs(y) < 0x1p-1022 && (e|INEXACT) == (INEXACT|UNDERFLOW))
+ printf("X ");
+ else
+ err++;
printf("%s:%d: bad fp exception: %s exp2(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
printf("%s:%d: bad fp exception: %s exp2(%a)=%a, want %s",
p->file, p->line, rstr(p->r), p->x, p->y, estr(p->e));
printf(" got %s\n", estr(e));
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperrl(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperrl(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (fabsf(d) < 2.5f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s expm1l(%La) want %La got %La ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s expm1l(%La) want %La got %La ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
#pragma STDC FENV_ACCESS ON
double y;
float d;
#pragma STDC FENV_ACCESS ON
double y;
float d;
+ int e, i, bad, err = 0;
struct d_d *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
struct d_d *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
-// printf("%s:%d: %s j0(%a) want %a got %a ulperr %.3f = %a + %a\n",
-// p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
- err++;
- // TODO: avoid spamming the output
- printf(__FILE__ ": known to be broken near zeros\n");
- break;
+ if (fabsf(d) < 0x1p52f)
+ printf("X ");
+ else
+ err++;
+ printf("%s:%d: %s j0(%a) want %a got %a ulperr %.3f = %a + %a\n",
+ p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperrf(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperrf(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
-// printf("%s:%d: %s j0f(%a) want %a got %a ulperr %.3f = %a + %a\n",
-// p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
- err++;
- // TODO: avoid spamming the output
- printf(__FILE__ ": known to be broken near zeros\n");
- break;
+ if (fabsf(d) < 0x1p23f)
+ printf("X ");
+ else
+ err++;
+ printf("%s:%d: %s j0f(%a) want %a got %a ulperr %.3f = %a + %a\n",
+ p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (fabsf(d) < 3.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s jn(%lld, %a) want %a got %a, ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->i, p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s jn(%lld, %a) want %a got %a, ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->i, p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperrf(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperrf(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (fabsf(d) < 3.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s jnf(%lld, %a) want %a got %a, ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->i, p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s jnf(%lld, %a) want %a got %a, ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->i, p->x, p->y, y, d, d-p->dy, p->dy);
int yi;
double y;
float d;
int yi;
double y;
float d;
+ int e, i, bad, err = 0;
struct d_di *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
struct d_di *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
err++;
}
d = ulperr(y, p->y, p->dy);
err++;
}
d = ulperr(y, p->y, p->dy);
- if (!checkulp(d, p->r) || (!isnan(p->x) && p->x!=-inf && !(p->e&DIVBYZERO) && yi != p->i)) {
+ bad = !isnan(p->x) && p->x!=-inf && !(p->e&DIVBYZERO) && yi != p->i;
+ if (bad || !checkulp(d, p->r)) {
+ if (!bad && fabsf(d) < 11.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s lgamma(%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, y, yi, d, d-p->dy, p->dy);
printf("%s:%d: %s lgamma(%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, y, yi, d, d-p->dy, p->dy);
int yi;
double y;
float d;
int yi;
double y;
float d;
+ int e, i, bad, err = 0;
struct d_di *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
struct d_di *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
err++;
}
d = ulperr(y, p->y, p->dy);
err++;
}
d = ulperr(y, p->y, p->dy);
- if (!checkulp(d, p->r) || (!isnan(p->x) && p->x!=-inf && !(p->e&DIVBYZERO) && yi != p->i)) {
+ bad = !isnan(p->x) && p->x!=-inf && !(p->e&DIVBYZERO) && yi != p->i;
+ if (bad || !checkulp(d, p->r)) {
+ if (!bad && fabsf(d) < 11.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s lgamma_r(%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, y, yi, d, d-p->dy, p->dy);
printf("%s:%d: %s lgamma_r(%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, y, yi, d, d-p->dy, p->dy);
int yi;
double y;
float d;
int yi;
double y;
float d;
+ int e, i, bad, err = 0;
struct f_fi *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
struct f_fi *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
err++;
}
d = ulperrf(y, p->y, p->dy);
err++;
}
d = ulperrf(y, p->y, p->dy);
- if (!checkulp(d, p->r) || (!isnan(p->x) && p->x!=-inf && !(p->e&DIVBYZERO) && yi != p->i)) {
+ bad = !isnan(p->x) && p->x!=-inf && !(p->e&DIVBYZERO) && yi != p->i;
+ if (bad || !checkulp(d, p->r)) {
+ if (!bad && fabsf(d) < 2.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s lgammaf(%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, y, yi, d, d-p->dy, p->dy);
printf("%s:%d: %s lgammaf(%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, y, yi, d, d-p->dy, p->dy);
int yi;
double y;
float d;
int yi;
double y;
float d;
+ int e, i, bad, err = 0;
struct f_fi *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
struct f_fi *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
err++;
}
d = ulperrf(y, p->y, p->dy);
err++;
}
d = ulperrf(y, p->y, p->dy);
- if (!checkulp(d, p->r) || (!isnan(p->x) && p->x!=-inf && !(p->e&DIVBYZERO) && yi != p->i)) {
+ bad = !isnan(p->x) && p->x!=-inf && !(p->e&DIVBYZERO) && yi != p->i;
+ if (bad || !checkulp(d, p->r)) {
+ if (!bad && fabsf(d) < 2.0f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s lgammaf_r(%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, y, yi, d, d-p->dy, p->dy);
printf("%s:%d: %s lgammaf_r(%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, p->i, y, yi, d, d-p->dy, p->dy);
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
if (!checkexcept(e, p->e, p->r)) {
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
if (!checkexcept(e, p->e, p->r)) {
+ if (fabs(y) < 0x1p-1022 && (e|INEXACT) == (INEXACT|UNDERFLOW))
+ printf("X ");
+ else
+ err++;
printf("%s:%d: bad fp exception: %s pow(%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));
printf("%s:%d: bad fp exception: %s pow(%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));
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
if (!checkexcept(e, p->e, p->r)) {
e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW);
if (!checkexcept(e, p->e, p->r)) {
+ if (fabsf(y) < 0x1p-126f && (e|INEXACT) == (INEXACT|UNDERFLOW))
+ printf("X ");
+ else
+ err++;
printf("%s:%d: bad fp exception: %s powf(%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));
printf("%s:%d: bad fp exception: %s powf(%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));
}
d = ulperrf(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperrf(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (p->r != RN)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s sin(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s sin(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (fabsf(d) < 2.0f || p->r != RN)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s sinh(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s sinh(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperrf(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperrf(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (p->r != RN)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s sinhf(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s sinhf(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperrl(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperrl(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (fabsf(d) < 5.0f || p->r != RN)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s sinhl(%La) want %La got %La ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s sinhl(%La) want %La got %La ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
}
d = ulperr(y, p->y, p->dy);
if (!checkulp(d, p->r)) {
+ if (p->r != RN)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s tan(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s tan(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
err++;
}
d = ulperr(y, p->y, p->dy);
err++;
}
d = ulperr(y, p->y, p->dy);
- // TODO: 2 ulp errors allowed
- if (p->r==RN && fabs(d)>2) {
+ if (!checkulp(d, p->r)) {
+ if (fabsf(d) < 5.5f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s tgamma(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s tgamma(%a) want %a got %a ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
#pragma STDC FENV_ACCESS ON
double y;
float d;
#pragma STDC FENV_ACCESS ON
double y;
float d;
+ int e, i, bad, err = 0;
struct d_d *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
struct d_d *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
err++;
}
d = ulperr(y, p->y, p->dy);
err++;
}
d = ulperr(y, p->y, p->dy);
- if ((!(p->x < 0) && !checkulp(d, p->r)) || (p->x < 0 && !isnan(y) && y != -inf)) {
-// printf("%s:%d: %s y0(%a) want %a got %a ulperr %.3f = %a + %a\n",
-// p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
- err++;
- // TODO: avoid spamming the output
- printf(__FILE__ ": known to be broken near zeros\n");
- break;
+ bad = p->x < 0 && !isnan(y) && y != -inf;
+ if (bad || (!(p->x < 0) && !checkulp(d, p->r))) {
+ if (!bad && fabsf(d) < 0x1p52f)
+ printf("X ");
+ else
+ err++;
+ printf("%s:%d: %s y0(%a) want %a got %a ulperr %.3f = %a + %a\n",
+ p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
#pragma STDC FENV_ACCESS ON
float y;
float d;
#pragma STDC FENV_ACCESS ON
float y;
float d;
+ int e, i, bad, err = 0;
struct f_f *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
struct f_f *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
err++;
}
d = ulperrf(y, p->y, p->dy);
err++;
}
d = ulperrf(y, p->y, p->dy);
- if ((!(p->x < 0) && !checkulp(d, p->r)) || (p->x < 0 && !isnan(y) && y != -inf)) {
-// printf("%s:%d: %s y0f(%a) want %a got %a ulperr %.3f = %a + %a\n",
-// p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
- err++;
- // TODO: avoid spamming the output
- printf(__FILE__ ": known to be broken near zeros\n");
- break;
+ bad = p->x < 0 && !isnan(y) && y != -inf;
+ if (bad || (!(p->x < 0) && !checkulp(d, p->r))) {
+ if (!bad && fabsf(d) < 0x1p23f)
+ printf("X ");
+ else
+ err++;
+ printf("%s:%d: %s y0f(%a) want %a got %a ulperr %.3f = %a + %a\n",
+ p->file, p->line, rstr(p->r), p->x, p->y, y, d, d-p->dy, p->dy);
#pragma STDC FENV_ACCESS ON
double y;
float d;
#pragma STDC FENV_ACCESS ON
double y;
float d;
+ int e, i, bad, err = 0;
struct fi_f *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
struct fi_f *p;
for (i = 0; i < sizeof t/sizeof *t; i++) {
err++;
}
d = ulperrf(y, p->y, p->dy);
err++;
}
d = ulperrf(y, p->y, p->dy);
- if ((!(p->x < 0) && !checkulp(d, p->r)) || (p->x < 0 && !isnan(y) && y != -inf)) {
+ bad = p->x < 0 && !isnan(y) && y != -inf;
+ if (bad || (!(p->x < 0) && !checkulp(d, p->r))) {
+ if (!bad && fabsf(d) < 2.5f)
+ printf("X ");
+ else
+ err++;
printf("%s:%d: %s ynf(%lld, %a) want %a got %a, ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->i, p->x, p->y, y, d, d-p->dy, p->dy);
printf("%s:%d: %s ynf(%lld, %a) want %a got %a, ulperr %.3f = %a + %a\n",
p->file, p->line, rstr(p->r), p->i, p->x, p->y, y, d, d-p->dy, p->dy);