3

RNGCryptoServiceProvider は Random() よりも「安全」(高品質の乱数を生成する)であるため、使用して感じました。パフォーマンスは問題ではありません。しかし、最後の桁を読み取る代わりに、その前に 0 または 1 をいつ追加するかを何らかの方法で決定します。より良い (より正確な) 方法はありますか?

byte[] data = new byte[4];
rng.GetBytes(data);
int value = BitConverter.ToInt32(data, 0);
Console.WriteLine(value);
4

3 に答える 3

0

それは簡単です:

static int getnum15(RNGCryptoServiceProvider RngCsp)
{
    byte[] p=new byte[1];
    do {
        RngCsp.GetBytes(p);
    } while (p[0]==255);
    return(p[0]%15);
}

256 mod 15=1 であるためです。それで

RNGCryptoServiceProvider rngCsp=new RNGCryptoServiceProvider();
for (int i=0;i<30;i++)
    Console.WriteLine(getnum15(rngCsp));
于 2018-11-27T16:02:21.760 に答える
-2

RNGCryptoServiceProvider で数値を取得する方法はありません。これは算術を目的としていないためです。暗号化では、単語とバイトを扱います。算術目的で別の RNG が必要な場合は、別のライブラリを選択してください。

于 2013-05-09T12:12:41.830 に答える