Aw: Re: TR1 Special Math

Ed Smith-Rowland 3dw4rd@verizon.net
Thu Nov 19 18:34:00 GMT 2015


On 11/17/2015 07:42 AM, Szabolcs Nagy wrote:
> On 17/11/15 02:00, Ed Smith-Rowland wrote:
>> On 11/16/2015 07:28 PM, Florian Goth wrote:
>>> Any particular pointers how I can help in improving the implementation?
>
>> Immediately: I have a good patch with xfails where #include <math.h> 
>> should inject into namespace std.  That's
>> probably a one liner in the makefiles that's better done in tree.  
>> That stuff kills me.
>> The values checking and NaN checking is very good.
>>
>
> there are several correctness bugs visible in the code.
> (e.g. sinc(inf) returning nan instead of 0.)
>
> so at least test all combinations of special numbers
> (+-0, +-inf, qnan, and possibly a few other points
> including subnormal, small normal large normal input,
> this helped me catch corner-case bugs in musl math lib).
>
> it would be nice to know something about the expected
> accuracy of these functions (some of them i'd guess
> to be hard to implement with low ulp errors).
>
>
I fixed the sinc and sinhc problems.
Testing coverage is growing.
I starting to build check_inf tests for everyone (but they aren't in the 
patch.
I'll look at musl to see how you do check_denorm, etc.

Thank you all for looking at this.

Ed

-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch_specfun_7.bz2
Type: application/x-bzip
Size: 242135 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20151119/ca66fe2e/attachment.bin>
-------------- next part --------------

2015-11-14  Edward Smith-Rowland  <3dw4rd@verizon.net>
	    Jonathan Wakely  <jwakely@redhat.com>
	    Florian Goth <CaptainSifff@gmx.de>
	Implement TR29124 Special Math Functions
	* include/Makefile.am: Add new TR29124 headers.
	* include/Makefile.in: Regenerated.
	* include/bits/specfun.h: New.
	* include/bits/specfun_util.h: New.
	* include/bits/complex_util.h: New.
	* include/bits/complex_util.tcc: New.
	* include/bits/sf_beta.tcc: New.
	* include/bits/sf_bessel.tcc: New.
	* include/bits/sf_chebyshev.tcc: New.
	* include/bits/sf_dawson.tcc: New.
	* include/bits/sf_laguerre.tcc: New.
	* include/bits/sf_ellint.tcc: New.
	* include/bits/sf_expint.tcc: New.
	* include/bits/sf_fresnel.tcc: New.
	* include/bits/sf_gamma.tcc: New.
	* include/bits/sf_gegenbauer.tcc: New.
	* include/bits/sf_hyperg.tcc: New.
	* include/bits/sf_hermite.tcc: New.
	* include/bits/sf_hypint.tcc: New.
	* include/bits/sf_jacobi.tcc: New.
	* include/bits/sf_legendre.tcc: New.
	* include/bits/sf_mod_bessel.tcc: New.
	* include/bits/sf_theta.tcc: New.
	* include/bits/sf_trigint.tcc: New.
	* include/bits/sf_zeta.tcc: New.
	* include/ext/cmath: Add more constants.
	* include/tr1/special_function_util.h: Place functions in std
	if __STDCPP_WANT_MATH_SPEC_FUNCS__ defined as 1.
	* include/tr1/bessel_function.tcc: Ditto.
	* include/tr1/beta_function.tcc: Ditto.
	* include/tr1/cmath: Ditto.
	* include/tr1/ell_integral.tcc: Ditto.
	* include/tr1/exp_integral.tcc: Ditto.
	* include/tr1/gamma.tcc: Ditto.
	* include/tr1/hypergeometric.tcc: Ditto.
	* include/tr1/legendre_function.tcc: Ditto.
	* include/tr1/modified_bessel_func.tcc: Ditto.
	* include/tr1/poly_hermite.tcc: Ditto.
	* include/tr1/poly_laguerre.tcc: Ditto.
	* include/tr1/riemann_zeta.tcc: Ditto.
	* testsuite/libstdc++-dg/conformance.exp: Run tests from
	testsuite/special_function sub-directory.
	* testsuite/special_functions/01_assoc_laguerre/check_nan.cc: New.
	* testsuite/special_functions/01_assoc_laguerre/check_value.cc: New.
	* testsuite/special_functions/01_assoc_laguerre/compile.cc: New.
	* testsuite/special_functions/01_assoc_laguerre/compile_2.cc: New.
	* testsuite/special_functions/02_assoc_legendre/check_nan.cc: New.
	* testsuite/special_functions/02_assoc_legendre/check_value.cc: New.
	* testsuite/special_functions/02_assoc_legendre/compile.cc: New.
	* testsuite/special_functions/02_assoc_legendre/compile_2.cc: New.
	* testsuite/special_functions/03_beta/check_nan.cc: New.
	* testsuite/special_functions/03_beta/check_value.cc: New.
	* testsuite/special_functions/03_beta/compile.cc: New.
	* testsuite/special_functions/03_beta/compile_2.cc: New.
	* testsuite/special_functions/04_comp_ellint_1/check_nan.cc: New.
	* testsuite/special_functions/04_comp_ellint_1/check_value.cc: New.
	* testsuite/special_functions/04_comp_ellint_1/compile.cc: New.
	* testsuite/special_functions/04_comp_ellint_1/compile_2.cc: New.
	* testsuite/special_functions/05_comp_ellint_2/check_nan.cc: New.
	* testsuite/special_functions/05_comp_ellint_2/check_value.cc: New.
	* testsuite/special_functions/05_comp_ellint_2/compile.cc: New.
	* testsuite/special_functions/05_comp_ellint_2/compile_2.cc: New.
	* testsuite/special_functions/06_comp_ellint_3/check_nan.cc: New.
	* testsuite/special_functions/06_comp_ellint_3/check_value.cc: New.
	* testsuite/special_functions/06_comp_ellint_3/compile.cc: New.
	* testsuite/special_functions/06_comp_ellint_3/compile_2.cc: New.
	* testsuite/special_functions/07_cyl_bessel_i/check_nan.cc: New.
	* testsuite/special_functions/07_cyl_bessel_i/check_value.cc: New.
	* testsuite/special_functions/07_cyl_bessel_i/compile.cc: New.
	* testsuite/special_functions/07_cyl_bessel_i/compile_2.cc: New.
	* testsuite/special_functions/07_cyl_bessel_i/pr56216.cc: New.
	* testsuite/special_functions/08_cyl_bessel_j/check_nan.cc: New.
	* testsuite/special_functions/08_cyl_bessel_j/check_value.cc: New.
	* testsuite/special_functions/08_cyl_bessel_j/compile.cc: New.
	* testsuite/special_functions/08_cyl_bessel_j/compile_2.cc: New.
	* testsuite/special_functions/09_cyl_bessel_k/check_nan.cc: New.
	* testsuite/special_functions/09_cyl_bessel_k/check_value.cc: New.
	* testsuite/special_functions/09_cyl_bessel_k/compile.cc: New.
	* testsuite/special_functions/09_cyl_bessel_k/compile_2.cc: New.
	* testsuite/special_functions/10_cyl_neumann/check_nan.cc: New.
	* testsuite/special_functions/10_cyl_neumann/check_value.cc: New.
	* testsuite/special_functions/10_cyl_neumann/compile.cc: New.
	* testsuite/special_functions/10_cyl_neumann/compile_2.cc: New.
	* testsuite/special_functions/11_ellint_1/check_nan.cc: New.
	* testsuite/special_functions/11_ellint_1/check_value.cc: New.
	* testsuite/special_functions/11_ellint_1/compile.cc: New.
	* testsuite/special_functions/11_ellint_1/compile_2.cc: New.
	* testsuite/special_functions/12_ellint_2/check_nan.cc: New.
	* testsuite/special_functions/12_ellint_2/check_value.cc: New.
	* testsuite/special_functions/12_ellint_2/compile.cc: New.
	* testsuite/special_functions/12_ellint_2/compile_2.cc: New.
	* testsuite/special_functions/13_ellint_3/check_nan.cc: New.
	* testsuite/special_functions/13_ellint_3/check_value.cc: New.
	* testsuite/special_functions/13_ellint_3/compile.cc: New.
	* testsuite/special_functions/13_ellint_3/compile_2.cc: New.
	* testsuite/special_functions/14_expint/check_nan.cc: New.
	* testsuite/special_functions/14_expint/check_value.cc: New.
	* testsuite/special_functions/14_expint/compile.cc: New.
	* testsuite/special_functions/14_expint/compile_2.cc: New.
	* testsuite/special_functions/15_hermite/check_nan.cc: New.
	* testsuite/special_functions/15_hermite/compile.cc: New.
	* testsuite/special_functions/15_hermite/compile_2.cc: New.
	* testsuite/special_functions/16_laguerre/check_nan.cc: New.
	* testsuite/special_functions/16_laguerre/check_value.cc: New.
	* testsuite/special_functions/16_laguerre/compile.cc: New.
	* testsuite/special_functions/16_laguerre/compile_2.cc: New.
	* testsuite/special_functions/17_legendre/check_nan.cc: New.
	* testsuite/special_functions/17_legendre/check_value.cc: New.
	* testsuite/special_functions/17_legendre/compile.cc: New.
	* testsuite/special_functions/17_legendre/compile_2.cc: New.
	* testsuite/special_functions/18_riemann_zeta/check_nan.cc: New.
	* testsuite/special_functions/18_riemann_zeta/check_value.cc: New.
	* testsuite/special_functions/18_riemann_zeta/compile.cc: New.
	* testsuite/special_functions/18_riemann_zeta/compile_2.cc: New.
	* testsuite/special_functions/19_sph_bessel/check_nan.cc: New.
	* testsuite/special_functions/19_sph_bessel/check_value.cc: New.
	* testsuite/special_functions/19_sph_bessel/compile.cc: New.
	* testsuite/special_functions/19_sph_bessel/compile_2.cc: New.
	* testsuite/special_functions/20_sph_legendre/check_nan.cc: New.
	* testsuite/special_functions/20_sph_legendre/check_value.cc: New.
	* testsuite/special_functions/20_sph_legendre/compile.cc: New.
	* testsuite/special_functions/20_sph_legendre/compile_2.cc: New.
	* testsuite/special_functions/21_sph_neumann/check_nan.cc: New.
	* testsuite/special_functions/21_sph_neumann/check_value.cc: New.
	* testsuite/special_functions/21_sph_neumann/compile.cc: New.
	* testsuite/special_functions/21_sph_neumann/compile_2.cc: New.
	* testsuite/ext/special_functions/airy/check_nan.cc: New.
	* testsuite/ext/special_functions/airy/check_value.cc: New.
	* testsuite/ext/special_functions/airy/compile.cc: New.
	* testsuite/ext/special_functions/airy/compile_2.cc: New.
	* testsuite/ext/special_functions/conf_hyperg/check_nan.cc: New.
	* testsuite/ext/special_functions/conf_hyperg/check_value.cc: New.
	* testsuite/ext/special_functions/conf_hyperg/compile.cc: New.
	* testsuite/ext/special_functions/conf_hyperg/compile_2.cc: New.
	* testsuite/ext/special_functions/hurwitz_zeta/check_nan.cc: New.
	* testsuite/ext/special_functions/hurwitz_zeta/check_value.cc: New.
	* testsuite/ext/special_functions/hurwitz_zeta/compile.cc: New.
	* testsuite/ext/special_functions/hurwitz_zeta/compile_2.cc: New.
	* testsuite/ext/special_functions/hyperg/check_nan.cc: New.
	* testsuite/ext/special_functions/hyperg/check_value.cc: New.
	* testsuite/ext/special_functions/hyperg/compile.cc: New.
	* testsuite/ext/special_functions/hyperg/compile_2.cc: New.
	* testsuite/util/specfun_testcase.h: New.


More information about the Gcc-patches mailing list