我寫一個函數來生成Long.MIN_VALUE和Long.MAX_VALUE之間的隨機長整型值,但它總是返回Long.MIN_VALUE,爲什麼?隨機長總是最小值
public static long randomLong() {
return (long) (Math.random()*(Long.MAX_VALUE-Long.MIN_VALUE)+Long.MIN_VALUE);
}
謝謝你幫我
我寫一個函數來生成Long.MIN_VALUE和Long.MAX_VALUE之間的隨機長整型值,但它總是返回Long.MIN_VALUE,爲什麼?隨機長總是最小值
public static long randomLong() {
return (long) (Math.random()*(Long.MAX_VALUE-Long.MIN_VALUE)+Long.MIN_VALUE);
}
謝謝你幫我
的問題是,你的長期價值四溢。由於Long.MIN_VALUE
對於有符號長整數爲負,因此Long.MAX_VALUE-Long.MIN_VALUE
大於Long.MAX_VALUE
,因此在中間計算期間不適合長整數。
嘗試使用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
。 A double
的精確度不足以與Long.MIN_VALUE
相比增加非常小的內容,因此結果爲Long.MIN_VALUE
爲double
。
要檢索均勻分佈的隨機long
,請使用Random
類及其method nextLong()
。
// This Random object can be stored in the class for reuse
Random rnd = new Random();
然後:
return rnd.nextLong();
你認爲它應該返回,爲什麼? –
表達式中的數字溢出 – Andrew
我該如何解決它?當數字大於Long.MAX_VALUE時出現數字溢出?之前沒有這種類型的問題,我需要更多的信息 –