From dfe1da9485ec22fb335d97de1421ef717aa6f45e Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Thu, 15 Aug 2013 19:42:56 +0000 Subject: [PATCH] math: fix lrint, lround, nexttoward tests for ldbl==dbl and no fenv --- src/math/gen/util.c | 2 +- src/math/special/llrint.h | 2 ++ src/math/special/llrintf.h | 2 ++ src/math/special/llrintl.h | 2 ++ src/math/special/llround.h | 2 ++ src/math/special/llroundf.h | 2 ++ src/math/special/llroundl.h | 2 ++ src/math/special/lrint.h | 2 ++ src/math/special/lrintf.h | 2 ++ src/math/special/lrintl.h | 2 ++ src/math/special/lround.h | 2 ++ src/math/special/lroundf.h | 2 ++ src/math/special/lroundl.h | 2 ++ src/math/special/nexttoward.h | 6 ++++-- src/math/special/nexttowardf.h | 10 ++++++++-- 15 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/math/gen/util.c b/src/math/gen/util.c index 5b1aa48..10f912c 100644 --- a/src/math/gen/util.c +++ b/src/math/gen/util.c @@ -73,7 +73,7 @@ char *dropcomm(char *buf) char *p = buf; for (; *p; p++) - if (*p == '/' && p[1] == '/') { + if ((*p == '/' && p[1] == '/') || *p == '#') { *p = 0; break; } diff --git a/src/math/special/llrint.h b/src/math/special/llrint.h index dcd30e8..e450093 100644 --- a/src/math/special/llrint.h +++ b/src/math/special/llrint.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1, -1, INEXACT) T(RN, 0x1p-100, 0, INEXACT) T(RN, -0x1p-100, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100, 0, INVALID) T(RN, -0x1p+100, 0, INVALID) +#endif diff --git a/src/math/special/llrintf.h b/src/math/special/llrintf.h index bf04a27..01106e4 100644 --- a/src/math/special/llrintf.h +++ b/src/math/special/llrintf.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1, -1, INEXACT) T(RN, 0x1p-100, 0, INEXACT) T(RN, -0x1p-100, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100, 0, INVALID) T(RN, -0x1p+100, 0, INVALID) +#endif diff --git a/src/math/special/llrintl.h b/src/math/special/llrintl.h index 9943d53..1721db3 100644 --- a/src/math/special/llrintl.h +++ b/src/math/special/llrintl.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1L, -1, INEXACT) T(RN, 0x1p-100L, 0, INEXACT) T(RN, -0x1p-100L, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100L, 0, INVALID) T(RN, -0x1p+100L, 0, INVALID) +#endif diff --git a/src/math/special/llround.h b/src/math/special/llround.h index 2bf522a..d903739 100644 --- a/src/math/special/llround.h +++ b/src/math/special/llround.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1, -1, INEXACT) T(RN, 0x1p-100, 0, INEXACT) T(RN, -0x1p-100, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100, 0, INVALID) T(RN, -0x1p+100, 0, INVALID) +#endif diff --git a/src/math/special/llroundf.h b/src/math/special/llroundf.h index 4f9f8d0..a2f4fef 100644 --- a/src/math/special/llroundf.h +++ b/src/math/special/llroundf.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1, -1, INEXACT) T(RN, 0x1p-100, 0, INEXACT) T(RN, -0x1p-100, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100, 0, INVALID) T(RN, -0x1p+100, 0, INVALID) +#endif diff --git a/src/math/special/llroundl.h b/src/math/special/llroundl.h index 688ffbc..4d6ddad 100644 --- a/src/math/special/llroundl.h +++ b/src/math/special/llroundl.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1L, -1, INEXACT) T(RN, 0x1p-100L, 0, INEXACT) T(RN, -0x1p-100L, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100L, 0, INVALID) T(RN, -0x1p+100L, 0, INVALID) +#endif diff --git a/src/math/special/lrint.h b/src/math/special/lrint.h index dcd30e8..e450093 100644 --- a/src/math/special/lrint.h +++ b/src/math/special/lrint.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1, -1, INEXACT) T(RN, 0x1p-100, 0, INEXACT) T(RN, -0x1p-100, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100, 0, INVALID) T(RN, -0x1p+100, 0, INVALID) +#endif diff --git a/src/math/special/lrintf.h b/src/math/special/lrintf.h index bf04a27..01106e4 100644 --- a/src/math/special/lrintf.h +++ b/src/math/special/lrintf.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1, -1, INEXACT) T(RN, 0x1p-100, 0, INEXACT) T(RN, -0x1p-100, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100, 0, INVALID) T(RN, -0x1p+100, 0, INVALID) +#endif diff --git a/src/math/special/lrintl.h b/src/math/special/lrintl.h index 9943d53..1721db3 100644 --- a/src/math/special/lrintl.h +++ b/src/math/special/lrintl.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1L, -1, INEXACT) T(RN, 0x1p-100L, 0, INEXACT) T(RN, -0x1p-100L, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100L, 0, INVALID) T(RN, -0x1p+100L, 0, INVALID) +#endif diff --git a/src/math/special/lround.h b/src/math/special/lround.h index 2bf522a..d903739 100644 --- a/src/math/special/lround.h +++ b/src/math/special/lround.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1, -1, INEXACT) T(RN, 0x1p-100, 0, INEXACT) T(RN, -0x1p-100, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100, 0, INVALID) T(RN, -0x1p+100, 0, INVALID) +#endif diff --git a/src/math/special/lroundf.h b/src/math/special/lroundf.h index 4f9f8d0..a2f4fef 100644 --- a/src/math/special/lroundf.h +++ b/src/math/special/lroundf.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1, -1, INEXACT) T(RN, 0x1p-100, 0, INEXACT) T(RN, -0x1p-100, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100, 0, INVALID) T(RN, -0x1p+100, 0, INVALID) +#endif diff --git a/src/math/special/lroundl.h b/src/math/special/lroundl.h index 688ffbc..4d6ddad 100644 --- a/src/math/special/lroundl.h +++ b/src/math/special/lroundl.h @@ -11,8 +11,10 @@ T(RN, -0x1.ffffp-1L, -1, INEXACT) T(RN, 0x1p-100L, 0, INEXACT) T(RN, -0x1p-100L, 0, INEXACT) // TODO: return value is unspecified +#if INVALID T(RN, nan, 0, INVALID) T(RN, inf, 0, INVALID) T(RN, -inf, 0, INVALID) T(RN, 0x1p+100L, 0, INVALID) T(RN, -0x1p+100L, 0, INVALID) +#endif diff --git a/src/math/special/nexttoward.h b/src/math/special/nexttoward.h index e787221..aa3560a 100644 --- a/src/math/special/nexttoward.h +++ b/src/math/special/nexttoward.h @@ -2,14 +2,16 @@ T(RN, 0x1.fffffffffffffp+1023, inf, T(RN, 0x1.fffffffffffffp+1023, 0x0p+0L, 0x1.ffffffffffffep+1023, 0x0p+0, 0) T(RN, 0x1p-1074, -inf, 0x0p+0, 0x0p+0, INEXACT|UNDERFLOW) T(RN, 0x1p-1074, inf, 0x1p-1073, 0x0p+0, INEXACT|UNDERFLOW) +#if LDBL_MANT_DIG > DBL_MANT_DIG T(RN, 0x1p-1074, 0x1.ffffffffffffffep-1075L, 0x0p+0, 0x0p+0, INEXACT|UNDERFLOW) T(RN, 0x1p-1074, 0x1.000000000000002p-1074L, 0x1p-1073, 0x0p+0, INEXACT|UNDERFLOW) +T(RN, 0x1p+0, 0x1.0000000000000002p+0L, 0x1.0000000000001p+0, 0x0p+0, 0) +T(RN, 0x1p+0, 0x1.fffffffffffffffep-1L, 0x1.fffffffffffffp-1, 0x0p+0, 0) +#endif T(RN, 0x1.ffffffffffffcp-1023, 0x1p+0L, 0x1.ffffffffffffep-1023, 0x0p+0, INEXACT|UNDERFLOW) T(RN, 0x1.ffffffffffffep-1023, 0x1p+0L, 0x1p-1022, 0x0p+0, 0) T(RN, 0x1.0000000000001p-1022, 0x0p+0L, 0x1p-1022, 0x0p+0, 0) T(RN, 0x1p-1022, 0x0p+0L, 0x1.ffffffffffffep-1023, 0x0p+0, INEXACT|UNDERFLOW) -T(RN, 0x1p+0, 0x1.0000000000000002p+0L, 0x1.0000000000001p+0, 0x0p+0, 0) -T(RN, 0x1p+0, 0x1.fffffffffffffffep-1L, 0x1.fffffffffffffp-1, 0x0p+0, 0) T(RN, 0x1p+0, 0x1p+0L, 0x1p+0, 0x0p+0, 0) T(RN, 0x1p+0, -0x1p+0L, 0x1.fffffffffffffp-1, 0x0p+0, 0) T(RN, -0x1p+0, 0x1p+0L, -0x1.fffffffffffffp-1, 0x0p+0, 0) diff --git a/src/math/special/nexttowardf.h b/src/math/special/nexttowardf.h index 9f80551..01aacc4 100644 --- a/src/math/special/nexttowardf.h +++ b/src/math/special/nexttowardf.h @@ -2,14 +2,20 @@ T(RN, 0x1.fffffep+127, inf, inf, T(RN, 0x1.fffffep+127, 0x0p+0L, 0x1.fffffcp+127, 0x0p+0, 0) T(RN, 0x1p-149, -inf, 0x0p+0, 0x0p+0, INEXACT|UNDERFLOW) T(RN, 0x1p-149, inf, 0x1p-148, 0x0p+0, INEXACT|UNDERFLOW) +#if LDBL_MANT_DIG > DBL_MANT_DIG T(RN, 0x1p-149, 0x1.ffffffffffffffep-150L, 0x0p+0, 0x0p+0, INEXACT|UNDERFLOW) T(RN, 0x1p-149, 0x1.000000000000002p-149L, 0x1p-148, 0x0p+0, INEXACT|UNDERFLOW) +T(RN, 0x1p+0, 0x1.0000000000000002p+0L, 0x1.000002p+0, 0x0p+0, 0) +T(RN, 0x1p+0, 0x1.fffffffffffffffep-1L, 0x1.fffffep-1, 0x0p+0, 0) +#endif +T(RN, 0x1p-149, 0x1.fffffffffffffp-150L, 0x0p+0, 0x0p+0, INEXACT|UNDERFLOW) +T(RN, 0x1p-149, 0x1.0000000000001p-149L, 0x1p-148, 0x0p+0, INEXACT|UNDERFLOW) +T(RN, 0x1p+0, 0x1.0000000000001p+0L, 0x1.000002p+0, 0x0p+0, 0) +T(RN, 0x1p+0, 0x1.fffffffffffffp-1L, 0x1.fffffep-1, 0x0p+0, 0) T(RN, 0x1.fffff8p-127, 0x1p+0L, 0x1.fffffcp-127, 0x0p+0, INEXACT|UNDERFLOW) T(RN, 0x1.fffffcp-127, 0x1p+0L, 0x1p-126, 0x0p+0, 0) T(RN, 0x1.000002p-126, 0x0p+0L, 0x1p-126, 0x0p+0, 0) T(RN, 0x1p-126, 0x0p+0L, 0x1.fffffcp-127, 0x0p+0, INEXACT|UNDERFLOW) -T(RN, 0x1p+0, 0x1.0000000000000002p+0L, 0x1.000002p+0, 0x0p+0, 0) -T(RN, 0x1p+0, 0x1.fffffffffffffffep-1L, 0x1.fffffep-1, 0x0p+0, 0) T(RN, 0x1p+0, 0x1p+0L, 0x1p+0, 0x0p+0, 0) T(RN, 0x1p+0, -0x1p+0L, 0x1.fffffep-1, 0x0p+0, 0) T(RN, -0x1p+0, 0x1p+0L, -0x1.fffffep-1, 0x0p+0, 0) -- 2.20.1