Java Long Min 和 Max 与文档中提到的不准确
Java Long Min and Max not exact as mentioned in docs
根据 java 文档,Long.MIN_VALUE
是 -2^63
,Long.MAX_VALUE
是 2^63 - 1
。
但是 Long.MIN_VALUE
实际值是 -2^63 - 1
而 Long.MAX_VALUE
值是 2^63
如果我这样计算的话:
long min = -(long) Math.pow(2, 63);
long max = (long) Math.pow(2, 63) - 1;
System.out.println(min);
System.out.println(max);
最小值和最大值之间的所有范围都相同,但实际值不同。我对上面代码的理解有误吗?
糟糕,是我检查的方式导致了错误的值。以下是我能想到的最简单的方法来验证 java.
中的 2 个幂值
long num = 1;
for(long count = 0; count < 63; count ++) {
num = num * 2;
}
System.out.println(num);
}
Math.pow
的 return 值为 double
。
double
只能精确表示所有整数值,最多为 2^53 - 1
,向下为 -2^53
,因为它只有 53 个尾数位。
错误只是在于您尝试检查这些值的方式。
根据 java 文档,Long.MIN_VALUE
是 -2^63
,Long.MAX_VALUE
是 2^63 - 1
。
但是 Long.MIN_VALUE
实际值是 -2^63 - 1
而 Long.MAX_VALUE
值是 2^63
如果我这样计算的话:
long min = -(long) Math.pow(2, 63);
long max = (long) Math.pow(2, 63) - 1;
System.out.println(min);
System.out.println(max);
最小值和最大值之间的所有范围都相同,但实际值不同。我对上面代码的理解有误吗?
糟糕,是我检查的方式导致了错误的值。以下是我能想到的最简单的方法来验证 java.
中的 2 个幂值long num = 1;
for(long count = 0; count < 63; count ++) {
num = num * 2;
}
System.out.println(num);
}
Math.pow
的 return 值为 double
。
double
只能精确表示所有整数值,最多为 2^53 - 1
,向下为 -2^53
,因为它只有 53 个尾数位。
错误只是在于您尝试检查这些值的方式。