Re: [PATCH 1/1] newlib: libm: fix complex atan for +/- 1 + 0i

Jeff Johnston <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <CAOox84thGC6u6xJtjW3uJ3r1CbbZWX0KYAGemEAL3wHNC0gqHw@mail.gmail.com>
Hi Joseph,

Sorry for the delay.  I did a check and the current NetBSD sources still
have that check in them and that was where
this code was taken from.

However, I created a test case and tried it with glibc and also tested with
newlib versions of catan/catanf minus the checks.  They
match without the check so I pushed the change to all 3 of the catan
functions.

-- Jeff J.

On Mon, Oct 9, 2023 at 6:47 AM Joseph Faulls <[email protected]>
wrote:

> Ping
>
>
>
> *From:* Joseph Faulls
> *Sent:* Tuesday, September 26, 2023 12:07 PM
> *To:* [email protected]
> *Subject:* [PATCH 1/1] newlib: libm: fix complex atan for +/- 1 + 0i
>
>
>
> Delete check which ensured atan2 was not called with x=0. This is not
>
> necessary as atan2 is defined for x=0 when y != 0. The check incorrectly
>
> resulted in catan returning nan + inf i for when real part is +/- 1 and
>
> imaginary part is 0.
>
>
>
> The check could also have implications when called with imaginary number
>
> x + yi where x^2 + y^2 == 1.0. Although this is unlikely due to floating
>
> point precision.
>
> ---
>
> newlib/libm/complex/catan.c | 2 --
>
> 1 file changed, 2 deletions(-)
>
>
>
> diff --git a/newlib/libm/complex/catan.c b/newlib/libm/complex/catan.c
>
> index 77510ec2f..34d75b849 100644
>
> --- a/newlib/libm/complex/catan.c
>
> +++ b/newlib/libm/complex/catan.c
>
> @@ -105,8 +105,6 @@ catan(double complex z)
>
>
>
>         x2 = x * x;
>
>         a = 1.0 - x2 - (y * y);
>
> -       if (a == 0.0)
>
> -               goto ovrf;
>
>
>
>         t = 0.5 * atan2(2.0 * x, a);
>
>         w = _redupi(t);
>
> --
>
> 2.34.1
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.