Python - randomint()应该等于C - rand()

时间:2017-11-04 19:50:19

标签: python c random

我有以下C - 程序:

#include <stdio.h>
#include <time.h>
int main(int argc, char *argv[]){
    srand(time(NULL));
    printf("%d", rand());
}

这个Python脚本:

import random
import time
random.seed(int(time.time()))
print (random.randint(0, 2147483647))

C程序中的RAND_MAX被定义为2147483647.如果我在同一秒内启动两个程序,它们应该打印相同的&#34;随机&#34;数字,但事实并非如此?

任何想法为什么?是否有不同的方法来获取伪随机数?种子绝对是一样的。

2 个答案:

答案 0 :(得分:3)

C的随机数发生器根本没有标准化。 C11标准修订版在the footnote 295中注明

  

不能保证产生的随机序列的质量,并且已知一些实现产生具有令人沮丧的非随机低阶位的序列。 有特殊要求的应用程序应使用a   已知的发电机足以满足他们的需求。

Python是其中一个应用程序:Python选择使用MT19937-32随机数生成器,a.k.a。Mersenne Twister。 C库不太可能使用MT19937-32进行{{1}}实现,并使用相同的种子例程。

答案 1 :(得分:1)

他们唯一保证的是你会获得一个伪随机数。你基本上不能保证它是如何工作的。

即使您在两个不同的编译器上编译相同的C程序,在调用rand()时也不能保证完全相同的结果。

你基本上想知道为什么你滚动两个不同的骰子时得不到相同的结果,即使你以完全相同的方式滚动它们。嗯,它们是不同的,结果也是如此。