2014-05-16 29 views
1

隨機浮點數如何生成100個隨機量float10.1之間-1-0.1之間的主要distriburion至(90%浮點數的必須-0.10.1之間)。 目前我使用這不正是我想要生成在C#

for (int counter = 0; counter < 100; counter++) 
{ 
    randomnum = 0f; 
    randomnum = Convert.ToSingle(randomvalues.NextDouble()/10); 
    storerandomvalues1[counter] = randomnum; 
} 

任何想法?

+0

你想在該範圍之外進行什麼樣的分配?你想在-0.1至0.1之間均勻分佈嗎?這裏我們需要更多的信息。 –

+0

你有什麼問題? – Sayse

+0

你是否想要像正常分佈,甚至每個子範圍內的分佈? –

回答

3

這應該工作。它會生成一個隨機數,以選擇您是否在-0.1,0.1範圍內,然後是第二個隨機數,並將其擴展到您想要的實際範圍。您可以只使用一個隨機數double,但這樣會更容易讓代碼錯誤,難以閱讀(所有這些都只是爲了提高性能)。

for (var counter = 0; counter < 100; counter++) 
{ 
    int selector = randomvalues.Next(10); // 0 <= selector < 10 
    double randomnum; 
    if (selector < 9) 
    { 
     randomnum = randomvalues.NextDouble() * 0.2 - 0.1; 
    } 
    else 
    { 
     randomnum = randomvalues.NextDouble() * 1.8 - 0.9; 
     randomnum += Math.Sign(randomnum) * 0.1; 
    } 
    storerandomvalues1[counter] = (float)randomnum; 
} 
-3

試試這個,它應該工作...

Random rnd = new Random(); 
    for (int counter = 0; counter < 100; counter++) 
    { 
     storerandomvalues1[counter]=(2*rnd.NextDouble())-1; // Exact Sample() is protected so u can use NextDouble() 
    } 
+2

這忽略了正常分佈的請求「-0.1和0.1之間90%的數字」 –

+0

是不是'Sample()'標記爲'protected'? http://msdn.microsoft.com/en-us/library/system.random.sample.aspx –

+0

馬你explian它是如何工作的? – user3585203

-1

使用日誌函數,生成1到10之間的浮點數,然後取結果的日誌基數爲10。然後隨機更改標誌。

+0

你對浮游物的分配建議是什麼,因爲對於均勻分配,它看起來不會低於0.1的90%。 – Rawling

+0

我在想,如果在步驟1中生成的隨機浮點數在1和10之間均勻分佈,那麼以10爲底的對數應導致介於1和9之間的所有值(應該是其中的90%)在0和.1之間,所有9和10之間的值應該在.1和.999999之間。 - 您可能必須少許擺弄這些數字才能使它正確對齊,但這個概念應該起作用。基本上你需要一個函數來重構一個具有特定形狀的分佈的值的均勻分佈。日誌功能是你所追求的形狀。 –

+0

我認爲,日誌與我們所追求的形狀相反。 1.3的對數基數10已經大於0.1。 – Rawling

0

正如我在評論中所說,有無數可能的解決方案。兩種可能的解決方案如下:

  1. A標準(又名高斯)爲0的平均值和0.06079標準 偏差分佈將有90%的-0.1和 0.1之間的結果,所以生成標準正常並乘以0.06079。從技術上講,你應該檢查絕對值是否超過1, ,但是這對應於在16西格瑪結果 - 這只是 不會發生。

  2. 然而,你可能不喜歡的解決方案,因爲它不會跨度 整個範圍的做法。一種變體,其將產生如前段所述的 X,並且如果X < -0.1,用均勻(-1,-0.1)代替 。同樣,如果X > 0.1,用統一(0.1,1)替換它 。

我實現了這兩個,產生100000個值,這裏是直方圖:

Histograms and quantiles for two approaches

注意的是,5個和日位數爲-0.0998和+ 0.09971,分別有效地將-0.1和+0.1抽樣誤差範圍內。