首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中浮点数据类型的范围?

C中浮点数据类型的范围?
EN

Stack Overflow用户
提问于 2012-04-11 14:32:26
回答 6查看 113.8K关注 0票数 38

我正在读一本C书,谈到浮点数的范围,作者给出了表:

代码语言:javascript
复制
Type     Smallest Positive Value  Largest value      Precision
====     =======================  =============      =========
float    1.17549 x 10^-38         3.40282 x 10^38    6 digits
double   2.22507 x 10^-308        1.79769 x 10^308   15 digits

我不知道列中最小、正和最大值的数字是从哪里来的。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-04-11 14:37:19

这些数字来自IEEE-754标准,该标准定义浮点数的标准表示形式。维基百科在链接解释上的文章如何得出这些范围,知道用于符号、尾数和指数的位数。

票数 22
EN

Stack Overflow用户

发布于 2012-04-11 14:42:26

32位浮点数包含23 +1位尾数和8位指数(-126至127 ),所以您可以表示的最大数字是:

代码语言:javascript
复制
(1 + 1 / 2 + ... 1 / (2 ^ 23)) * (2 ^ 127) = 
(2 ^ 23 + 2 ^ 23 + .... 1) * (2 ^ (127 - 23)) = 
(2 ^ 24 - 1) * (2 ^ 104) ~= 3.4e38
票数 31
EN

Stack Overflow用户

发布于 2012-04-11 15:04:42

浮点数据类型的值来自于总共有32位来表示分配的数字,如下所示:

1位:符号位

8位:指数p

23位:尾数

指数存储为p + BIAS,偏差为127,尾数有23位,24隐藏位假设为1。该隐藏位是尾数中最重要的位,必须选择指数才能达到1。

这意味着您可以表示的最小数字是01000000000000000000000000000000,即1x2^-126 = 1.17549435E-38

最大值为011111111111111111111111111111111,尾数为2* (1 ~ 1/65536),指数为127,为(1 - 1 / 65536) * 2 ^ 128 = 3.40277175E38

同样的原则适用于双重精度,但双边投资条约如下:

1位:符号位

11位:指数位

52位:尾数位

偏见: 1023

因此,从技术上讲,这些限制来自IEEE-754表示浮点数的标准,而上述限制是如何产生的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10108053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档