计算Java Double(5)的最大值?

时间:2013-09-13 12:16:36

标签: java floating-point

长时间计算这个值很容易:

对于n-1的幂,它只是2,而不是-1.n是该类型中的位数。很长一段时间,这被定义为64位。因为我们也必须使用代表负数,我们使用n-1而不是n。因为必须考虑0,我们减去1.所以最大值是:

MAX = 2^(n-1)-1

对于双重来说,等同的思维过程是什么:

Double.MAX_VALUE

来了

1.7976931348623157E308

4 个答案:

答案 0 :(得分:4)

double的最大有限值是hexadecimal format0x1.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