【问题标题】:c++ random number from 1 to 8 digits [duplicate]c ++从1到8位的随机数[重复]
【发布时间】:2013-11-12 07:04:21
【问题描述】:

我正在尝试从 1 - 99,999,999 生成一个随机数 但是,它从来没有达到那么高。我认为这与 int 的大小有关。

这是我正在尝试的

(1 + rand() % 99999999)

谢谢

【问题讨论】:

  • 什么平台/编译器?
  • RAND_MAX 很可能是 32k。使用<random>。反正好多了。
  • 我很确定int 可以包含更多内容。
  • 除了是一个糟糕的公式之外,我认为您不知道 RAND_MAX 对于您当前的实现的值吗?我认为这就是您将使用此机制看到的限制。 (如果您使用的是 VC++,它们的 32 位 RAND_MAX 仅为 0x7FFF 或 65535)。请参阅 C++ 11 标准库中的 <random>,并使用 that。它比 crap-legacy 接口更强大,并为您管理模数概率平衡。 std::random_device + &lt;&lt;choose your engine&gt;&gt; + std::uniform_int_distribution 一起做你想做的事。
  • 如果你可以访问 c++11 - channel9.msdn.com/Events/GoingNative/2013/… - 不要使用 rand。

标签: c++


【解决方案1】:

您的代码将不起作用,因为rand 返回的值具有最大值RAND_MAX

int rand (void);

生成随机数 返回 0 到 0 之间的伪随机整数 RAND_MAX。


RAND_MAX

rand 返回的最大值 这个宏展开为 整数常量表达式,其值为返回的最大值 通过 rand 函数。

这个值是依赖于库的,但保证至少是 32767 在任何标准库实现上。

【讨论】:

  • 因此,打印出 sizeof rand()sizeof RAND_MAX 将有助于了解您拥有的平台 int
  • @Phlip:sizeof RAND_MAX 什么都不会告诉你。
  • @Phlip 这个问题与数据类型大小无关。
【解决方案2】:

要生成一个介于 min 和 max 之间的随机数,并且它们应该是 long 数据类型,请使用:

long randamNum = rand()%(max-min + 1) + min;

(Includes max and min)

如需了解更多信息,请参阅Generating random integer from a range

【讨论】:

  • 我打赌你sizeof(long) == sizeof(int) 为 OP。 16 位整数不再那么常见了,我还没有知道 64 位整数的东西,但不是另一个。
  • 大声笑,不。 int 可以包含该号码。这不是问题。
  • 我看不出输入 long 甚至 long long 会改变什么
猜你喜欢
  • 2018-09-09
  • 1970-01-01
  • 2017-05-28
  • 2017-12-15
  • 1970-01-01
  • 2013-01-02
  • 2011-08-19
  • 2016-12-25
  • 1970-01-01
相关资源
最近更新 更多