fix incorrect results for catanf and catanl with some inputs
authorRich Felker <dalias@aerifal.cx>
Wed, 5 Feb 2020 14:40:11 +0000 (09:40 -0500)
committerRich Felker <dalias@aerifal.cx>
Wed, 5 Feb 2020 14:40:11 +0000 (09:40 -0500)
catan was fixed in 10e4bd3780050e75b72aac5d85c31816419bb17d but the
same bug in catanf and catanl was overlooked. the patch is completely
analogous.

src/complex/catanf.c
src/complex/catanl.c

index e10d9c09343282a30cb3b63770e126dba3e30615..ef3907a5069e245d52b11078f072ab113828ce19 100644 (file)
@@ -87,29 +87,17 @@ float complex catanf(float complex z)
        x = crealf(z);
        y = cimagf(z);
 
-       if ((x == 0.0f) && (y > 1.0f))
-               goto ovrf;
-
        x2 = x * x;
        a = 1.0f - x2 - (y * y);
-       if (a == 0.0f)
-               goto ovrf;
 
        t = 0.5f * atan2f(2.0f * x, a);
        w = _redupif(t);
 
        t = y - 1.0f;
        a = x2 + (t * t);
-       if (a == 0.0f)
-               goto ovrf;
 
        t = y + 1.0f;
        a = (x2 + (t * t))/a;
-       w = w + (0.25f * logf (a)) * I;
-       return w;
-
-ovrf:
-       // FIXME
-       w = MAXNUMF + MAXNUMF * I;
+       w = CMPLXF(w, 0.25f * logf(a));
        return w;
 }
index a9fc02db03012604488c7c867cb3618b9212f177..e62526c00672b42b91592334b2f113326c40e9a7 100644 (file)
@@ -97,30 +97,18 @@ long double complex catanl(long double complex z)
        x = creall(z);
        y = cimagl(z);
 
-       if ((x == 0.0L) && (y > 1.0L))
-               goto ovrf;
-
        x2 = x * x;
        a = 1.0L - x2 - (y * y);
-       if (a == 0.0L)
-               goto ovrf;
 
        t = atan2l(2.0L * x, a) * 0.5L;
        w = redupil(t);
 
        t = y - 1.0L;
        a = x2 + (t * t);
-       if (a == 0.0L)
-               goto ovrf;
 
        t = y + 1.0L;
        a = (x2 + (t * t)) / a;
-       w = w + (0.25L * logl(a)) * I;
-       return w;
-
-ovrf:
-       // FIXME
-       w = LDBL_MAX + LDBL_MAX * I;
+       w = CMPLXF(w, 0.25L * logl(a));
        return w;
 }
 #endif