勒让德多项式的递归输出,接收浮点类型的高精度输出。
浮点运算结果的精度是由参与运算的数据类型和等号左边的赋值变量数据类型决定的。
所以可以通过使用高精度浮点类型变量来提高结果精度。
实现代码:
# include"stdio.h"
double Pn(double x,int n);
int main()
{
double x;
double result;
int n;
scanf("%lf%d",&x,&n);
result = Pn(x,n);
printf("%.2lf",result);
return 0;
}
double Pn(double x,int n)
{
double oop;
if(n == 0)
return 1.0;
else if(n == 1)
return x;
else if(n > 1)
{
oop = ((2*n-1)*x*Pn(x,n-1)/n-(n-1)*Pn(x,n-2)/n);
/*等号右边运算结果的精度是由参与运算的浮点数精度来决定的
,double是64位二进制数,比float更精准。*/
/*
所以想要运算结果精准,
尤其在递归运算对精度要求较高的情况下,
要使用double甚至long double数据类型。
*/
return oop;
}
else
return 0;
}
这里使用了double数据类型,如果要求精度更高,可以使用long double类型,输出格式为"%Lf"