Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 11 Feb 2020 20:30:59 +0100
From: Szabolcs Nagy <>
To: mg1633068 <>
Cc: musl <>
Subject: Re: casinh function accuracy problem

* mg1633068 <> [2020-02-11 23:51:51 +0800]:
> Hi everyone,
> I'm writing testcases for complex math function. Considering the following simple code
> #include <stdio.h>
> #include <complex.h>
> int main(int argc, char *argv[])
> {
>     double complex d = 3.0+6.6*I;
>     double complex ret = casinh(d);
>     printf("casinh(3.0+6.6*I)=%.15f+%.15f*I\n", creal(ret), cimag(ret));
>     return 0;
> }
> With musl libc, the result is:
>     casinh(3.0+6.6*I)=2.671002221994648+1.140551372972568*I
> but with glibc, the result is:
>     casinh(3.0+6.6*I)=2.671002221994652+1.140551372972565*I
> We can see that musl is less accurate. I'm trying to solve this problem.
> With little knowledge of numerical computing, any comment is appreciated!

do you mean you are trying to fix the code in musl?

that's welcome, but i think it will be hard without
numerical computing knowledge.

several complex math functions in musl are not
correct (implemented in a very naive way), but
fixing them is significant effort.

in this particular case the 8 and 12 ulp errors
on the real and imaginary parts are still
considered small errors (glibc has 1 and 2 ulp
errors compared to the correctly rounded result).

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.