acadia-newlib/newlib/libm/math
Fabian Schriever d4bcecb3e9 Fix error in float trig. function range reduction
The single-precision trigonometric functions show rather high errors in
specific ranges starting at about 30000 radians. For example the sinf
procedure produces an error of 7626.55 ULP with the input
5.195880078125e+04 (0x474AF6CD) (compared with MPFR in 128bit
precision). For the test we used 100k values evenly spaced in the range
of [30k, 70k]. The issues are periodic at higher ranges.

This error was introduced when the double precision range reduction was
first converted to float. The shift by 8 bits always returns 0 as iq is
never higher than 255.

The fix reduces the error of the example above to 0.45 ULP, highest
error within the test set fell to 1.31 ULP, which is not perfect, but
still a significant improvement. Testing other previously erroneous
ranges no longer show particularly large accuracy errors.
2020-03-03 16:45:22 +01:00
..
Makefile.am New expf, exp2f, logf, log2f and powf implementations 2017-10-13 10:58:00 +02:00
Makefile.in makedoc: make errors visible 2017-12-07 11:54:11 +00:00
e_acos.c
e_acosh.c
e_asin.c
e_atan2.c
e_atanh.c
e_cosh.c
e_exp.c New exp and exp2 implementations 2018-06-27 15:40:49 +02:00
e_fmod.c
e_hypot.c
e_j0.c
e_j1.c
e_jn.c
e_log.c New log implementation 2018-06-27 15:40:49 +02:00
e_log10.c
e_pow.c pow: fix pow(-1.0, NaN) 2020-02-14 10:12:25 +01:00
e_rem_pio2.c
e_remainder.c
e_scalb.c e_scalb.c: Call scalbln instead of scalbn on 16-bit targets to ensure constant fits in an int. 2018-09-03 09:41:23 +02:00
e_sinh.c
e_sqrt.c Avoid unneeded truncation to "int" 2015-05-27 13:30:20 +02:00
ef_acos.c
ef_acosh.c
ef_asin.c
ef_atan2.c
ef_atanh.c
ef_cosh.c
ef_exp.c New expf, exp2f, logf, log2f and powf implementations 2017-10-13 10:58:00 +02:00
ef_fmod.c
ef_hypot.c
ef_j0.c
ef_j1.c
ef_jn.c newlib: fix various gcc warnings 2018-08-08 10:50:19 +02:00
ef_log.c New expf, exp2f, logf, log2f and powf implementations 2017-10-13 10:58:00 +02:00
ef_log10.c
ef_pow.c Fix error in powf for (-1.0, NaN) input 2020-03-02 16:46:03 +01:00
ef_rem_pio2.c
ef_remainder.c
ef_scalb.c
ef_sinh.c
ef_sqrt.c
el_hypot.c * libc/include/complex.h (cabsl): Add prototype. 2015-02-06 16:14:04 +00:00
er_gamma.c
er_lgamma.c
erf_gamma.c
erf_lgamma.c
k_cos.c
k_rem_pio2.c newlib: fix various gcc warnings 2018-08-08 10:50:19 +02:00
k_sin.c
k_standard.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
k_tan.c
kf_cos.c
kf_rem_pio2.c Fix error in float trig. function range reduction 2020-03-03 16:45:22 +01:00
kf_sin.c
kf_tan.c
math.tex Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
s_asinh.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
s_atan.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
s_ceil.c
s_cos.c
s_erf.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
s_fabs.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
s_floor.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
s_frexp.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
s_ldexp.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
s_signif.c
s_sin.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
s_tan.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
s_tanh.c math: remove TRAD_SYNOPSIS 2017-12-01 03:41:53 -06:00
sf_asinh.c
sf_atan.c
sf_ceil.c
sf_cos.c Remove unused variable 'one' from sf_cos.c 2018-08-29 15:57:27 +02:00
sf_erf.c
sf_fabs.c
sf_floor.c
sf_frexp.c
sf_ldexp.c
sf_signif.c
sf_sin.c Improve performance of sinf/cosf/sincosf 2018-06-21 09:37:04 +02:00
sf_tan.c
sf_tanh.c
w_acos.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
w_acosh.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
w_asin.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
w_atan2.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
w_atanh.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
w_cosh.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_drem.c
w_exp.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_exp2.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
w_fmod.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
w_gamma.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_hypot.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_j0.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_j1.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_jn.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_lgamma.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_log.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_log10.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_pow.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_remainder.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
w_scalb.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_sincos.c
w_sinh.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
w_sqrt.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
w_tgamma.c
wf_acos.c Use nanf() instead of nan() in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_acosh.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
wf_asin.c Use nanf() instead of nan() in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_atan2.c
wf_atanh.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
wf_cosh.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_drem.c
wf_exp.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_exp2.c New expf, exp2f, logf, log2f and powf implementations 2017-10-13 10:58:00 +02:00
wf_fmod.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
wf_gamma.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_hypot.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_j0.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_j1.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_jn.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_lgamma.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_log.c Use nanf() instead of nan() in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_log2.c New expf, exp2f, logf, log2f and powf implementations 2017-10-13 10:58:00 +02:00
wf_log10.c Use nanf() instead of nan() in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_pow.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_remainder.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
wf_scalb.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_sincos.c Improve performance of sinf/cosf/sincosf 2018-06-21 09:37:04 +02:00
wf_sinh.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wf_sqrt.c Remove matherr, and SVID and X/Open math library configurations 2019-01-23 10:46:24 +01:00
wf_tgamma.c
wr_gamma.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wr_lgamma.c Remove HUGE_VAL definition from libm math functions 2019-01-23 10:46:30 +01:00
wrf_gamma.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00
wrf_lgamma.c Use HUGE_VALF instead of HUGE_VAL in single-precision float libm math functions 2019-01-23 10:46:30 +01:00