[英]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.