2015-11-12 73 views
1

我有這樣的代碼產生0和無窮大之間的隨機雙Java中

,我試圖發送一個隨機雙到方法「好玩」

BL是雙等於1這裏

double inf=Double.POSITIVE_INFINITY; 
    double rand=inf*R.nextDouble(); 
    double myrand=fun(rand)*BL; 
    mylist.get(i).set_speed(myrand); 

這裏是「好玩」的方法

double fun(double v) 
{ 
    return ((pow(A,K)*exp((-1)*A*v)*pow(v,K-1))/(fact(K-1))); 
} 

但速度的輸出參數是ALW ays NaN

+0

Infinity在IEEE 754中定義;然而這並不意味着它是無限的價值。請參閱[關於IEEE 754雙精度的維基百科](https://en.wikipedia.org/wiki/Double-precision_floating-point_format) –

+3

不會將隨機生成的double乘以無窮大始終使該值爲無窮大?那不是打破了隨機目的? –

+0

數字的無限次數始終爲無窮 –

回答

1

嘗試改變這一行inf*R.nextDouble();Double.MAX_VALUE * R.nextDouble();如果您還需要從時間得到Double.POSITIVE_INFINITY時間,那麼你必須實施一個額外的if塊,並在一些情況下隨機返回Double.POSITIVE_INFINITY

2

據我所知,infinity無法通過double獲得。試試這個

double rand = R.nextDouble(Double.MAX_VALUE- 1); 

,將創建0和最大值之間的隨機雙爲雙

+2

nextDouble(); 不帶參數 –

1

要以積極的跡象,大於或等於0.0並且小於Double.MAX_VALUE得到雙重價值:

double r = Math.random()*Double.MAX_VALUE 

然後只需將結果傳遞給你的函數。

+0

這不會產生一個隨機雙倍數,然後將其乘以最大值,使其超過最大值? –

+1

不,因爲'Math.random()'總是返回一個介於0和1之間的數字。 – Clashsoft

+0

啊,很高興知道。那麼,@ Leet-Falcon,除非你編輯你的帖子,否則我不能刪除我的downvote。 –