为什么我的程序不能正常工作?Float Casting

时间:2015-10-21 20:08:40

标签: casting floating-point double

什么都没有作为输出打印,但是当我写时(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;

}

1 个答案:

答案 0 :(得分:1)

3.1,在C程序中,表示与小数3.1最接近的double。假设IEEE 754二进制浮点,最常见的实现,其精确值为3.100000000000000088817841970012523233890533447265625

当您将其分配到x时,它会转换为最接近的float,3.099999904632568359375。

通过将float转换为double并比较双打来完成floatdouble之间的比较。

floatdouble的所有转化都是准确的,因此只有当3.099999904632568359375等于3.100000000000000088817841970012523233890533447265625时,while条件才会成立

floatdouble转换的准确性不仅仅是double占用的空间超过float。 IEEE二进制浮点数具有三个字段,符号位,2的幂指数和有效数。 float指数和有效数范围是相应双范围的正确子集。

在更广泛的问题上,floatdouble非常紧凑和高效,远比Java的BigDecimal等十进制缩放类型更有效。价格是它们是科学记数法的二进制版本,它不能完全代表大多数小数部分。

相关问题