C 带双精度和浮点的While循环条件
我有一个简单的任务,就是‘用下面的公式写出y的值,计算xmin和xmax之间的差值dx。 我唯一的问题是,当使用while和float时,比如在我将要提供的代码中,我得到的y输出比我应该得到的少一个。 对于以下代码C 带双精度和浮点的While循环条件,c,C,我有一个简单的任务,就是‘用下面的公式写出y的值,计算xmin和xmax之间的差值dx。 我唯一的问题是,当使用while和float时,比如在我将要提供的代码中,我得到的y输出比我应该得到的少一个。 对于以下代码 #include <stdio.h> int main() { float x,xmin,xmax,dx,y; printf("Input the values of xmin xmax i dx"); scanf("%f%f%f",&xm
#include <stdio.h>
int main() {
float x,xmin,xmax,dx,y;
printf("Input the values of xmin xmax i dx");
scanf("%f%f%f",&xmin,&xmax,&dx);
x=xmin;
while(x<=xmax) {
y=(x*x-2*x-2)/(x*x+1);
printf("%.3f %.3f\n",x,y);
x=x+dx;
}
}
对于-20.2的输入,我得到的输出只有1.8,即20个输出,而不是2个。
但是当我使用double而不是float时,一切都很好,有21个输出。
是否存在我不知道的与while条件相关的东西?这是有意义的。Float或double是有理数a/b的近似值,而不是精确表示:整数,b=0你离1000越近。。。近似值越高,但仍然是近似值
保证用浮点表示法精确表示的有理数的子集是有理数:2^k,其中k:integer[-126浮点舍入错误…您是否检查了x在这两种情况下的具体值?对于x,请尝试%.3f,而不是%.12f,同时使用float和double。而不是while x,唯一精确表示的数字是2^k,其中k:integer-不一致。例如,您可以将3.0精确表示为float。
#include <stdio.h>
int main() {
float x,xmin,xmax,dx,y;
printf("Input the values of xmin xmax i dx");
scanf("%f%f%f",&xmin,&xmax,&dx);
x=xmin;
//expected cummulative error
const float e = 0.7 * dx;
do
{
y=(x*x-2*x-2)/(x*x+1);
printf("%.3f %.3f\n",x,y);
x=x+dx;
}
while(!(x > (xmax + e)));
}