On Sun, Feb 14, 2021 at 01:59:58PM -0800, Steve Kargl wrote: > Just a headsup for anyone doing numerical work with > FreeBSD-current. clang with optimization of -O1 or > higher produces wrong results. Testing 1 million > complex values of ccoshf and limiting |z| < 20, > shows > This is either an in-ling bug or discarding a cast issue. With everything in the same file so clang has dp_ccosh available to it when compiling main. void dp_ccosh(double x, double y, double *re, double *im) { *re = cosh(x) * cos(y); *im = sinh(x) * sin(y); } int main(int argc, char *argv[]) { float complex f, z; double re, im, ur, ui; float x, y; float xmax; ... for (j = 0; j < NUM; j++) { x = xmax * rangef(); y = xmax * rangef(); z = CMPLXF(x,y); f = ccoshf(z); dp_ccosh((double)x, (double)y, &re, &im); gives the wrong results. Changing this to int main(int argc, char *argv[]) { float complex f, z; double re, im, ur, ui; float x, y; volatile float xv, yv; float xmax; ... for (j = 0; j < NUM; j++) { xv = x = xmax * rangef(); yv = y = xmax * rangef(); z = CMPLXF(x,y); f = ccoshf(z); dp_ccosh((double)xv, (double)yv, &re, &im); gives the expected and correct results. -- SteveReceived on Mon Feb 15 2021 - 19:49:15 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:27 UTC