我寫了一個函數A,在這個函數裏面有一段代碼。Math Random Coin Toss
rnd.Next(1,3);
如果我運行我的A函數100次,並打印出結果,結果是不現實的,例如它總是勝利或總是輸。所以隨機函數是有問題的。我需要一個真實的隨機功能。
如何實現這一目標?
我寫了一個函數A,在這個函數裏面有一段代碼。Math Random Coin Toss
rnd.Next(1,3);
如果我運行我的A函數100次,並打印出結果,結果是不現實的,例如它總是勝利或總是輸。所以隨機函數是有問題的。我需要一個真實的隨機功能。
如何實現這一目標?
我猜你已經做了Random
一個典型的錯誤,你重新創建它每一次即:
Random rnd = new Random();
int toss = rnd.Next(1,3);
如果你這樣做,RND很可能每次從開始相同的種子,這就是爲什麼結果是嚴重歪斜。該解決方案可以是類似的東西:
// Let it be thread-safe
private static ThreadLocal<Random> s_Gen = new ThreadLocal<Random>(
() => new Random());
// Thread-safe non-skewed generator
public static Random Generator {
get {
return s_Gen.Value;
}
}
...
int toss = Generator.Next(1,3);
使用此
int i = rnd.Next(int.MaxValue) % 2;
然後有一個檢查是否i = 0
或i = 1
。
編輯是的,因爲提到Dmitry Bychenko沒有實例化每個新的Random
對象。
你能告訴我們其餘的代碼(你在哪裏運行'A'百次並收集結果)? – Douglas
請添加一段代碼讓我們來幫助你 – LittleSweetSeas
讓我猜,你每次都在函數裏面播種'rnd'嗎? –