c++ - 以一定概率运行代码

标签 c++ c

我是 C/C++ 新手。我试图让代码以一定的概率运行。

例如,我知道下面的代码可以使其以 1/2 的概率运行:

if (rand() % 2) {
    // runs 1/2 the time
}

但我不知道让它运行 1/4 (25%) 时间的最佳方法。当我输入:

if (rand() % 4) {
    // runs 1/4 the time
}

它的运行次数远远超过四分之一。我也尝试过:

if (rand() % 2) {
    // 1/2
    if (rand() % 2) {
        // 1/2 * 1/2 = 1/4
    }
}

这可行,但似乎不是最好的方法。另外,该方法仅适用于 1/4、1/8、1/16 等。我不知道如何执行 1/6 这样的示例。

最佳答案

您应该将 == 0 放入 if 语句中。

if (rand() % 4 == 0) {
    // runs 1/4 the time
}

rand() 返回一个正整数,该整数可能非常大。模运算符 % 执行除法并给出余数。例如,如果您取一个大数除以 4,则余数必须是 0、1、2 或 3。不能是其他任何值。通过检查余数是否等于 0,我们选择了四种可能情况之一。这意味着 25% 的可能性。

您的原始代码运行过于频繁的原因是 if 语句中的 rand() % 4 将除 0 之外的所有内容都视为 true。因此,如果余数为 1、2 或 3,则条件成立。换句话说,您的代码有 3/4 的时间在运行。

关于c++ - 以一定概率运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35191313/

相关文章:

c++ - 在 GCC 中欺骗预处理器 VARIADIC MACROS

c++ - 为什么某些 IDE 不缩进 switch 中的 case 语句?

c - 我想要的Yacc规则并没有减少

c - 迷宫求解器的递归最佳路径长度计算 - 错误

c - 从 X509 结构打开 SSL 提取证书到 char 数组

C++ lambda,按值调用成员函数比按引用调用更快

c++ - 协变返回类型和类型转换

c++ - 如果将本地数组乘以零,为什么计时会下降?

c++:如何优化IO?

c++ - conio.h 和 linux 问题