什么都没有作为输出打印,但是当我写时(x == 3.1f)它可以工作。 我已经彻底搜索了一个答案,我甚至找到了一些,但它并没有真正帮助我。人们已经回答说使用f作为后缀使它浮点默认类型是double。但它是如何运作的......我希望有人在初学者级别解释我。我刚刚开始学习C编程语言。请不要将此问题标记为之前已回答,因为我已经阅读了所有这些答案,但我仍然无法说服自己。 我也想知道后缀f究竟做什么..以及十进制如何存储在二进制中。为什么我们不简单给。作为另一个二进制代码,并像我们对整数一样进行。我可能会问一些愚蠢的事情。但我真的很困惑
include<stdio.h>
int main()
{
float x = 3.1 ;
while(x==3.1)
{
printf("%f\n",x);
x=x-0.1;
}
return 0;
}
答案 0 :(得分:1)
3.1
,在C程序中,表示与小数3.1最接近的double
。假设IEEE 754二进制浮点,最常见的实现,其精确值为3.100000000000000088817841970012523233890533447265625
当您将其分配到x
时,它会转换为最接近的float
,3.099999904632568359375。
通过将float
转换为double
并比较双打来完成float
和double
之间的比较。
从float
到double
的所有转化都是准确的,因此只有当3.099999904632568359375等于3.100000000000000088817841970012523233890533447265625时,while
条件才会成立
float
到double
转换的准确性不仅仅是double
占用的空间超过float
。 IEEE二进制浮点数具有三个字段,符号位,2的幂指数和有效数。 float
指数和有效数范围是相应双范围的正确子集。
在更广泛的问题上,float
和double
非常紧凑和高效,远比Java的BigDecimal等十进制缩放类型更有效。价格是它们是科学记数法的二进制版本,它不能完全代表大多数小数部分。