浮点变量比较失败

时间:2015-08-18 07:49:38

标签: c floating-point

下面的程序似乎看起来会运行一次,但是当我在Turbo C中运行时,输出什么都没有。 任何人都能解释一下吗?

#include<stdio.h>
int main() 
{
    float x=1.1;
    while(x==1.1)
    {
        printf("%f \n",x);
        x=x-0.1;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

默认情况下,浮点数存储为“double”类型。因此,对float和double值进行了比较。

我想,

if(x==1.1f)

它应该解决问题。

同样FLT_EPSILON是两个浮点数之间的最小差异,它们是相同的。

if( abs(x-1.1f) <= FLT_EPSILON)

应该有效

答案 1 :(得分:0)

您可以按如下方式重写循环条件 -

while((1.0009<x)&&(x<1.10001))

因为此x=1.1中的x永远不会完全1.1。在较高的小数位,它可以有不同的值。

您可以在较高的小数位置看到代码的值和工作示例 - https://ideone.com/IgrLAY