[英]what's the largest number float type can hold?
我是编程新手,最近提出了这个简单的问题。 float 类型有 32 位,其中 8 位用于整数部分(尾数)。 所以我的问题是 float 类型可以容纳大于 255.9999 的数字吗?
如果有人告诉我为什么这段代码表现出意外,我也将不胜感激。 这是一个相关的问题吗?
int main(){
float a=123456789.1;
printf("%lf",a);
return 0;
}
其输出为:
123456792.000000
<float.h>
-- 浮点类型的数字限制有你的答案,特别是...
- FLT_MAX
- DBL_MAX
- LDBL_MAX
分别为
float
、double
和long double
最大有限值
...和...
- FLT_DIG
- DBL_DIG
- LDBL_DIG
保证保留在文本中的十进制数字数 ->
float
/double
float
/long double
float
-> 文本往返不会因四舍五入或溢出而改变
最后一部分意味着不再保证比FLT_DIG
长的float
值(即更有效的数字)可以精确表示。
最常见的 32 位浮点格式 IEEE-754 binary32的整数部分没有 8 位。 它有一位用于符号,八位用于指数字段,以及 23 位用于有效数字字段(小数部分)。
符号位确定数字是正 (0) 还是负 (1)。
指数字段 e 有多种用途。 如果它是 11111111(二进制),并且有效位字段 f 为零,则浮点值表示无穷大。 如果 e 是 11111111,并且有效位字段不为零,则它表示一个特殊的 Not-a-Number“值”。
如果指数不是 11111111 且不为零,则浮点值表示 2 e-127 •(1+f/2 23 ),并添加符号。 请注意,分数部分是通过将有效数字段的内容加 1 形成的。 这通常称为隐式 1,因此数学有效数是 24 位——前导 1 中的 1 位,有效数字段中的 23 位。
如果指数为零,则浮点值表示 2 1−127 •(0+f/2 23 ) 或符号位为 1 时的负数。注意前导位为 0。这些称为次正规数。 它们包含在格式中以使某些数学属性在浮点算术中起作用。
表示的最大有限值是当指数为 11111110 (254) 且有效位域全为 1 时(f 为 2 23 -1),所以表示的数为 2 254−127 •(1+ (2 23 -1)/ 2 23 ) = 2 127 •(2−2 −23 ) = 2 128 −2 104 = 340282346638528859811704183484516925440。
float a=123456789.1;
, float
型没有足够的精度来表示 123456789.1。 (实际上,十进制小数 .1 永远不能用二进制浮点格式表示。)当有效数只有 24 位时,我们可以表示的最接近 123456789.1 的数字是 123456792 和 123456800。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.