请解释为什么以下代码的行为不同。
#include<stdio.h>
int main(){
float a=0.1;
if(a<0.1)
printf("less");
else
printf("greater than equal");
getchar();
}
输出:大于等于
#include<stdio.h>
int main(){
float a=0.7;
if(a<0.7)
printf("less");
else
printf("greater than equal");
getchar();
}
Output:less
与我的预期相反。
PS:这不是作业。
最佳答案
这里涉及到两种不同的类型:float
和double
。您正在分配给一个float
,然后比较一个double
。
假设 float
和 double
实际上是 2 位和 4 位 decimal 浮点类型。现在假设您有:
float a = 0.567123 // Actually assigns 0.57
if (a < 0.567123) // Actually compares 0.5700 with 0.5671
{
// We won't get in here
}
float a = 0.123412; // Actually assigns 0.12
if (a < 0.123412) // Actually compares 0.1200 with 0.1234
{
// We will get in here
}
显然这是对正在发生的事情的近似,但它解释了两种不同的结果。
如果没有更多信息,很难说您应该做什么 - 很可能您不应该使用 float
和 double
在所有情况下,或者您应该使用某种程度的公差进行比较,或者您应该在任何地方使用 double
,或者您应该接受某种程度的“不准确”作为系统工作方式的一部分.
关于c - 解释这种浮点行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9461744/