Skip to content
Related Articles
std::legendre, std::legendref and std::legendrel functions in C++17
• Last Updated : 24 Jul, 2018

The legendre , legendref and legendrel are built functions in C++ STL that are used to compute the value of unassociated polynomials of degree n and argument x. Value of order-n unassociated Legendre Polynomial of x is given by : The first few Legendre polynomials are Syntax:

double legendre( unsigned int n, double x )
or
double legendre( unsigned int n, float x )
or
double legendre( unsigned int n, long double x )
or
float legendref( unsigned int n, float x )
or
long double legendrel( unsigned int n, long double x )


Parameters: The function accepts two mandatory parameters which are described below:

• n: it specifies the degree of the polynomial.
• x: it specifies the argument which denotes a value of a floating-point or integral type

Return Value: The function returns the value of order-n unassociated Legendre Polynomial for argument x. The return type depends on the parameters passed.

Note: The function runs in and above C++ 17(7.1).

Below program illustrates the above mentioned functions:

 // C++ program to illustrate the above // mentioned three functions#include  #include using namespace std;int main(){    // int and double as parameter     cout << "legendre(2,0.3)= " << legendre(2,0.3);          //  x as double type parameter    cout << "\nlegendre(3,(double)0.4)=" << legendre(3,(double)0.4);           // x as float      cout << "\nlegendre(3,(float)0.4)= " << legendre(3,(float)0.4);      //  legendref     cout << "\nlegendref(3, 0.45)= " << legendref(3, 0.45);      // legendrel    cout << "\nlegendrel(7, 0.50)= " << legendrel(7, 0.50);          return 0;}

Errors and Exceptions: The function throws an error on three cases which is described below:

• If the argument is NaN, NaN is returned and domain error is not reported
• The function is not required to be defined for |x|>1
• If n is greater or equal than 128, the behavior is implementation-defined

Below programs illustrate the above errors:

Program 1:

 // C++ program to illustrate the above // mentioned three functions// domain error#include  #include using namespace std;int main(){    // int and double as parameter     cout << "legendre(129, 2)= " << legendre(129, 2);              return 0;}

Output:

terminate called after throwing an instance of 'std::domain_error'
what():  Argument out of range in __poly_legendre_p.
legendre(129, 2)=


Program 2:

 // C++ program to illustrate the above // mentioned three functions// when x is NaN#include  #include using namespace std;int main(){    // int and double as parameter     cout << "legendre(129, NaN)= " << legendre(129, sqrt(-2));          return 0;}

Output:

legendre(129, NaN)= nan


Program 3:

 // C++ program to illustrate the above // mentioned three functions// domain error#include  #include using namespace std;int main(){    // int and double as parameter     cout << "legendre(129, 2)= " << legendre(129, 2);          return 0;}

Output:

terminate called after throwing an instance of 'std::domain_error'
what():  Argument out of range in __poly_legendre_p.

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up