我正在读一本C书,谈到浮点数的范围,作者给出了表:
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我不知道列中最小、正和最大值的数字是从哪里来的。
发布于 2012-04-11 14:37:19
这些数字来自IEEE-754标准,该标准定义浮点数的标准表示形式。维基百科在链接解释上的文章如何得出这些范围,知道用于符号、尾数和指数的位数。
发布于 2012-04-11 14:42:26
32位浮点数包含23 +1位尾数和8位指数(-126至127 ),所以您可以表示的最大数字是:
(1 + 1 / 2 + ... 1 / (2 ^ 23)) * (2 ^ 127) =
(2 ^ 23 + 2 ^ 23 + .... 1) * (2 ^ (127 - 23)) =
(2 ^ 24 - 1) * (2 ^ 104) ~= 3.4e38发布于 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表示浮点数的标准,而上述限制是如何产生的。
https://stackoverflow.com/questions/10108053
复制相似问题