簡體   English   中英

跨平台隨機數生成器

[英]Crossplatform random number generator

當您需要能夠從種子生成隨機數,並保證它在不同版本的 .NET Framework 和 Mono Framework 以及不同架構(x86、x64)中是相同的數字時,您會怎么做?做?

我目前正在考慮將數百萬個隨機字節存儲在一個文件中,以作為這個問題的臨時解決方案,但我認為可能有更好的方法(希望不會太復雜)。

如果您需要一個真正可移植的實現,最好的選擇可能是只使用自定義隨機數生成器,例如這個Mersenne Twister 實現Colin Green 的 Fast Random Number Generator 通過控制實現,您可以保證在任何平台上給定相同的種子,您將獲得相同的結果。

還有通過 NuGet 提供的Troschuetz.Random庫,它提供了幾種“標准”隨機化方法,這些方法可能也適用於其他平台:

完全托管的庫,提供各種隨機數生成器和分布。 更准確地說,這個庫提供了 7 個生成器(ALF、MT19937、標准、XorShift128、NR3、NR3Q1、NR3Q2) 、6 個離散分布(伯努利、二項式、分類、離散均勻、幾何、泊松)和 21 個連續分布(如正態、指數、 ChiSquare、Beta 等); 此外,它提供了一個類似於 Python 提供的隨機類 (TRandom)。

這個庫背后的所有努力都是由 Stefan Troschütz 完成的,並由 Alessio Parma 在這個 .NET 包中進行了優化。

從 Wiki 得到以下代碼: http : //en.wikipedia.org/wiki/Random_number_generation

m_w = <choose-initializer>;    /* must not be zero */
m_z = <choose-initializer>;    /* must not be zero */

uint get_random()
{
    m_z = 36969 * (m_z & 65535) + (m_z >> 16);
    m_w = 18000 * (m_w & 65535) + (m_w >> 16);
    return (m_z << 16) + m_w;  /* 32-bit result */
}

這應該是你需要的: http : //en.wikipedia.org/wiki/Linear_congruential_generator

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM