2016-05-13 72 views
1

我想分配一個系統,我需要使用Random Java類中的nextGaussian()。我發現打破獨特種子的數據依賴性的唯一方法是使用多個種子,從而創建多個隨機數。創建新的隨機vs使用相同的隨機

讓我們忘記我的問題的上下文,我只想知道如何使用多個隨機實例進行歸一化,而不是僅使用一個實例。換句話說...... genNewgenSame相比有多大的隨機性?

代碼:

public double[] genNew(int lim, long seed) 
{ 
    double[] rand = new double[lim]; 
    for(int i = 0; i < lim; i++) 
    { 
     //A random for each iteration. 
     Random r = new Random(i*seed); 
     rand[i] = r.nextGaussian(); 
    } 
    return rand; 
} 

public double[] genSame(int lim, long seed) 
{ 
    double[] rand = new double[lim]; 
    //A random for all iterations 
    Random r = new Random(seed); 
    for(int i = 0; i < lim; i++) 
     rand[i] = r.nextGaussian(); 
    return rand; 
} 

我得到的結果是非常不同的,當我申請兩個數組我的代碼。我無法解釋爲什麼。

編輯:我知道這不會產生相同的陣列,它只是使用的標準化隨機量很大ammount的計算數字時,這兩個數字應該接近(因爲正常化),但他們不是。

+1

不應使用RNG生成一個數字,它們在多次使用時會產生更好的結果。你檢查過'genNew'產生的值嗎? –

+0

是的,價值吸引。這就是爲什麼我想知道我是否做錯了什麼... –

+0

爲什麼值「吸」?你爲什麼認爲他們不是隨機的?只要你使用'genSame()'方法,它們應該是非常隨機的,儘管計算機不可能真的是隨機的,但可以非常接近。 [看看這裏有關隨機數字的更多信息](https://blog.malwarebytes.org/cybercrime/2013/09/in-computers-are-random-numbers-really-random/) – Draken

回答

0

我找到了一種方法來生成準確的數字並打破數據依賴性。

我不明白爲什麼這個因素有效,但它確實如此。我偶然發現它,並且已經完成了幾百萬次測試,並繼續工作而沒有失敗。

如果有人理解爲什麼這個工程,請告訴:

Random r = new Random(seed * 43112609) 

這個數字是一個素數。這是我唯一的線索,但仍然無法理解它爲什麼起作用。