首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >硬件RNG -如何使用?

硬件RNG -如何使用?
EN

Stack Overflow用户
提问于 2010-07-21 00:15:19
回答 3查看 274关注 0票数 1

好了,我刚刚拿起了一个硬件RNG,它包含一些简单的函数,如下所示:

代码语言:javascript
复制
GetRandomBytes(UInt Length,out object Array)
GetRandomDoubles(UInt Length,out object Array)

这些函数似乎很好地解释了自己,如何有效地使用这些函数来生成某个范围内的数字?

更多信息来自我们找到的一些文档,

代码语言:javascript
复制
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).
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-26 00:21:46

要获得给定范围内的随机int,可以使用硬件提供的GetRandomDouble函数,并缩放该值以适合所需的范围。最大值是独占的,因为底层的双精度范围[0,1]是半开放的。

代码语言:javascript
复制
int GetRandomInt(int min, int max) {
   double d = randHardware.GetRandomDouble();
   return ((max-min)*d)+min;
}
票数 2
EN

Stack Overflow用户

发布于 2010-07-21 00:19:09

如果我在没有任何其他帮助或指示的情况下拥有这些函数,我会做的第一个尝试是这样的(只需查看签名):

代码语言:javascript
复制
uint length = 20;
object array;
GetRandomBytes(length, out array);

然后,我将尝试对其进行调试,并在调用该函数后查看array的实际类型。看一下函数的名称,我会假设为byte[],所以我会强制转换:

代码语言:javascript
复制
byte[] result = (byte[])array;

就范围而言,这些函数签名远不是自解释的。也许是length参数?

还要注意的是,在C#中没有UInt这样的东西。有System.UInt32uint,这是一条捷径。

票数 0
EN

Stack Overflow用户

发布于 2010-07-21 00:21:42

注意:这使用了包含范围。你可能想要独占的max,这是很典型的。显然,这应该根据您的需要进行修改。

假设你得到了一个随机的双倍

代码语言:javascript
复制
public int getIntInRangeFromDouble(int min, int max, double rand) {
    int range = max-min+1;
    int offset = (int)(range*rand);
    return min + offset - 1;
}

你可以通过使用你的随机替身来应用这个方法

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3292069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档