随机长总是最小值
A random long is always the min value
我写了一个函数来生成一个介于 Long.MIN_VALUE 和 Long.MAX_VALUE 之间的随机 long 值,但它总是 return Long.MIN_VALUE,为什么?
public static long randomLong() {
return (long) (Math.random()*(Long.MAX_VALUE-Long.MIN_VALUE)+Long.MIN_VALUE);
}
谢谢你帮助我
问题是您的 long 值溢出了。因为 Long.MIN_VALUE
对于带符号的 long 是负的,所以 Long.MAX_VALUE-Long.MIN_VALUE
大于 Long.MAX_VALUE
因此在中间计算期间不适合 long。
尝试改用 nextLong:
public static long randomLong() {
Random ran = new Random();
return ran.nextLong();
}
由于溢出,Long.MAX_VALUE - Long.MIN_VALUE
的结果是-1
。该值乘以 Math.random()
,一个介于 0.0
和 1.0
之间的值。就是一个double
,Long.MIN_VALUE
加上-1.0
和0.0
之间的一个值,结果还是Long.MIN_VALUE
。与 Long.MIN_VALUE
相比,double
不够精确,无法添加如此小的内容,因此结果是 Long.MIN_VALUE
作为 double
.
要检索均匀分布的随机数 long
,请使用 Random
class 及其 method nextLong()
.
// This Random object can be stored in the class for reuse
Random rnd = new Random();
然后:
return rnd.nextLong();
我写了一个函数来生成一个介于 Long.MIN_VALUE 和 Long.MAX_VALUE 之间的随机 long 值,但它总是 return Long.MIN_VALUE,为什么?
public static long randomLong() {
return (long) (Math.random()*(Long.MAX_VALUE-Long.MIN_VALUE)+Long.MIN_VALUE);
}
谢谢你帮助我
问题是您的 long 值溢出了。因为 Long.MIN_VALUE
对于带符号的 long 是负的,所以 Long.MAX_VALUE-Long.MIN_VALUE
大于 Long.MAX_VALUE
因此在中间计算期间不适合 long。
尝试改用 nextLong:
public static long randomLong() {
Random ran = new Random();
return ran.nextLong();
}
由于溢出,Long.MAX_VALUE - Long.MIN_VALUE
的结果是-1
。该值乘以 Math.random()
,一个介于 0.0
和 1.0
之间的值。就是一个double
,Long.MIN_VALUE
加上-1.0
和0.0
之间的一个值,结果还是Long.MIN_VALUE
。与 Long.MIN_VALUE
相比,double
不够精确,无法添加如此小的内容,因此结果是 Long.MIN_VALUE
作为 double
.
要检索均匀分布的随机数 long
,请使用 Random
class 及其 method nextLong()
.
// This Random object can be stored in the class for reuse
Random rnd = new Random();
然后:
return rnd.nextLong();