math: fix some invalid checks (remquo, lrint, lround, y0, y1, yn)
authorSzabolcs Nagy <nsz@port70.net>
Mon, 12 Nov 2012 21:00:52 +0000 (22:00 +0100)
committerSzabolcs Nagy <nsz@port70.net>
Mon, 12 Nov 2012 21:00:52 +0000 (22:00 +0100)
21 files changed:
src/math/llrint.c
src/math/llrintf.c
src/math/llrintl.c
src/math/llround.c
src/math/llroundf.c
src/math/llroundl.c
src/math/lrint.c
src/math/lrintf.c
src/math/lrintl.c
src/math/lround.c
src/math/lroundf.c
src/math/lroundl.c
src/math/remquo.c
src/math/remquof.c
src/math/remquol.c
src/math/y0.c
src/math/y0f.c
src/math/y1.c
src/math/y1f.c
src/math/yn.c
src/math/ynf.c

index 3ad7540..ac8fea8 100644 (file)
@@ -31,7 +31,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s llrint(%a) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 2f19d56..e8f5fa4 100644 (file)
@@ -31,7 +31,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s llrintf(%a) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 91d5447..0fea06e 100644 (file)
@@ -37,7 +37,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s llrintl(%La) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 403fa23..62f1a4e 100644 (file)
@@ -31,7 +31,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s llround(%a) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 34c0ceb..d4256f5 100644 (file)
@@ -31,7 +31,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s llroundf(%a) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 8c1fdc8..a2cd6f0 100644 (file)
@@ -37,7 +37,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s llroundl(%La) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 0d4bf85..695c3ed 100644 (file)
@@ -31,7 +31,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s lrint(%a) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 9e2ac07..06fc366 100644 (file)
@@ -31,7 +31,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s lrintf(%a) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index bdb5d20..5091b1b 100644 (file)
@@ -37,7 +37,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s lrintl(%La) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 7041288..36d3907 100644 (file)
@@ -31,7 +31,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s lround(%a) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 2f9a491..9852964 100644 (file)
@@ -31,7 +31,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s lroundf(%a) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index baa12e3..1a66be5 100644 (file)
@@ -37,7 +37,7 @@ int main(void)
                        printf(" got %s\n", estr(e));
                        err++;
                }
-               if (yi != p->i) {
+               if (!(p->e&INVALID) && yi != p->i) {
                        printf("%s:%d: %s lroundl(%La) want %lld got %lld\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, yi);
                        err++;
index 245cd1d..a3b6c92 100644 (file)
@@ -33,7 +33,9 @@ int main(void)
                        err++;
                }
                d = ulperr(y, p->y, p->dy);
-               if (!checkulp(d, p->r) || (yi & 7) != (p->i & 7) || (yi < 0) != (p->i < 0)) {
+               if (!checkulp(d, p->r) ||
+               (!isnan(p->y) && (yi & 7) != (p->i & 7)) ||
+               (!isnan(p->y) && (yi < 0) != (p->i < 0))) {
                        printf("%s:%d: %s remquo(%a,%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
                                p->file, p->line, rstr(p->r), p->x, p->x2, p->y, p->i, y, yi, d, d-p->dy, p->dy);
                        err++;
index 933bc99..55cbe9d 100644 (file)
@@ -33,7 +33,9 @@ int main(void)
                        err++;
                }
                d = ulperr(y, p->y, p->dy);
-               if (!checkulp(d, p->r) || (yi & 7) != (p->i & 7) || (yi < 0) != (p->i < 0)) {
+               if (!checkulp(d, p->r) ||
+               (!isnan(p->y) && (yi & 7) != (p->i & 7)) ||
+               (!isnan(p->y) && (yi < 0) != (p->i < 0))) {
                        printf("%s:%d: %s remquof(%a,%a) want %a,%lld got %a,%d ulperr %.3f = %a + %a\n",
                                p->file, p->line, rstr(p->r), p->x, p->x2, p->y, p->i, y, yi, d, d-p->dy, p->dy);
                        err++;
index c37fda2..6a75008 100644 (file)
@@ -33,7 +33,9 @@ int main(void)
                        err++;
                }
                d = ulperr(y, p->y, p->dy);
-               if (!checkulp(d, p->r) || (yi & 7) != (p->i & 7) || (yi < 0) != (p->i < 0)) {
+               if (!checkulp(d, p->r) ||
+               (!isnan(p->y) && (yi & 7) != (p->i & 7)) ||
+               (!isnan(p->y) && (yi < 0) != (p->i < 0))) {
                        printf("%s:%d: %s remquol(%La,%La) want %La,%lld got %La,%d ulperr %.3f = %a + %a\n",
                                p->file, p->line, rstr(p->r), p->x, p->x2, p->y, p->i, y, yi, d, d-p->dy, p->dy);
                        err++;
index d098064..f175f62 100644 (file)
@@ -33,7 +33,7 @@ int main(void)
                        err++;
                }
                d = ulperr(y, p->y, p->dy);
-               if (!checkulp(d, p->r)) {
+               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++;
index 63880fb..b1c43b9 100644 (file)
@@ -33,7 +33,7 @@ int main(void)
                        err++;
                }
                d = ulperrf(y, p->y, p->dy);
-               if (!checkulp(d, p->r)) {
+               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++;
index 95d971c..4aaf032 100644 (file)
@@ -33,7 +33,7 @@ int main(void)
                        err++;
                }
                d = ulperr(y, p->y, p->dy);
-               if (!checkulp(d, p->r)) {
+               if ((!(p->x < 0) && !checkulp(d, p->r)) || (p->x < 0 && !isnan(y) && y != -inf)) {
                        printf("%s:%d: %s y1(%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++;
index 6871d67..df63f85 100644 (file)
@@ -33,7 +33,7 @@ int main(void)
                        err++;
                }
                d = ulperrf(y, p->y, p->dy);
-               if (!checkulp(d, p->r)) {
+               if ((!(p->x < 0) && !checkulp(d, p->r)) || (p->x < 0 && !isnan(y) && y != -inf)) {
                        printf("%s:%d: %s y1f(%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++;
index 9763c40..cc4f2fe 100644 (file)
@@ -32,7 +32,7 @@ int main(void)
                        err++;
                }
                d = ulperr(y, p->y, p->dy);
-               if (!checkulp(d, p->r)) {
+               if ((!(p->x < 0) && !checkulp(d, p->r)) || (p->x < 0 && !isnan(y) && y != -inf)) {
                        printf("%s:%d: %s yn(%a, %lld) want %a got %a, ulperr %.3f = %a + %a\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, p->y, y, d, d-p->dy, p->dy);
                        err++;
index e52ad6d..f19bb8b 100644 (file)
@@ -32,7 +32,7 @@ int main(void)
                        err++;
                }
                d = ulperrf(y, p->y, p->dy);
-               if (!checkulp(d, p->r)) {
+               if ((!(p->x < 0) && !checkulp(d, p->r)) || (p->x < 0 && !isnan(y) && y != -inf)) {
                        printf("%s:%d: %s ynf(%a, %lld) want %a got %a, ulperr %.3f = %a + %a\n",
                                p->file, p->line, rstr(p->r), p->x, p->i, p->y, y, d, d-p->dy, p->dy);
                        err++;