JavaScript Math.random()
函数返回0到1之间的随机值,根据当前时间自动播种(类似于Java我相信).但是,我认为没有办法为你设置自己的种子.
如何创建一个随机数生成器,我可以提供自己的种子值,以便我可以生成一个可重复的(伪)随机数序列?
可能重复:
随机数生成器如何工作?
我正在寻找C/C++中随机数生成器的内部实现.基本上我很想知道调用rand()时究竟发生了什么.在所有机器遵循一定的指令后,它怎么可能是随机的!
编辑:想知道如何在C/C++中实现一个.
我正在尝试生成0到59的随机数,并且对C中的rand()函数不满意.这是我正在玩的代码:
#include <stdlib.h>
#include <time.h>
main()
{
int num;
srand(time(NULL));
num = rand();
num = num % 59;
printf("%d\n", num);
}
Run Code Online (Sandbox Code Playgroud)
我已经重复了这段代码的运行,并注意到生成的随机数似乎并不是随机的.生成的数字肯定是遵循一种模式,因为每次运行程序时,数字会逐渐变大,直到它回绕到开头(即2,17,21,29,38,47,54,59,4, 11 ....等).
有没有一种方法可以为函数设定种子,这样每次重新运行函数时,我得到一个真正的随机数,生成的概率为1/60?或者是否有任何替代方法我可以自己实现而不是在C中使用rand()函数?
我只是好奇...
你如何模拟随机性?它是如何在现代操作系统(Windows,Linux等)中完成的?
编辑:好的,不仅仅是生成随机数,这可以通过rand()
大多数高级编程语言中的调用函数来完成.
但是,我更关心它是如何在现代操作系统中实际完成的.