最近我遇到了一个程序:
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 :(得分: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