double的最大整数值

时间:2013-11-29 16:40:26

标签: java double

这是可以分配给Java double的最大整数值,并且仍然表现为整数值?我的意思是,它必须满足通常的条件

a + 1 > a;
a - 1 < a;

如果值足够大,即使a + 1000可能仍会a因为舍入误差。

我需要使用double作为计数器,并想知道可靠计数的上限在哪里。

3 个答案:

答案 0 :(得分:4)

  

我需要使用double作为计数器,并想知道可靠计数的上限在哪里。

我无法想象为什么你会使用double作为计数器来存储一个整数,但是这个限制是在八百万亿(2 ^ 53)的范围内。如果您使用long作为计数器,则限额为9亿亿美元。

答案 1 :(得分:4)

您要查找的号码是9,007,199,254,740,991,因为9,007,199,254,740,991 + 1 = 9,007,199,254,740,992只有9,007,199,254,740,992 + 1 = 9,007,199,254,740,992

我通过实验发现了以下代码段。

double a = 9.007199254E15;
while (a + 1 > a) {
    a += 1;
}
System.out.println(a);

鉴于您使用此值作为计数器,并且long的最大值为2^63 - 1 = 9.22E18(正如Peter指出的那样),似乎没有理由不使用long。

答案 2 :(得分:1)

如果按整数表示int,那么所有可能的int值都适合double,因为int被定义为32位有符号整数数量,并且{ {1}}的尾数大小为53位(double值适合其中)。另一方面,如果你的意思是int,那么情况会有所不同,因为long是64位有符号整数。

可表示的最大长值应该是2 53 - 1左右(没试过,所以可能是错误的)。