しかし、このRandomというクラスは、Donald E. Knuth の乱数ジェネレータ減算アルゴリズムに基づいています。・・・アルゴリズムの詳細はよくわかりませんが、なんでもある演算とシード値(引数)を使って擬似的な乱数を生成するようです。
擬似乱数であるため、完全ではないようで、完全な乱数?するには、.NET Frameworkでは、RNGCryptoServiceProviderというクラスが用意されています。
このクラスは、乱数ジェネレータ(Random Number Generator) の実装らしく、Randomよりは正確な乱数を生成することができるようです。で、使ってみました。コードはこんな感じ。
private void button1_Click(object sender, EventArgs e)
{
//using System.Security.Cryptography;
//32bitの数値用に4byteバッファを確保
byte[] bytes = new byte[4];
//暗号乱数ジェネレータでバイト列を生成
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(bytes);
//byte列を数値に変換
textBox1.Text = BitConverter.ToInt32(bytes, 0).ToString();
}
{
//using System.Security.Cryptography;
//32bitの数値用に4byteバッファを確保
byte[] bytes = new byte[4];
//暗号乱数ジェネレータでバイト列を生成
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(bytes);
//byte列を数値に変換
textBox1.Text = BitConverter.ToInt32(bytes, 0).ToString();
}