<分区>
最近遇到一个程序:
float a = 0.7;
if(a < 0.7)
printf("Yes");
else
printf("No");
我理解代码如何打印是。但是,不等式右边的 0.7 不一样吗? 'a'和'0.7'在内存中的二进制值会不会相同?
为什么0.7,当0.7使用,而变量'a'的值小于0.7,因为没有0.7 的确定二进制表示?
<分区>
最近遇到一个程序:
float a = 0.7;
if(a < 0.7)
printf("Yes");
else
printf("No");
我理解代码如何打印是。但是,不等式右边的 0.7 不一样吗? 'a'和'0.7'在内存中的二进制值会不会相同?
为什么0.7,当0.7使用,而变量'a'的值小于0.7,因为没有0.7 的确定二进制表示?
最佳答案
很高兴您对这个项目有了更进一步的思考。
实际上,您得到的结果是由于数据类型的变化
变量 '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(这可能会有所不同)。
谈到你的问题,它们都没有在 main 中存储为 0.7
寄存器的内存但是, double 据类型的十进制更多
接近于 0.7
关于处理器的代码解释和十进制比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45851349/