C 带双精度和浮点的While循环条件

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

我有一个简单的任务,就是‘用下面的公式写出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",&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)));
}