shibatch / sleef

SIMD Library for Evaluating Elementary Functions, vectorized libm and DFT
https://sleef.org
Boost Software License 1.0
661 stars 131 forks source link

FP32 sinhf_u10 and FP64 sinh_u10 are inaccurate #461

Open hdelassus opened 1 year ago

hdelassus commented 1 year ago

On x64 targets, we found that Sleef_sinhf_u10 and Sleef_sinh_u10 have maximum absolute error > 1 ulp.

The entry points for which the errors were reproduced are:

Reproducers are attached. Compile them with:

cc -O3 sinhf-test.c -o sinhf-test -mavx512f -lm -lsleef -lmpfr
cc -O3 sinh-test.c -o sinh-test -mavx512f -lm -lsleef -lmpfr

Outputs:

$ ./test-sinhf
sinhf_0(0x1.63a626p+6) = inf
sinhf_1(0x1.63a626p+6) = inf
sinhf_2(0x1.63a626p+6) = inf
sinhf_3(0x1.63a626p+6) = inf
sinhf_4(0x1.63a626p+6) = inf
sinhf_5(0x1.63a626p+6) = inf
sinhf_6(0x1.63a626p+6) = inf
sinhf_7(0x1.63a626p+6) = inf
sinhf_8(0x1.63a626p+6) = inf
sinhf_9(0x1.63a626p+6) = inf
MPFR faithful results = 0x1.35630cp+127, 0x1.35630ep+127
$ ./test-sinh
sinh_0(-0x1.631a95ecfef5fp+9) = -inf
sinh_1(-0x1.631a95ecfef5fp+9) = -inf
sinh_2(-0x1.631a95ecfef5fp+9) = -inf
sinh_3(-0x1.631a95ecfef5fp+9) = -inf
sinh_4(-0x1.631a95ecfef5fp+9) = -inf
sinh_5(-0x1.631a95ecfef5fp+9) = -inf
sinh_6(-0x1.631a95ecfef5fp+9) = -inf
sinh_7(-0x1.631a95ecfef5fp+9) = -inf
sinh_8(-0x1.631a95ecfef5fp+9) = -inf
sinh_9(-0x1.631a95ecfef5fp+9) = -inf
MPFR faithful results = -0x1.8791fb84a0c82p+1023, -0x1.8791fb84a0c81p+1023

These results unduly overflow.