创建一个小于最大给定值的随机数

2023-12-07

我想做的是创建一个函数,它接受一个参数,该参数是随机生成应创建的数字的限制。我经历过一些生成器只是一遍又一遍地重复生成的数字。

如何制作一个不连续返回相同数字的生成器。有人可以帮助我实现我的目标吗?

int randomGen(int max)
{
  int n;      
  return n;
}

获得均匀分布结果的最简单方法rand是这样的:

int limited_rand(int limit)
{
  int r, d = RAND_MAX / limit;
  limit *= d;
  do { r = rand(); } while (r >= limit);
  return r / d;
}

结果将在范围内0 to limit-1,并且只要这些值都以相同的概率出现0通过RAND_MAX全部与原始概率相同rand功能。

我使用的其他方法,例如模运算或无循环除法,介绍bias。通过浮点中间体的方法并不能避免这个问题。从以下位置获取良好的随机浮点数rand至少同样困难。如果您想要随机浮点数,那么使用我的整数函数(或其改进)是一个很好的起点。

Edit: 这是我对偏见的解释。认为RAND_MAX是 7 并且limit是 5。假设(如果这是一个好的rand函数)表明输出 0, 1, 2, ..., 7 的可能性都是相等的。服用rand()%5会将 0、1、2、3 和 4 映射到自身,但将 5、6 和 7 映射到 0、1 和 2。这意味着值 0、1 和 2 弹出的可能性是值 3 和 4。如果您尝试重新缩放和除法,例如使用rand()*(double)limit/(RAND_MAX+1)这里,0和1映射到0,2和3映射到1,4映射到2,5和6映射到3,7映射到4。

这些影响在一定程度上会因RAND_MAX,但他们可以回来,如果limit很大。顺便说一句,正如其他人所说,线性同余 PRNG(典型的实现rand),低位往往表现得非常糟糕,因此在以下情况下使用模运算limit是 2 的幂可以避免我描述的偏差问题(因为limit通常会分裂RAND_MAX+1在这种情况下是均匀的),但是你会遇到一个不同的问题。

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

创建一个小于最大给定值的随机数 的相关文章

随机推荐

  • DOM 解析 Facebook 墙

    我正在尝试解析来自公共 Facebook 粉丝页面墙的消息 但它返回一个空白页面 source http www facebook com sk wall filter 2 libxml use internal errors TRUE d
  • 将 HTML 转换为 Word 文档

    如何转换页面HTML to word文档 例如我有一个网页需要保存在word文档中 如何将 HTML 页面转换为 Word 文档 以及如何在word文档中插入分页符 下面您可以找到一个将 html 转换为 word 的示例 它工作正常 我已
  • System.out.printf() 语句是异步的吗?

    我正在打印信息以使用可重入锁测试线程 我正在使用语句 new ReentrantLock true 创建公平锁 在我使用锁的对象方法之一中 我使用的是方法 例如 method for int n 0 n lt 3 n System out
  • 如何用Python从计算机上的目录加载图像

    你好 我是 python 新手 我想知道如何将计算机上的目录中的图像加载到 python 变量中 我在磁盘上的文件夹中有一组图像 我想循环显示这些图像 您可以使用 PIL Python 图像库 http www pythonware com
  • aws lambda 函数可以向专用网​​络中的终端节点发送消息吗?

    我想知道 lambda 函数是否可以访问我的专用网络中且未暴露于互联网的端点 我正在考虑使用 AWS Direct Connect 在我的专用网络 本地 和 AWS 区域之间建立 VPN 但我找不到任何有关如何在 lambda 函数上配置
  • 如何使 JavaScript 变量完全不可变?

    我听过类似的问题 但没有得到我想要的答案 我不计算 const 因为 1 它实际上并没有使其不可变 它只是使引用不可变 2 它扰乱了范围 我也希望它在块之外工作 3 并非所有浏览器都支持它 const hello hello world h
  • install4j:在同一台计算机上自动执行 Windows 扩展验证代码签名和 Apple 公证?

    我们正在考虑切换到扩展验证 EV 代码签名证书 为了完全自动化 Apple 的公证 我们必须将构建机器切换为 Mac mini 阅读EV代码签名流程 and 如何实现自动化 出现了两个问题 硬件令牌 HSM 的密码输入可以自动化吗 The
  • 如何让 Jenkins 仅在测试失败数量发生变化时才使构建失败?

    我们定制了一个产品 其中包括他们自己的 phpunit 测试套件 在 Jenkins 中 我设置了两个作业 第一个作业运行我们自己的测试套件 涵盖我们的自定义设置 第二个作业运行现有的核心单元测试 核心单元测试并非设计用于在定制版本上运行
  • 输入type=密码,不要让浏览器记住密码

    我记得看到过一种方法
  • CSS 盒模型属性排序约定

    如果您想知道以什么顺序输入 CSS 属性 例如border padding font family等 两种常见的方法似乎是按字母顺序排列和盒模型 看 CSS 属性的常规顺序 不要将其与选择器混淆 id class hover tagname
  • 在服务中保持 pubnub 订阅处于打开状态是最佳选择吗

    我可以选择使用 GCM 进行推送通知 但我决定在后台运行的服务中保留打开的 pubnub 订阅 这是一个聊天界面 每个用户都在后台保持其频道打开 并且仅在聊天屏幕打开时发布到目标频道 这样做有什么缺点 如果这不是最佳方法 我可以做些什么来优
  • 使用 NSXMLParser 解析 RSS 时访问特定子元素

    亲爱的学者们 我正在尝试使用以下项目元素结构解析 RSS 提要
  • 未初始化的 int 值始终相同 (C++)

    鉴于此代码 void main int x cout lt lt x system pause 当我调试这段代码时 它总是打印 858993460A 我读到这是因为 VS 将其设置为统一变量的默认值 但我还读到 在发布模式下 这应该获得随机
  • 闪亮仪表板的选项卡相关输入

    我面临闪亮仪表板的问题 我正在尝试创建一个简单的仪表板 左侧有两个 tabItems 每个 tabItem 都有其特定的一组控件和一个绘图 但我可能缺少服务器端的某些内容来将输入链接到选项卡 因为第二个选项卡的控件行为异常 任何帮助将非常感
  • 将 datetime2 数据类型转换为smalldatetime 数据类型导致值超出范围。\r\n该语句已终止[重复]

    这个问题在这里已经有答案了 我制作了一个小型 MVC4 应用程序 并在本地 SQL 2012 服务器上制作了数据库 导入 了我 2012 年的数据 将其作为 sql 2008 的生产移动到我便宜的共享主机上 一切正常 对非 aspmembe
  • 字符的 CSS 选择器

    我有一个带有文本的跨度 span class magic a sample text span 是否可以创建选择器来更改每个符号 a 或 的颜色 magic
  • sql - 查询插入列值(如果该列中不存在)[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 sql 查询插入列值 如果该列中不存在该值 嗯 你想要一个新的行吗 在这种情况下
  • docker与windows和linux容器共享网络

    我想在同一网络中连接一个 Windows 和一个 Linux 容器 首先 我创建一个网络 Docker for Windows 设置为 Windows 容器 docker network create driver nat mynet 网络
  • Mercurial — 恢复到旧版本并从那里继续

    我在本地使用 Mercurial 进行项目 这是唯一的存储库 无需向 从其他任何地方推 拉 迄今为止 它有一个线性的历史 然而 我现在正在做的事情我现在意识到是一种糟糕的方法 我想回到开始之前的版本并以不同的方式实现它 我有点困惑branc
  • 创建一个小于最大给定值的随机数

    我想做的是创建一个函数 它接受一个参数 该参数是随机生成应创建的数字的限制 我经历过一些生成器只是一遍又一遍地重复生成的数字 如何制作一个不连续返回相同数字的生成器 有人可以帮助我实现我的目标吗 int randomGen int max