请帮忙找一下这个C语言程序的错误

来源:百度知道 编辑:UC知道 时间:2024/04/29 18:52:13
f(x,n)
题目是:已知y=—————————————
f(x+2.3,n)+f(x-3.2,n+3)

2 4 n 2n
其中:f(x,n)=1-x /2!+x /4!- … (-1) x /(2n)! (n>=0),
当x=5.6,n=7时,求y的值.
*****************************************************************
下面是我编的程序:
#include<stdio.h>
float f(float x,int n)
{
int i,p;
float a=1.0;
float j=1.0;
int k=1;
for(i=1;i<=n;i++)
{j*=(-1)*x*x;
for(p=i+1;p<=2*i;p++)
k*=p;
a+=j/k;
}
return(a);
}
main()
{
float x;
int n;
printf("Input x,n:");
scanf("%f %d",&x,&n);
printf("y=%f\n",f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3)));
}
*****************************************************************
运行时出现下面的错误:
Floating point error: Divide by 0.
请各位高手帮我看看哈,谢谢啦!
我在后面加入
if(n==0)
printf("Error!\n");

#include<stdio.h>
float f(float x,int n)
{
if(n==0)return 1;
int i;
float a=1.0;
for(i=1;i<=n;i++)
{
x=-1*x/((2*i-1)*(2*i+1));
a+=x;
}
return a;
}
main()
{
float x;
int n;
printf("Input x,n:");
scanf("%f %d",&x,&n);
printf("y=%f\n",f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3)));
}
//你的算法本身没有错误,但由于你是计算完阶乘,在做除法,这样的话会使计算结果的准确度降低。阶乘的结果会很大,小数除大数结果很小,但计算机的有效位有限所以结果会不准确。

你程序报的错误不是n引起的。而是你函数的运算结果为零,即
(f(x+2.3,n)+f(x-3.2,n+3))=0。所以出现提示的错误。追求最终原因是你只考虑到算法的实现,并为考虑计算的过程导致函数返回值不准确出现的。

显然n=0时,除数是0,于是出错了,n=0的时候应该单独考虑.
___________________________
2 4 n 2n 是什么意思?