处理器

时间:2017-08-24 00:56:46

标签: c floating-point processor

最近我遇到了一个程序:

float a = 0.7;
if(a < 0.7)
  printf("Yes");
else
  printf("No");


我了解代码如何打印。但是,在不平等的右侧不是相同的0.7。赢得了&#39; a&#39;的二进制值。和&#39; 0.7&#39;在记忆中是一样的吗?
为什么是0.7,用作0.7但是变量&#39; a&#39;由于没有明确的二进制表示0.7?

,其值小于0.7的值

1 个答案:

答案 0 :(得分:2)

我很高兴您认为该计划更进了一步 实际上,您得到的结果是由于数据类型的变化 变量'a'和值'0.7'。

变量'a'的数据类型为 float ,而'0.7'是数据 输入 double 。这是小数点的默认行为。 Double数据类型的精度是float的精度的两倍。 在您的代码中,如果将if条件替换为:

if(a < 0.7f)


结果会有所不同。你的程序会给出输出 “不”那么。另一种交叉检查方式是遵循以下代码:

printf("%d", sizeof(0.7));
printf("%d", sizeof(a));


在这种情况下,输出将 8和4 (这可能会有所不同)。 来到你的问题,它们都没有被存储为主要的0.7 寄存器的存储器但是,具有双数据类型的小数更多 接近0.7