- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
代码:
int random = (rand() % 7 + 1)
if (random == 1) { } // num 1
else if (random == 2) { } // num 2
else if (random == 3 || random == 4) { } // num 3
else if (random == 5 || random == 6) { } // num 4
else if (random == 7) { } // num 5
基本上,我希望这些数字中的每一个都具有这些概率:1:1/72:1/73:2/74:2/75: 1/7
这段代码会给我正确的结果吗? IE。如果这是无限次运行,我会得到正确的频率吗?有没有更短的方法来做到这一点?
最佳答案
不,由于 rand() 的工作方式,它实际上略有偏差。特别是,rand 返回 [0,RAND_MAX] 范围内的值。假设地,假设 RAND_MAX 为 10。然后 rand() 将给出 0…10,它们将被映射(通过模数)到:
0 → 0
1 → 1
2 → 2
3 → 3
4 → 4
5 → 5
6 → 6
7 → 0
8 → 1
9 → 2
10 → 3
请注意 0-3 比 4-6 更常见;这是您的随机数生成中的偏差。 (你也加 1,但这只是将它移过来)。
RAND_MAX 当然不是 10,但也可能不是 7 的倍数(负 1)。很可能是二的幂。所以你会有一些偏见。
我建议使用 Boost Random Number Library它可以为您提供一个随机数生成器,该生成器可以无偏差地产生 1-7。另请参阅 bames53's answer using C++11 ,如果您的代码只需要面向 C++11 平台,这是执行此操作的正确方法。
关于c++ - 这会根据这些概率给我适当的随机数吗? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8316735/
这段代码在 Java 中的等价物是什么?我放了一部分,我对 I/O 部分感兴趣: int fd = open(FILE_NAME, O_WRONLY); int ret = 0; if (fd =
我正在尝试将维度为 d1,d2,d3 的张量 M[a1,a2,a3] reshape 为维度为 d2, d1*d3 的矩阵 M[a2,a1*a3]。我试过 M.reshape(d2,d1*d3) 但是
我是一名优秀的程序员,十分优秀!