X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fmath%2Futil.c;h=f02f5a033a207075ad666885d5ac142ad75b051b;hb=7fd3b84625cfa955207526eda74d9261c5324549;hp=189217367c7931936a957adc502e03bc16f7d533;hpb=d22f4f43182fe1cc70b343b6a52cb8e3a54d1f44;p=libc-test diff --git a/src/math/util.c b/src/math/util.c index 1892173..f02f5a0 100644 --- 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 (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; @@ -56,8 +59,11 @@ float ulperr(double got, double want, float dwant) { 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; @@ -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; - 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; @@ -121,9 +130,15 @@ char *rstr(int r) { switch (r) { case RN: return "RN"; +#ifdef FE_TOWARDZERO case RZ: return "RZ"; +#endif +#ifdef FE_UPWARD case RU: return "RU"; +#endif +#ifdef FE_DOWNWARD case RD: return "RD"; +#endif } return "R?"; }