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

如何让while循环中生成的随机数彼此独立?

如何让循环中的随机数结果更独立?

兄弟,你这是踩了随机数使用的经典坑啦!问题根源很明确:你在while循环里每次都调用srand((unsigned int)time(NULL))播种。

time(NULL)返回的是秒级时间戳,而你的循环执行速度远快于1秒,这就导致连续N次循环里,srand拿到的种子都是同一个值——同一个种子会让随机数生成器产出完全相同的序列,所以你才会看到一堆连续的"All ok"或者连续的"ERROR"。

修复方案:把播种操作移到循环外面,只执行一次!

随机数生成器只需要初始化一次,之后每次调用rand()都会生成序列里的下一个独立随机数,这样结果自然就有多样性了。

修正后的代码如下(顺便提一句:你原代码里的random()应该是笔误吧?C标准库的随机数函数是rand()):

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    // 只初始化一次随机数种子,放在循环启动前
    srand((unsigned int) time(NULL));

    while(1) {
        double chance = rand() / (double) RAND_MAX;
        if (chance <= 0.95) 
            printf("All ok.\n"); 
        else 
            printf("ERROR\n");
    }
    return 0;
}

额外小提示

如果你的场景需要极高频率的随机数(比如每秒上万次调用),担心rand()的周期不够用,可以考虑更现代的随机数API:

  • 类Unix系统可以用arc4random()(不需要手动播种)
  • Windows系统可以用rand_s()

不过对于你的需求来说,把srand()移到循环外已经完全能解决问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:33:34