长时间计算这个值很容易:
对于n-1的幂,它只是2,而不是-1.n是该类型中的位数。很长一段时间,这被定义为64位。因为我们也必须使用代表负数,我们使用n-1而不是n。因为必须考虑0,我们减去1.所以最大值是:
MAX = 2^(n-1)-1
对于双重来说,等同的思维过程是什么:
Double.MAX_VALUE
来了
1.7976931348623157E308
答案 0 :(得分:4)
double
的最大有限值是hexadecimal format,0x1.fffffffffffffp1023
,表示数字刚好低于2的数字(1.ff ...以十六进制表示)乘以2 < SUP> 1023 。以这种方式编写时,很容易看出它是由尽可能大的significand和最大可能的指数组成的,其方式与您在问题中构建最大可能long
的方式非常相似
如果你想要一个所有数字都用十进制表示法编写的公式,这里有一个:
Double.MAX_VALUE =(2 - 1/2 52 )* 2 1023
或者,如果您更喜欢使用明确Double.MAX_VALUE
为整数的公式:
Double.MAX_VALUE = 2 1024 - 2 971
答案 1 :(得分:0)
根据IEEE标准754,双打(和浮点数)在内部表示为二进制分数 因此不能完全代表小数部分:
所以没有等效的计算。
答案 2 :(得分:0)
只需看看documentation即可。基本上,MAX_VALUE
的{{1}}计算使用不同的公式,因为可以用64位表示的有限数量的实数。有关广泛的理由,您可以参考this article有关数据表示的信息。
答案 3 :(得分:0)
如果我们看一下Oracle提供的表示:
0x1.fffffffffffffp1023
或
(2-2^-52)·2^1023
我们可以看到
fffffffffffff
是13个十六进制数字,可以表示为52个二进制数字(13 * 4)。
如果每个都设置为1(F = 1111),我们获得最大小数部分。
小数部分总是52位,由
定义http://en.wikipedia.org/wiki/Double-precision_floating-point_format
1位用于签名
,其余11位组成指数。
因为指数必须是正数和负数且它必须代表0,所以它的最大值可以是:
2^10 - 1
或
1023