This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On 05/09/2018 05:30 AM, Jonathan Wakely wrote:
On 07/05/18 12:39 -0400, Ed Smith-Rowland wrote:All,We were using a different convention for P_l^m assoc_legendre(int l, int m, FloatTp x)- the so-called Condon-Shortley convention which includes (-1)^m. This unfortunately is common.This factor is taken out to match the standard. The underlying __detail code has an arg that allows you to flip this- mostly to highlight the subtle difference.The related sph_legendre is unaffected by this (our impl and the standard include the C-S phase).OK for trunk and branches? Ed2018-05-07 Edward Smith-Rowland <3dw4rd@verizon.net>PR libstdc++/83140 - assoc_legendre returns negated value when m is odd * include/tr1/legendre_function.tcc (__assoc_legendre_p): Add __phaseargument defaulted to +1. Doxy comments on same. * testsuite/special_functions/02_assoc_legendre/ check_assoc_legendre.cc: Regen. * testsuite/tr1/5_numerical_facilities/special_functions/ 02_assoc_legendre/check_tr1_assoc_legendre.cc: Regen.Index: include/tr1/legendre_function.tcc =================================================================== --- include/tr1/legendre_function.tcc (revision 259973) +++ include/tr1/legendre_function.tcc (working copy) @@ -65,7 +65,7 @@ namespace __detail { /** - * @brief Return the Legendre polynomial by recursion on order + * @brief Return the Legendre polynomial by recursion on degree * @f$ l @f$. * * The Legendre function of @f$ l @f$ and @f$ x @f$, @@ -74,7 +74,7 @@ * P_l(x) = \frac{1}{2^l l!}\frac{d^l}{dx^l}(x^2 - 1)^{l} * @f] *- * @param l The order of the Legendre polynomial. @f$l >= 0@f$. + * @param l The degree of the Legendre polynomial. @f$l >= 0@f$. * @param x The argument of the Legendre polynomial. @f$|x| <= 1@f$.*/ template<typename _Tp> @@ -127,16 +127,19 @@ * P_l^m(x) = (1 - x^2)^{m/2}\frac{d^m}{dx^m}P_l(x) * @f] * - * @param l The order of the associated Legendre function. + * @param l The degree of the associated Legendre function. * @f$ l >= 0 @f$. * @param m The order of the associated Legendre function. * @f$ m <= l @f$. * @param x The argument of the associated Legendre function. * @f$ |x| <= 1 @f$. + * @param phase The phase of the associated Legendre function.+ * Use -1 for the Condon-Shortley phase convention.*/ template<typename _Tp> _Tp - __assoc_legendre_p(unsigned int __l, unsigned int __m, _Tp __x) + __assoc_legendre_p(unsigned int __l, unsigned int __m, _Tp __x, + _Tp __phase = _Tp{+1})This list-init isn't valid for C++98 i.e. when used via <tr1/cmath>. GCC seems to allow it, but Clang won't. We could consider dropping the TR1 support, and just provide these functions for ISO/IEC 29124:2010 in C++11 (or later) and for C++17. But that decision should be taken separately, and should only happen on trunk anyway so we need to use _Tp(+1) here. OK for trunk with _Tp(+1) instead of _Tp{+1}. Do we want to change the result of these functions on the branches? How likely is it that changing it will affect somebody's calcuations in a way that they don't expect from a minor release on a branch?
Here are the files applied for 260115.As to backporting... I did a Google and found rather more activity around these functions - especially legendre - than I remembered last time I searched. I thought these functions were languishing, but apparently not. Still low pings on ellint_3.
I *would* like to change branch 8 because it's just out. I think I should curb my enthusiasm for branches 7 and 6. Ed.
Attachment:
CL_pr83140
Description: Text document
Attachment:
patch_pr83140
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |