繁体   English   中英

浮点型可以容纳的最大数字是多少?

[英]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

分别为floatdoublelong 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。

[the] float 类型可以容纳的最大数字是多少?

C 标准定义

FLT_MAX

包括<float.h>使其成为#define d。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM