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

Ste*_*ish 0 c python random

我有以下 C - 程序:

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

这个 Python 脚本:

import random
import time
random.seed(int(time.time()))
print (random.randint(0, 2147483647))
Run Code Online (Sandbox Code Playgroud)

C 程序中的 RAND_MAX 定义为 2147483647。如果我在同一秒启动两个程序,它们应该打印相同的“随机”数,但事实并非如此?

任何想法为什么?是否实现了不同的方法来获取伪随机数?种子肯定是一样的。

Ant*_*ala 6

C 的随机数生成器根本没有标准化。C11 标准修订版在脚注 295 中指出

无法保证所产生的随机序列的质量,并且已知某些实现会产生具有令人不安的非随机低阶位的序列。具有特殊要求的应用程序应使用已知足以满足其需求的发生器。

Python 就是这些应用程序之一:Python 选择使用MT19937-32随机数生成器,又名 Mersenne Twister。C 库不太可能使用 MT19937-32 进行rand实现,并使用相同的种子程序。