On Wed, Mar 13, 2019 at 04:41:51PM +0100, Hans Petter Selasky wrote: > On 3/13/19 4:16 PM, Steve Kargl wrote: > > On Tue, Mar 12, 2019 at 07:45:41PM -0700, Steve Kargl wrote: > >> > >> gcc8 --version > >> gcc8 (FreeBSD Ports Collection) 8.3.0 > >> > >> gcc8 -fno-builtin -o z a.c -lm && ./z > >> gcc8 -O -fno-builtin -o z a.c -lm && ./z > >> gcc8 -O2 -fno-builtin -o z a.c -lm && ./z > >> gcc8 -O3 -fno-builtin -o z a.c -lm && ./z > >> > >> Max ULP: 2.297073 > >> Count: 0 (# of ULP that exceed 21) > >> > > > > clang agrees with gcc8 if one changes ... > > > >> int > >> main(void) > >> { > >> double re, im, u, ur, ui; > >> float complex f; > >> float x, y; > > > > this line to "volatile float x, y". > > > > Can you try to use: > > #define sincos(x,p,q) do { \ > *(p) = sin(x); \ > *(q) = cos(x); \ > } while (0) > > > Instead of libm's sincos(). Might be a bug in there. > Using sin() and cos() directly as in /* Double precision csinh() without using C's double complex.s */ void dp_csinh(double x, double y, double *re, double *im) { double c, s; *re = sinh(x) * cos(y); *im = cosh(x) * sin(y); } does not change the result. I'll also note that libm is compiled by clang, and I do not recompile it for the tests. Both gcc8 and cc are using the same libm. I've also tested clang of amd64 with the -m32, it fails as well. -- SteveReceived on Wed Mar 13 2019 - 14:50:13 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:20 UTC