2012-11-15 36 views
1

給定一個隨機數發生器r()其中用於0 <= x <= 1p(x) = 0產生(僞)隨機double在區間[0,1]具有均勻密度,即p(x) = 1別處,創建一個隨機數發生器r(a,b)其生成double在區間[a,b]與密度p(x) = 1/(b-a)a <= x <= b改變間隔

+0

可能重複:如果不考慮關於密度(或假定[0,1]是一個無限的範圍),它可以用一個單一的隨機變量進行一個給定的範圍](http://stackoverflow.com/questions/446153/generating-uniform-random-deviates-within-a-given-range) –

+0

鏈接的問題只考慮整數。 – bountiful

+0

爲什麼精心設計的答案?它不像'a +(b - a)* r()'那麼簡單。我錯過了什麼? –

回答

0

我相信(並已測試),這會產生均勻的分佈。

r(a,b) = ((r * b) mod (b-a)) + a 

但有另一個更明顯的方式?

是:

r(a, b) = r*(b-a) + a 
+0

+1不,這是明顯的,因爲它在算術:) – dasblinkenlight

+0

這也是不正確的。它不會在[b-1,b)中生成數字 – amit

+0

應該是(... mod(b-a + 1))...? – bountiful

0

如果您還想維持生成的數量密度(同時考慮double不是實數):

r(a,b) = (r1*(b-a) + a) + r2 

第一個表達式生成範圍[數字a,b-1],而最後一個生成小數。

注:這個回答假設ba是整數 - 的想法站和小的修改,如果情況並非如此。

PS /編輯:內[生成均勻隨機偏離的

r(a,b) = r*(b-a) + a 
+1

但是如果'r1 = 1'呢?然後'r(a,b)> a'如果'r2!= 0' – bountiful