为什么我的程序不起作用???浮动铸造
Why Does Not My Program Works ???Float Casting
没有任何内容作为输出打印出来,但是当我写 while(x==3.1f) 时它起作用了。
我已经彻底搜索了答案,甚至找到了一些答案,但这并没有真正帮助我。人们已经回答说使用 f 作为后缀使其浮点数默认类型为双精度。但它是如何真正起作用的……我希望有人能在初学者水平上向我解释。我刚刚开始学习 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;
}
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
占用更多 space 的问题。 IEEE 二进制浮点数具有三个字段,一个符号位、一个二次方指数和一个尾数。 float
指数和尾数范围是相应双精度范围的真子集。
在更广泛的问题上,float
和 double
非常紧凑和高效,比 Java 的 BigDecimal 等小数尺度类型更高效。代价是它们是科学记数法的二进制版本,不能准确表示大多数小数。
没有任何内容作为输出打印出来,但是当我写 while(x==3.1f) 时它起作用了。 我已经彻底搜索了答案,甚至找到了一些答案,但这并没有真正帮助我。人们已经回答说使用 f 作为后缀使其浮点数默认类型为双精度。但它是如何真正起作用的……我希望有人能在初学者水平上向我解释。我刚刚开始学习 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;
}
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
占用更多 space 的问题。 IEEE 二进制浮点数具有三个字段,一个符号位、一个二次方指数和一个尾数。 float
指数和尾数范围是相应双精度范围的真子集。
在更广泛的问题上,float
和 double
非常紧凑和高效,比 Java 的 BigDecimal 等小数尺度类型更高效。代价是它们是科学记数法的二进制版本,不能准确表示大多数小数。