Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中关系运算符的求值_C_Operators_Relational - Fatal编程技术网

C语言中关系运算符的求值

C语言中关系运算符的求值,c,operators,relational,C,Operators,Relational,下面给出的是C语言中的一段代码 float k=0.6; if(k==0.6) printf("yes they are equal"); else printf("no they are not equal"); 上面的代码没有给出输出,因为它们不相等。我正在使用Ubuntu12.04GCC4.4 我很惊讶,并调试了这个程序。 答案是否定的,因为K的值不等于0.6。我在gdb中单步执行程序,发现k的值为0.600000024。现在我的问题是为什么0.60000024被分配给k,为什

下面给出的是C语言中的一段代码

float k=0.6;

if(k==0.6)
  printf("yes they are equal");
else
  printf("no they are not equal");
上面的代码没有给出输出,因为它们不相等。我正在使用Ubuntu12.04GCC4.4

我很惊讶,并调试了这个程序。
答案是否定的,因为K的值不等于0.6。我在gdb中单步执行程序,发现k的值为0.600000024。现在我的问题是为什么0.60000024被分配给k,为什么不是0.6。当我指定0.7时,k的值为0.6999998。
为什么会发生这种情况?

正确。如果在C中使用浮点值,则必须使用一组差分

你可以用

DBL_EPSILON of the Header float.h
if ((k - 0.6) < DBL_EPSILON){ ... }

答案是否定的,因为K的值不等于0.6。我在gdb中单步执行程序,发现k的值为0.600000024。0.6的类型不是浮点型,而是双精度型。某处有一个复制品,谢谢。我将阅读更多关于浮点的内容