c - 随机数发生器

tm1*_*tm1 15 c random

如何生成0到1之间的随机数?

Mar*_*iot 22

您可以使用stdlib.h生成伪随机数.只需包含stdlib,然后调用

double random_number = rand() / (double)RAND_MAX;
Run Code Online (Sandbox Code Playgroud)

  • 最重要的是,它很可能不公平(!)有许多实现,其中set [0.0,1.0]包含多个RAND_MAX元素.(_In C,集合[0.0,1.0]是可数有限集_) (3认同)
  • 作为参考,这将给出[0.0,1.0]中的值,即包括0.0和1.0. (2认同)

qrd*_*rdl 9

假设OP想要0或1:

srand(time(NULL));
foo = rand() & 1;
Run Code Online (Sandbox Code Playgroud)

编辑通过评论的启发:旧rand()的实现有一个缺陷-低位有高于序位短得多的时间,以便使用低阶位的这种实现是不好的.如果您知道您的rand()实现受到此缺陷的影响,请使用高位,如下所示:

foo = rand() >> (sizeof(int)*8-1)
Run Code Online (Sandbox Code Playgroud)

假设常规的每字节8位架构

  • 谁说`rand()`使用全部32位?MSVC上的`RAND_MAX`是0x7fff,例如(http://msdn.microsoft.com/en-us/library/2dfe3bzd%28VS.80%29.aspx). (6认同)
  • 如果使用`rand()>>(sizeof(int)*CHAR_BIT-1)`,则不必假设每字节8位. (2认同)

eph*_*ent 8

男子3 drand48正是你问什么.

所述drand48()erand48()函数返回非负,双精度浮点值,在区间[0.0,1.0]均匀地分布.

这些可以在#include <stdlib.h>UNIX平台上找到.但是,它们不在ANSI C中,因此(例如)除非您自带实现(例如LibGW32C),否则您将无法在Windows上找到它们.