summaryrefslogtreecommitdiff
path: root/src/complex
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2020-02-05 09:40:11 -0500
committerRich Felker <dalias@aerifal.cx>2020-02-05 09:40:11 -0500
commit11020620813b828917bc31b4636d8a142f7a564a (patch)
treeb1a7fc40034bdeef3ac191bb4ca6797c6b6b046d /src/complex
parent329e79299daaa994b8e75941331a1093051ea5d9 (diff)
downloadmusl-11020620813b828917bc31b4636d8a142f7a564a.tar.gz
musl-11020620813b828917bc31b4636d8a142f7a564a.tar.bz2
musl-11020620813b828917bc31b4636d8a142f7a564a.tar.xz
musl-11020620813b828917bc31b4636d8a142f7a564a.zip
fix incorrect results for catanf and catanl with some inputs
catan was fixed in 10e4bd3780050e75b72aac5d85c31816419bb17d but the same bug in catanf and catanl was overlooked. the patch is completely analogous.
Diffstat (limited to 'src/complex')
-rw-r--r--src/complex/catanf.c14
-rw-r--r--src/complex/catanl.c14
2 files changed, 2 insertions, 26 deletions
diff --git a/src/complex/catanf.c b/src/complex/catanf.c
index e10d9c09..ef3907a5 100644
--- a/src/complex/catanf.c
+++ b/src/complex/catanf.c
@@ -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;
}
diff --git a/src/complex/catanl.c b/src/complex/catanl.c
index a9fc02db..e62526c0 100644
--- a/src/complex/catanl.c
+++ b/src/complex/catanl.c
@@ -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