【发布时间】:2015-03-17 12:00:52
【问题描述】:
我正在尝试使用梯形规则将函数 1/((1+x^2)x^0.5) 集成在 0 和无穷大之间。
我需要找到在使用双浮点数时提供最高精度的 N 值,我通过运行程序来完成此操作,增加 N 的值,直到 N 的连续值给出的总数之间没有差异.但是我陷入了无限循环。
谢谢
贝丝
#include<stdio.h>
#include<math.h>
#include<float.h>
double inter(double x, double h, double y, double N, double total)
{
h=(y-x)/(N-1);
total= total +0.5*(1/((1+pow(x,2))*sqrt(x)));
x=x+h;
while (x<y)
{
total=total+(1/((1+pow(x,2))*sqrt(x)));
x=x+h;
//printf("t - %lf \n", total);
//printf("x - %lf \n", x);
}
total= total +0.5*(1/((1+pow(x,2))*sqrt(x)));
total=total*h;
return total;
}
main()
{
double x,y,total,h,c,d,f,N, finish;
x=DBL_EPSILON;
y=331;
total=0;
N=0.5;
c=inter(x,h,y,N,total);
d=0;
finish=0;
while(finish==0)
{
d=inter(x,h,y,N,total);
if(d==c)
{
finish=1;
}
else
{
c=d;
d=0;
h++;
printf("%lf/n", h);
}
}
printf("%lf\n", d);
}
【问题讨论】:
-
是否有可能
h=(y-x)/(N-1)最终将h设置为零并且循环条件x<y永远不会变为假? -
@Codor h 也可能变得非常小,以至于 x=x+h 由于浮点不准确而不会改变 x