首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我的C代码只生成每三个随机数一次?

为什么我的C代码只生成每三个随机数一次?
EN

Stack Overflow用户
提问于 2019-03-27 06:06:23
回答 1查看 99关注 0票数 3

我正在尝试模拟蠕虫在由100,000台计算机组成的网络中的传播。模拟本身非常简单,我不需要任何帮助,除了出于某种原因,我只能得到每三个随机数。

只有指数模数1000小于10的计算机才会被感染,所以当1000台计算机被感染时,应该执行程序。由于某些原因,我的程序只得到329。当我降低目标数并检查数组的内容时,只有每三台计算机进行了更改,这是一个一致的模式。例如,在阵列的末尾,仅计算机98001、98004、98007、99002、99005、99008被改变,即使在两者之间的计算机(98002、98003等)也是如此。也应该改变。该模式一直保持到数组的开头。当我尝试更改所有1000个时,程序进入无限循环,并停留在329。

编辑:我刚刚发现,如果我将NETSIZE降低到10,000,将while循环中的目标降低到100,它不会跳过任何东西。这是否意味着问题与舍入误差有关?比我更了解C语言的人肯定知道答案。

谢谢。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

#define NETSIZE 100000

double rand01();
void initNetwork();

unsigned char network[NETSIZE];
int scanrate = 3;
int infectedCount;
int scans;
int ind;
int time;



int main(void) {
    initNetwork();
    time = 0;
    infectedCount = 1;
    while (infectedCount < 1000) { //changing 1000 to 329 stops the infinite loop
        scans = infectedCount * scanrate;
        for (int j = 0; j < scans; j++) {
            ind = (int) (rand01() * NETSIZE);
            if (network[ind] == 0) {
                network[ind] = 1;
                infectedCount++;
            }
        }
        time++;
    }
    for (int k = 0; k < NETSIZE; k++) {
        if (network[k] == 1) printf("%d at %d\n", network[k], k);
    }
}
double rand01() {
    double temp;
    temp = (rand() + 0.1) / (RAND_MAX + 1.0);
    return temp;
}

void initNetwork() {
    for (int i = 0; i < NETSIZE; i++) {
        if (i % 1000 < 10) {
            network[i] = 0;
        } else  {
            network[i] = 2;
        }
    }
    network[1000] = 1;
}

在上面的代码中,我预计代码会一直运行,直到1000个易受攻击的索引从0变为1。

EN

回答 1

Stack Overflow用户

发布于 2019-03-27 06:50:00

是的,我遇到的问题是,我系统上的RAND_MAX值只有32767,我正试图将其有效地分散到100,000个值上,这导致大约每三个数字就会出现一次。

在我的辩护中,建议rand01()函数的人有计算机科学的PhD学位,但我认为他在我们学校的主计算机上运行了这段代码,这台计算机的RAND_MAX值可能要大得多。

@JonathanLeffler值得称赞这个解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55366874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档