双精度 - 最大值

时间:2015-03-19 11:05:29

标签: c double

我对双精度有一个非常愚蠢的问题。我已经读过,在64位上表示了一个double(例如在C中),但我还读到可以用double表示的最大值大约是10 ^ 308。 10 ^ 308如何只用64位表示?

3 个答案:

答案 0 :(得分:3)

它不会保存10 ^ 308数字的308位数。双精度数保存指数和有限数量的数字。

有关内存中浮点编码的详细说明,请参阅https://en.wikipedia.org/wiki/IEEE_floating_point(英语)http://fr.wikipedia.org/wiki/IEEE_754(法语)。

答案 1 :(得分:0)

根据C标准,有三种浮点类型:floatdoublelong double,所有浮点类型的值表示都是实现定义即可。

然而,大多数编译器都遵循二进制64格式,如IEEE 754标准所规定。

此格式包含:

  • 1个符号位
  • 11位指数
  • 尾数52位

要查找double可以容纳的最大值,您应该检查标题DBL_MAX中定义的<float.h>。对于使用二进制64 IEEE 754标准的实现,它将大约为1.8×10 308

答案 2 :(得分:0)

64位浮点IEEE数的位模式中有一个指数。在Python中,我计算以下内容:

>>> import numpy as np
>>> 2**(-52) == np.finfo(np.float64).eps
True
>>> np.finfo(np.float64).max
1.7976931348623157e+308
>>> (2-2**(-52)) * 2**(2**10-1)
1.7976931348623157e+308
>>> (2-2**(-52)) * 2**(2**10-1) == np.finfo(np.float64).max
True

所以它有点超过10 ^ 308。 &#34; 2 **(2 ** 10-1)&#34;是指数部分。另请参阅https://en.wikipedia.org/wiki/Double-precision_floating-point_format