大家看一看的结束条件改变后为什么结果不变

来源:百度知道 编辑:UC知道 时间:2024/09/18 03:56:07
#include<iostream.h>
#include<math.h>

double sigma(double (*func)(double),double dl,double du)
{
double dt=0.0;
for(double d=dl;d<du;d+=0.1)
dt+=func(d);
return dt;
}

void main()
{
double dsum;
dsum=sigma(sin,0.1,1.0);
cout<<"the sum of sin from 0.1 to 1.0 is "<<dsum<<endl;
dsum=sigma(cos,0.5,3.0);
cout<<"the sum of cos from 0.5 to 3.0 is "<<dsum<<endl;
}
问题补充:第一次调用for语句结束时:当d=1.00000000000000时,通过参数传递的du=1.00000000000000,而d<du的值却为1—-这个是怎么回事;
如果将for中d<du改为d<=du,运行结果不变;
大家可以在VC上调试一下,观察d,du,d<du及dt的值的变化;
如果结束条件是d<du;结束时,有关值变化如下:

d 0.90000000000000
du 1.0000000000000
d<du 1
dt 3.3890830865483

d 0.90000000000000
du 1.0000000000000
d<du 1
dt 4.1724099961758

d 1.0000000000000
du 1.0000000000000

我想可能是因为浮点数在计算机中的表示不是很精确的原因吧,,,判断浮点数相等时,一般要在一个范围内比较,比如:要判断x=y;
只要y-0.0000001<x<y+0.0000001就行了