You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何仅random.random()多次运行生成不同值?其他随机函数输出相同?

问题:为何random.random()运行数百万次仍不重复,而其他随机函数会出现相同结果?

这是我使用的代码:

import random as r    

count =  0    
num1 = 0    
num2 = 1

我们使用这个数值是因为random模块生成的是15位小数,由此可产生437893890381000000种组合。

while num1 != num2 or count <= 437893890381000000:     

    num1 = r.random()
    num2 = r.random()

    count+=1
    print(count,' num1= ',num1,' num2= ',num2)

print('after ',count,' times, the code generated same numbers as: ',num1,' ',num2)

该代码运行了数百万次,仍未出现相同的输出结果。


核心原因解析

  1. 伪随机数生成器的超长周期
    Python的random模块基于Mersenne Twister算法,它的周期长达2^19937-1——这个数值远超你提到的4.3e17种组合。在周期范围内,伪随机数序列不会出现重复,你运行的数百万次和这个周期相比可以忽略不计,因此不会产生重复值。

  2. random.random()的输出基数极大
    random.random()返回[0.0, 1.0)区间的浮点数,内部用53位二进制精度存储(对应十进制约15-17位有效数字),总共有2^53种可能取值,约9e15种。按照生日悖论计算,需要采样约3e7次才会有50%概率出现重复,数百万次还远未达到这个阈值。

  3. “其他随机函数重复”的真相
    所谓“其他随机函数输出相同结果”,大多是两种情况:一是手动设置了相同的随机种子,导致生成固定序列;二是使用了输出范围极小的函数(比如randint(1,10)这类有限区间的函数),重复概率自然更高。如果未手动设种子,random模块会用系统时间等熵源初始化,所有随机函数都会基于唯一状态生成不重复序列。

你的代码逻辑问题

循环条件num1 != num2 or count <= 437893890381000000存在错误:or逻辑会让循环在count未达上限时一直执行,不管num1和num2是否相等。正确条件应为while num1 != num2 and count <= 437893890381000000——但即便修正,你也几乎不可能看到循环结束,因为重复概率实在太低。

内容的提问来源于stack exchange,提问作者Rishi Bhati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:32:38