我的 C 代码有什么问题?它是 CodeBlock 16.01 中的编译器错误吗?
What wrong with my C code? Is it a compiler bug in CodeBlock 16.01?
我正在使用编译器附带的 Code::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;
}
您遇到浮点精度问题。由于 1.2
不能精确地用二进制形式表示,因此存在精度损失。如果您将 1.2
更改为更大的值,您的代码应该可以工作,比方说,1.201
一般情况下,浮点数比较请尽量避免=
。
我正在使用编译器附带的 Code::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;
}
您遇到浮点精度问题。由于 1.2
不能精确地用二进制形式表示,因此存在精度损失。如果您将 1.2
更改为更大的值,您的代码应该可以工作,比方说,1.201
一般情况下,浮点数比较请尽量避免=
。