rand()不遵循高斯分布和中心极限定理

域名系统

我创建了一个程序,该程序使用rand()在C语言中生成重复的数字。

但是重复的数字不遵循中心极限定理

谁能解决rand()错误问题,或者除了使用rand()C库生成更好的随机数之外,还有其他选择吗?

这是屏幕截图: 在此处输入图片说明

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


#define TOTAL_THROW 10000000

typedef enum _COINTOSS {
    UNDEFINED = 0,
    HEAD = 1,
    TAIL = 2
} COINTOSS;

COINTOSS toss_coin () {
    int x = rand() % 2;
    if (x == 0) return HEAD;
    else if (x == 1) return TAIL;
}

void main () {
    int x, i, j, v1 = 0, v2 = 200, total = 0;
    int head_range[25] = {0};
    int tail_range[25] = {0};
    int no_range = 0;
    int count = 0;
    int repeated = 0;
    COINTOSS previos_toss = UNDEFINED;
    COINTOSS current_toss;

    srand(time(NULL));

    for (i=0; i<TOTAL_THROW; i++) {
        current_toss = toss_coin();             // current toss
        if (previos_toss == current_toss) {
            count++;
        } else {
            if (current_toss == HEAD) head_range[count] += 1;
            else if (current_toss == TAIL) tail_range[count] += 1;


            previos_toss = current_toss;
            count = 0;
        }

    }

    for (i=24; i>=0; i--) {
        printf("+%d = %d\n", i+1, head_range[i]);
    }

    puts("________________\n");

    for (i=0; i<25; i++) {
        printf("-%d = %d\n", i+1, tail_range[i]);
    }

    printf("\nTOTAL_THROW: %d\n", TOTAL_THROW);


    printf("\nPress [ENTER] to exit. . .");
    getchar();
}
米奇小麦

您的问题是使用模数使您的随机数进入所需范围,该范围使用低位(这是经典的陷阱):

int x = rand() % 2;

rand()线性同余生成器(LCG)的低位不如高位随机。这适用于所有LCG,无论使用何种库或语言。

对于[0..N)的范围,您应该执行以下操作(使用高位):

int r = rand() / ( RAND_MAX / N + 1 );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

rand()不遵循高斯分布和中心极限定理

来自分类Dev

使用Matlab和中心极限定理的偏心模具的PDF和CDF

来自分类Dev

如何使随机丢失位遵循高斯分布

来自分类Dev

使用Matlab进行中心极限定理的PDF和CDF图

来自分类Dev

多重高斯分布

来自分类Dev

无法调试与中心极限定理相关的代码

来自分类Dev

使图像适合高斯分布

来自分类Dev

无法使用种子生成高斯分布

来自分类Dev

在高斯分布中生成HTTP请求

来自分类Dev

R中累积高斯分布的逆

来自分类Dev

多元高斯分布公式的实现

来自分类Dev

使用高斯分布的数的平方

来自分类Dev

使用高斯分布Python的方差

来自分类Dev

使用matplotlib为正态分布,高斯分布,指数分布和伽玛分布创建动画的问题

来自分类Dev

在Python中生成3D高斯分布

来自分类Dev

如何在y轴上绘制高斯分布?

来自分类Dev

使用cenreg进行删失回归的高斯分布

来自分类Dev

Python-将整个列表与高斯分布集成

来自分类Dev

用固定的某些参数拟合双峰高斯分布

来自分类Dev

多元高斯分布张量流概率的混合

来自分类Dev

估计曲线与高斯分布的相似度(在Python中)

来自分类Dev

如何为ROI生成高斯分布强度?

来自分类Dev

用3个高斯分布生成数组MATLAB

来自分类Dev

Matlab如何生成高斯分布随机数?

来自分类Dev

如何提取适合R中的高斯分布的值?

来自分类Dev

图像的MATLAB高斯分布的总和大于1

来自分类Dev

Python:为变量创建高斯分布,并使用高斯值在循环上运行程序

来自分类Dev

Python:为变量创建高斯分布,并使用高斯值在循环上运行程序

来自分类Dev

如何在具有高斯分布的两个值之间产生随机数

Related 相关文章

热门标签

归档