【发布时间】:2021-02-06 14:01:14
【问题描述】:
我想使用异或移位生成随机数。我从维基百科尝试了这个例子,但它生成的随机数像
332584831 1855942593 -276217806 913087829 486807926
我想要介于 0 和 int 最大值之间的随机数。
这是我正在使用的代码示例:
int random_state =1234;
int randomNumber()
{
int result = random_state;
result ^= result << 13;
result ^= result >> 17;
result ^= result << 5;
random_state = result;
return result;
}
【问题讨论】:
-
考虑将生成的 1 位、2 位等数字的 频率。除非您对结果有偏见,否则大多数数字将是 9 或 10 位数字。有 10^8 个 8 位或更少位的正数,以及 2047483648
int9 位或 10 位的值。 -
对于这样的事情,您最好使用
unsigned int。这样每个位模式都是有意义的。或者,您可以在返回结果之前屏蔽符号位。这样你仍然可以在内部保留它。 -
如果种子不为零,则该生成器永远不会生成零。如果为零,则永远不会生成任何其他内容。