当前位置: 首页 > 知识库问答 >
问题:

为什么2^31不能被n整除?

孔建柏
2023-03-14

算法有点棘手。它拒绝会导致分布不均匀的值(因为2^31不能被n整除)。一个值被拒绝的概率取决于n。最坏情况为n=2^30+1,拒绝概率为1/2,循环终止前的预期迭代次数为2。

算法:

int bits, val;
do {
    bits = next(31);
    val = bits % n;
} while (bits - val + (n-1) < 0);

代码测试n>2^30bits>n的情况。然后设置最高有效位,并将条件中的结果变为负值。

    null

共有1个答案

陶腾
2023-03-14

这是一个问题,只要你想从一个较大范围内的随机数生成一个较小范围内的随机数,其中较小范围的大小不能被较大范围内的大小整除。

如果你有一个0到9(含)之间的随机数,想把它改成0到3之间的随机数,如果你只做了n%4,你有3/10的几率得到0(0,4或8)%4,但有2/10的几率得到3(3或7)%4。最简单的方法就是重新生成大于7的随机数。

最糟糕的情况是,小范围的大小是大范围的一半多一点,所以你必须重新生成一半多一点的时间。

 类似资料:
  • 问题内容: java.util.Random源代码的第294行说 为什么是这样? 问题答案: 该描述并不完全准确,因为0不是2的幂。更好的说法是 当n是2的幂或2的幂的负数或零时。 如果n是2的幂,则二进制中的n是单个1,后跟零。-n为2的补数是倒数+ 1,因此位排成一行 要了解其工作原理,请将二进制补码视为逆+ 1。 因为当您添加一个得到两个的补码时,您会一直进行到一个。 如果n不是2的幂,则结

  • 我正在尝试编码一个。mp4视频来自使用FFMPEG的一组帧,使用libx264编解码器。 这是我正在运行的命令: 我有时会遇到以下错误: 在搜索了一段时间后,这个问题似乎与缩放算法有关,可以通过添加-vf参数来解决。 然而,在我的情况下,我不想做任何缩放。理想情况下,我希望保持尺寸与框架完全相同。有什么建议吗?是否存在h264强制执行的某种纵横比?

  • 问题内容: 为什么只有知道文件的inode却不搜索链接到该inode的文件却无法访问文件?到文件的硬链接只包含名称和数字,告诉您在哪里可以找到有关该文件的所有 真实 信息的索引节点。当我被告知没有用户模式直接使用inode编号打开文件时,我感到很惊讶。 对于系统而言,这似乎是一种无害且有用的功能。为什么不提供? 问题答案: 某些操作系统 确实 具有该功能。例如,OS X需要它来支持Carbon F

  • 我正在尝试测试我的贝宝沙箱帐户中的经常性付款。我跟踪了这个链接https://developer.paypal.com/webapps/developer/docs/classic/express-checkout/ht_ec-recurringpaymentprofile-curl-etc/ 我试了很多次,贝宝只显示这个消息。我怎样才能为我的沙箱帐户实现不出错的重复支付?

  • 我试图降低视频的维度: FFMPEG(libx264)“不能被2整除的高度”

  • 你好,谢谢你花时间处理我的问题。首先让我向你介绍我的虚拟/培训项目。下面列出的类应该代表MVC模型(模型、视图、控制器)之后的程序。运行主类时,会打开FileChooser,从中可以选择. csv-File,其中包含保存为String[][]的信息。这个String[][]然后在视图类中可视化为JTable。这个JTable是带有BorderLayout的JFrame中的JPanel的一部分。中心