请解释为什么以下代码片段的行为不同.
#include<stdio.h>
int main(){
float a=0.1;
if(a<0.1)
printf("less");
else
printf("greater than equal");
getchar();
}
Run Code Online (Sandbox Code Playgroud)
Output:greater than equal
#include<stdio.h>
int main(){
float a=0.7;
if(a<0.7)
printf("less");
else
printf("greater than equal");
getchar();
}
Run Code Online (Sandbox Code Playgroud)
Output:less 与我的预期相反.
PS:这不是功课.
Jon*_*eet 10
这里涉及两种不同的类型:float和double.你分配给a float,然后比较 a double.
试想一下,float和double实际上是2和4位十进制浮点类型来代替.现在想象你有:
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
}
Run Code Online (Sandbox Code Playgroud)
显然这是对正在发生的事情的近似,但它解释了两种不同的结果.
这很难说,你什么应该没有更多的信息可以做的-很可能是你不应该使用float,并double在所有的,或者说你应该用宽容的一些水平比较,或者你应该使用double无处不在,还是应该接受某种程度的"不准确"只是系统工作方式的一部分.