我对双精度有一个非常愚蠢的问题。我已经读过,在64位上表示了一个double(例如在C中),但我还读到可以用double表示的最大值大约是10 ^ 308。 10 ^ 308如何只用64位表示?
答案 0 :(得分:3)
它不会保存10 ^ 308数字的308位数。双精度数保存指数和有限数量的数字。
有关内存中浮点编码的详细说明,请参阅https://en.wikipedia.org/wiki/IEEE_floating_point(英语)http://fr.wikipedia.org/wiki/IEEE_754(法语)。
答案 1 :(得分:0)
根据C标准,有三种浮点类型:float
,double
和long double
,所有浮点类型的值表示都是实现定义即可。
然而,大多数编译器都遵循二进制64格式,如IEEE 754标准所规定。
此格式包含:
要查找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