X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fmath%2Futil.c;h=f02f5a033a207075ad666885d5ac142ad75b051b;hb=c58b8e7cb29f954791ffd5bc2d97ddb4d4202d0c;hp=1b2ff78fe3f68f33c22afc8a845054c93aeb59a9;hpb=ae0f0fe09b7fc9d44d072c3fd08372991d852b1d;p=libc-test diff --git a/src/math/util.c b/src/math/util.c index 1b2ff78..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;