关于int和float在计算结果上的区别

今天写郑莉教材课后题:用递归的方法编写函数求n阶勒让德多项式的值,在主程序中实现输入、输出;(c++程序设计第六版97页)
代码如下:
#include
float p(int n, int x);
void main()
{
int n,x;
cout << "请输入正整数n:";
cin >> n;
cout << "请输入正整数x:";
cin >> x;

cout << "n = " << n << endl;
cout << "x = " << x << endl;
cout << "P" << n << "(" << x << ") = " << p(n,x) << endl;
}
float p(int n, int x)
{
if (n == 0)
return 1;
else if (n == 1)
return x;
else
return ((2*n-1)*x*p(n-1,x) - (n-1)*p(n-2,x)) /n ;
}
结果:
请输入正整数n:3
请输入正整数x:4
n = 3
x = 4
P3(4) = 154

而将函数p改为int p,其他不变,输入n=3,x=4,结果则为150。。
想知道这之间相差的4是什么造成的。。

除法的精度,建议你单步看一下

这就是数据取法的问题。。四舍五入会造成数据偏差,尤其是这种递归的。。

建议如下定义。。。
```float p(float n, float x)


int 都是整数,而float 一般都是带小数的

因为float的精度高于int,当你函数的返回值为float时,运行过程会自动把n和x当做float进行运算,所以不会出错。当你的函数返回值为int时,**return ((2*n-1)*x*p(n-1,x) - (n-1)*p(n-2,x)) /n**,最后的除n会有小数,但你的返回值为int,会自动舍去小数,因为高精度无法自动转换为低精度,这就是为什么你的道德答案小于154.**因为运算过程中有小数的舍去**。