一个用矩形法求定积分的通用程序。编译,连接均无问题,但运行结果为:floating point divided by 0.
程序如下: #include<math.h> #define E 1e-8 main() { double integral(float low,float up,double (*fun)()); double i_value; printf("\nThe integral of sin(x) from 0 to 1 is:\n"); i_value=integral(0,1,sin); printf("%.8f\n",i_value); printf("The integral of cos(x) from -1 to 1 is:\n"); i_value=integral(-1,1,cos); printf("%.8f\n",i_value); printf("The integral of exp(x) from 0 to 2 is:\n"); printf("%.8f\n",i_value); }
double integral(float low,float up,double (*fun)()) { double h,sum=0,intg1,intg2=0; int i,n=10; h=(up-low)/n; for(i=0;i<n;i++) sum+=(*fun)(low+i*h); intg1=sum*h; for(;fabs(intg2-intg1)>E;) { n*=2; h=(up-low)/n; for(sum=0,i=0;i<n;i++) sum+=(*fun)(low+i*h); intg2=sum*h; } return intg2; }
----------------解决方案--------------------------------------------------------
i_value=integral(0,1,sin);
i_value=integral(-1,1,cos);
----------------解决方案--------------------------------------------------------
不好意思,刚才的程序中有明显的低级错误,如:主函数中漏掉了语句{i_value=integral(0,2,exp);},函数integral的形参表中(*fun)后的括号中漏掉了double x(这是一棵芦苇兄找出的错误)。但做了改正后的程序仍然出现同样的运行结果:
The integral of sin(x) from 0 to 1 is:
Floating point error:Davide by 0
改正后的程序如下:
#include<math.h> #define E 1e-8 main() { double integral(float low,float up,double (*fun)(double x)); double i_value;
printf("\nThe integral of sin(x) from 0 to 1 is:\n"); i_value=integral(0,1,sin); printf("%.8f\n",i_value);
printf("The integral of cos(x) from -1 to 1 is:\n"); i_value=integral(-1,1,cos); printf("%.8f\n",i_value);
printf("The integral of exp(x) from 0 to 2 is:\n"); i_value=integral(0,2,exp); printf("%.8f\n",i_value); }
double integral(float low,float up,double (*fun)(double x)) { double h,sum=0,intg1,intg2=0; int i,n=10; /*先求一个初始值*/
h=(up-low)/n; /*h为步长*/ for(i=0;i<n;i++) sum+=(*fun)(low+i*h); intg1=sum*h; /*若相邻两次的积分值绝对值之差不超过所设精度E,就结束循环*/
for(;fabs(intg2-intg1)>E;) { n*=2; h=(up-low)/n; for(sum=0,i=0;i<n;i++) sum+=(*fun)(low+i*h); intg2=sum*h; } return intg2; }
----------------解决方案--------------------------------------------------------
难道没有人看出来错在哪里吗?
----------------解决方案--------------------------------------------------------
可能在那个函数里数据类型出了问题
----------------解决方案--------------------------------------------------------
已经知道这个程序有两个严重错误,分别由风 影子兄和撒播阳光兄指出。非常感谢他们的指点!想要知道这两个错误或是发现其它错误的哥们,敬请跟帖!
----------------解决方案--------------------------------------------------------