2

为什么这个程序没有给出浮点和双精度数据类型的输出。但是,将相同的代码替换为 for 循环会产生什么结果??

      # include <stdio.h>

      int main()
      {
       float x=1.1;                    
       while (x==1.1)
       {  
        printf("%f\n",x);
        x=x-0.1;
       }
       return 0;
      }
4

1 回答 1

7
   float x=1.1;                    
   while (x==1.1)

float 和 double 变量不能存储 1.1 的精确值,只能存储非常接近的近似值。由于精度不同,float 和 double 中的确切值会略有不同。

1.1 是双精度值。您将 1.1 作为双精度存储到浮点数中,这将稍微改变值。然后你将它与双精度值 1.1 进行比较,这样它就不会完全相等,因此永远不会进入你的条件。

为此,您需要编写 1.1f 以确保您在任何地方都使用相同的数据类型。此外,我相信其他人会解释为什么比较浮点值以获得精确相等通常是一个坏主意。

于 2013-09-24T15:47:21.200 回答