projects
/
libc-test
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
math: add random float generator to gen, make check work for ulp tests
[libc-test]
/
src
/
math
/
util.c
diff --git
a/src/math/util.c
b/src/math/util.c
index
1892173
..
f02f5a0
100644
(file)
--- a/
src/math/util.c
+++ b/
src/math/util.c
@@
-43,8
+43,11
@@
float ulperrf(float got, float want, float dwant)
{
if (isnan(got) && isnan(want))
return 0;
{
if (isnan(got) && isnan(want))
return 0;
- if (got == want && signbit(got) == signbit(want))
- return dwant;
+ if (got == want) {
+ if (signbit(got) == signbit(want))
+ return dwant;
+ return inf;
+ }
if (isinf(got)) {
got = copysignf(0x1p127, got);
want *= 0.5;
if (isinf(got)) {
got = copysignf(0x1p127, got);
want *= 0.5;
@@
-56,8
+59,11
@@
float ulperr(double got, double want, float dwant)
{
if (isnan(got) && isnan(want))
return 0;
{
if (isnan(got) && isnan(want))
return 0;
- if (got == want && signbit(got) == signbit(want))
- return dwant;
+ if (got == want) {
+ if (signbit(got) == signbit(want))
+ return dwant;
+ return inf; // treat 0 sign errors badly
+ }
if (isinf(got)) {
got = copysign(0x1p1023, got);
want *= 0.5;
if (isinf(got)) {
got = copysign(0x1p1023, got);
want *= 0.5;
@@
-72,8
+78,11
@@
float ulperrl(long double got, long double want, float dwant)
#elif LDBL_MANT_DIG == 64
if (isnan(got) && isnan(want))
return 0;
#elif LDBL_MANT_DIG == 64
if (isnan(got) && isnan(want))
return 0;
- if (got == want && signbit(got) == signbit(want))
- return dwant;
+ if (got == want) {
+ if (signbit(got) == signbit(want))
+ return dwant;
+ return inf;
+ }
if (isinf(got)) {
got = copysignl(0x1p16383L, got);
want *= 0.5;
if (isinf(got)) {
got = copysignl(0x1p16383L, got);
want *= 0.5;
@@
-121,9
+130,15
@@
char *rstr(int r)
{
switch (r) {
case RN: return "RN";
{
switch (r) {
case RN: return "RN";
+#ifdef FE_TOWARDZERO
case RZ: return "RZ";
case RZ: return "RZ";
+#endif
+#ifdef FE_UPWARD
case RU: return "RU";
case RU: return "RU";
+#endif
+#ifdef FE_DOWNWARD
case RD: return "RD";
case RD: return "RD";
+#endif
}
return "R?";
}
}
return "R?";
}