创建真正的随机数[重复]

2024-03-11

可能的重复:
为什么我的随机数生成器在 C# 中不是随机的? https://stackoverflow.com/questions/932520/why-does-it-appear-that-my-random-number-generator-isnt-random-in-c
如何使用 C# 生成真正的(非伪)随机数? https://stackoverflow.com/questions/1234094/how-can-i-generate-truly-not-pseudo-random-numbers-with-c

我创建了一个骰子游戏,其中骰子基于百分位数 1-100。

public static void Roll()
{
    Random rand = new Random((int)DateTime.Now.Ticks);
    return rand.Next(1, 100);
}

但我不认为这是基于当前时间的真正随机。

If I do

for (int i = 0; i < 5; i++)
{
   Console.WriteLine("#" + i + " " + Roll());
}

它们都是相同的值,因为DateTime.Now.Ticks没有改变,它播种的数量相同。

我在想,如果种子由于当前时间而相同,我可以生成一个新的随机种子,但感觉不像是诚实的“重新滚动”

我应该怎么做才能尝试复制接近真实/诚实的掷骰子?我应该使用RNGCryptoServiceProvider类来生成卷?


DateTime.Now.Ticks分辨率只有约16毫秒 http://blogs.msdn.com/b/ericlippert/archive/2010/04/08/precision-and-accuracy-of-datetime.aspx,所以如果你创建一个Random在 16ms“时隙”内多次过载,它们都将被播种为相同的值,因此您将获得相同的序列。

初始化你的Random在你的循环之外,以便单个Random生成序列,而不是每次在循环内创建它,这可能会导致Randoms被播种为相同的值,因此产生相同的序列。

Update

我之前的观点是默认构造函数已初始化RandomCPU 滴答数不正确,默认构造函数实际上使用环境.TickCount http://msdn.microsoft.com/en-us/library/system.environment.tickcount.aspx这是:

一个 32 位有符号整数,包含自上次启动计算机以来经过的时间量(以毫秒为单位)。

其分辨率仍然较低。如果您创建多个实例Random它们可以快速连续地在同一时间段内轻松创建,因此具有相同的种子值,并创建相同的序列。创建单个实例Random并使用它。

Update

除了您的评论之外,如果您希望跨多个线程生成随机序列,请参阅以下 Jon Skeet 文章,其中讨论了线程安全包装器:

https://codeblog.jonskeet.uk/2009/11/04/revisiting-randomness https://codeblog.jonskeet.uk/2009/11/04/revisiting-randomness

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建真正的随机数[重复] 的相关文章

随机推荐

  • Oracle“创建表为”空值

    如果您使用 create as 创建一个 Oracle 表 其中某个字段为空 您将收到错误 ORA 01723 不允许零长度列 查询示例 create table mytable as select field a null brand n
  • 架构 i386 的重复符号[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • jQuery 背景位置动画

    我创建了一个图像 它基本上是由 3 个图像组成的 CSS 精灵 它的大小是 278x123 所以它们基本上是 3 个 278x41 的图像 我想做的是通过改变背景位置来制作动画 我尝试了很多方法 我的一个不太有效的解决方案如下 var sl
  • Java/Mysql..SQLException:表必须至少有 1 列 SQLState:42000 VendorError:1113

    我有一个连接到数据库的应用程序 如果名称尚不存在 则创建一个表 并添加新的注册用户信息 以便我可以将密码散列到我的登录框架 并将它们与数据库进行匹配也将被散列 目前我有以下错误代码 SQLException A table must hav
  • 用类隐藏

    我确信这真的很简单 但这对我来说不起作用 我编写了一个表单 允许用户使用标签从列表中选择一个月
  • Python/WebApp Google App Engine - 测试标头中的用户/通行证

    当您像这样调用网络服务时 username test12 password test34 client httplib2 Http cache client add credentials username password URL htt
  • 检查 UTF-8 字符串在 Qt 中是否有效

    在 Qt 中 有没有办法检查字节数组是否是有效的 UTF 8 序列 看起来QString fromUtf8 http qt project org doc qt 5 0 qtcore qstring html fromUtf8默默地抑制或替
  • jQuery UI 自动完成中的自定义属性问题

    我在使用 jQuery UI 的自动完成功能时遇到了自定义属性的问题 由于某些奇怪的原因 自动完成功能不允许我使用 make 或 id 属性ui item make or ui item id 但在设置为时工作ui item label H
  • Typescript:如何期望精确的类实例作为函数参数

    Code 考虑以下代码 一个基类 两个子类 以及一个采用一个子类的一个实例的函数 abstract class AbstractNumberHolder constructor private readonly value number g
  • 使用 Jackson 从 POJO 创建 JSON 模式时,从 JSON 模式中删除“id”

    如何去掉id字段 id urn jsonschema org gradle 人 来自使用 Jackson 创建的 JSON 模式 生成的模式 type object id urn jsonschema org gradle Person p
  • 未捕获的类型错误:未定义不是 WordPress 中的函数(匿名函数)[重复]

    这个问题在这里已经有答案了 我收到以下错误 这似乎是 Javascript 未解释 符号 未捕获的类型错误 未定义不是函数 main js 1 匿名函数 main js 1 下面附加的是 main js 代码 这在某个时候工作得很好 我正在
  • BrowserSync Gulp 无法在 Chrome 中打开

    我尝试在 Chrome 中使用 BrowserSync 和 Gulp 在本地主机上打开我的网站 但它不起作用 默认情况下 它在 Firefox 中打开 一切正常 但是 当我更改 gulpfile js 中的参数以在 Chrome 中打开网站
  • iOS7 上的 TableViewCell 中不会显示复选标记

    我现在正在研究一个奇怪的问题 我的应用程序部署目标设置为 iOS6 因此我想同时支持 iOS6 和 iOS7 我只有一个简单的 UITableView 用户可以在其中选择首选的通知声音 代码为 UITableViewCell tableVi
  • 预测 git Push 中将推送多少数据

    我偶尔会使用昂贵的互联网连接 并且我想知道 至少大约 有多少数据将被推送到远程git push 事实上 我想我很喜欢我的评论 可以将其作为答案发布 当您推送时 git 会创建一个包含所有必需对象的包并将其上传到远程 这意味着我们正在寻找一种
  • 将 less 和 css 文件捆绑在一起

    我觉得捆绑应该用于将一堆一起使用的文件分组到一个交付给浏览器的文件中 这意味着对于我的根样式 我想做类似以下的事情 var bundle new StyleBundle Content style Include Content mysty
  • 网格/列表视图的概念如何将图像发送到 imageitem 类

    在我的项目中 我想加载 url 图像并在 gridview 活动中显示它们 但如何将这些图像加载到 gridview 适配器呢 所以我试图理解这个概念grid list view适配器 据我了解 在一个基本示例中 它包含 3 个活动 1 主
  • Doctrine 2 QueryBuilder 添加多个选择元素/参数?

    我仍在与 QueryBuilder 学说作斗争 因为当我想将另一个元素添加到选择表达式中时 我认为它无法正常工作 在这两种情况下 学说 queryBuilder gt getQuery gt getResults 返回一个数组 其中实体表示
  • 如何将不存在的链接重定向到 Angular 2 中的主页?

    如果用户输入不存在的链接 我希望页面重定向到主页 我该怎么做 谢谢 RouteConfig path home name Home component HomeComponent path about name About componen
  • for 循环和 apply 函数系列之间的性能差异是什么?

    人们常说 一个人应该更喜欢lapply over for循环 但也有一些例外 例如 Hadley Wickham 在他的 Advance R 书中指出的那样 http adv r had co nz Functionals html htt
  • 创建真正的随机数[重复]

    这个问题在这里已经有答案了 可能的重复 为什么我的随机数生成器在 C 中不是随机的 https stackoverflow com questions 932520 why does it appear that my random num