diff options
author | Rich Felker <dalias@aerifal.cx> | 2020-02-05 09:40:11 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2020-02-05 09:40:11 -0500 |
commit | 11020620813b828917bc31b4636d8a142f7a564a (patch) | |
tree | b1a7fc40034bdeef3ac191bb4ca6797c6b6b046d | |
parent | 329e79299daaa994b8e75941331a1093051ea5d9 (diff) | |
download | musl-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.
-rw-r--r-- | src/complex/catanf.c | 14 | ||||
-rw-r--r-- | src/complex/catanl.c | 14 |
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 |