我的C代码怎么了?这是代码块16.01中的编译器错误吗?

我的C代码怎么了?这是代码块16.01中的编译器错误吗?,c,while-loop,codeblocks,C,While Loop,Codeblocks,我使用的是编译器附带的代码::Block 16.01(当前版本)。问题是当我将xMax更改为1.2时,结果不会改变。它产生与xMax=1.1相同的结果。我的C代码有问题吗?或者这是编译器的问题?这是我的MWE: #include<stdio.h> int main() { double xMin=1.0; double xMax=1.1; double x=xMin; double h=0.1; while(x <= xMax)

我使用的是编译器附带的代码::Block 16.01(当前版本)。问题是当我将xMax更改为1.2时,结果不会改变。它产生与xMax=1.1相同的结果。我的C代码有问题吗?或者这是编译器的问题?这是我的MWE:

#include<stdio.h>
int main()
{
    double xMin=1.0;
    double xMax=1.1;
    double x=xMin;
    double h=0.1;
    while(x <= xMax)
    {
        printf("x=%f\n",x);
        x=x+h;
    }
    return 0;
}
#包括
int main()
{
双xMin=1.0;
双xMax=1.1;
双x=xMin;
双h=0.1;

而(x则存在浮点精度问题。由于
1.2
无法以二进制形式精确表示,因此存在精度损失。如果将
1.2
更改为更大的值,例如
1.201
,则代码应能正常工作
一般来说,请尽量避免在浮点比较中使用
=

和“相同的结果”是:“这是编译器错误吗?”不,不是。这些常量不能精确地表示为浮点数。
%f
格式显示的精度不高,但如果仔细观察,您会发现
0.1
实际上略大于预期的数字。@alk:我的代码的结果是1.000000,1.100000。如果我们让xMax=1.2,那么结果与xMax=1.1的情况相同。这取决于我的编译器。我在这里尝试过:不。我说在这两种情况下,它只打印了两行:
x=1.000000
x=1.100000
对不起,我的原始注释是反向的。我的意思是:
1.0
,加上
0.1
,再加上
0.1
Is大于
1.2
,因此跳过了上次计划的迭代。实际上,这与您发布的内容一致。我认为我最初误读了它。是的。但它的大小并不重要。问题是相同的-
精度
,它会影响观察到的行为。如果是另一种情况,则会导致问题不会被注意到的。