好的,我刚拿起硬件RNG,它包含一些简单的功能,如下所示,
GetRandomBytes(UInt Length,out object Array)
GetRandomDoubles(UInt Length,out object Array)
这些函数似乎很好地解释了,如何有效地使用这些函数来生成一定范围之间的数字?
我们发现的一些文档的更多信息,
GetRandomByte
Return a single byte containing 8 random bits.
GetRandomWord
Return an unsigned integer containing 32 random bits.
GetRandomDouble
Returns a double-precision floating point value uniformly
distributed between 0 (inclusive) and 1 (exclusive).
GetRandomBytes
GetRandomWords
GetRandomDoubles
Fill in an array with random values. These methods all take
two arguments, an integer specifying the number of values
to return (as an unsigned long integer), and the array to
return the values in (as a COM Variant).
答案 0 :(得分:2)
答案 1 :(得分:0)
如果我没有任何其他帮助或指示,那么第一次尝试我会做的就是这个(只看一下签名):
uint length = 20;
object array;
GetRandomBytes(length, out array);
然后我将尝试调试它,并在调用函数后查看array
的实际类型。看一下函数的名称,我假设byte[]
,所以我会抛出:
byte[] result = (byte[])array;
就范围而言,这些功能签名远非自我解释。也许是length
参数?
另请注意,在C#中没有UInt
这样的东西。 System.UInt32和uint是一种捷径。
答案 2 :(得分:0)
注意:这使用包含范围。您可能需要独占最大值,这是典型的。显然,这应该根据您的需要进行修改。
假设你得到一个随机的双重
public int getIntInRangeFromDouble(int min, int max, double rand) {
int range = max-min+1;
int offset = (int)(range*rand);
return min + offset - 1;
}
您可以通过随机双打并执行
来应用此功能int[] getIntsFromRandomDoubles(int min, int max, double[] rands) {
int[] result = new int[rands.length];
for(int i = 0; i < rands.length; i++) result[i] = getIntInRangeFromDouble(min,max,rands[i]);
return result;
}