gpt4 book ai didi

c++ - 正确生成随机指数值c++

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:33 24 4
gpt4 key购买 nike

我想生成属于指数分布的随机数。这是我写的

    int size = atoi(argv[2]);
double *values = (double*)malloc(sizeof(double)*size);

double gamma = atof(argv[1]);
if(gamma<=0.0){
cout<<"Insert gamma"<<endl;
return 0;
}


for(int i=0; i<size; i++){
values[i]=0;

}

srand ( time(NULL) );
for(int i=0; i<size; i++){
x = ((double) rand() / (RAND_MAX));
//cout << random <<endl;
value=(log(1.0-x)/(-gamma));
//count each value
values[value]=values[value]+1.0;
}

但它们并没有涵盖所有 vector 的大小。它们或多或少地覆盖了 vector 的 10%,其他字段都是 0,并且由于在我需要进行线性插值之后我想减少那些“空白空间”以便每个字段至少有一个值数组的单元格,我该怎么做?例如,我有一个 100000 的 vector ,只有前 60 个字段填充了值,因此从 60 到 999999 的单元格都是 0,当我进行线性回归时,它们会对公式产生负面影响。

最佳答案

好的,我看到了错误

您正在生成 size 个事件。您确实需要更多事件来填充直方图

附言

填充 bin #n 的概率(n 在 [0...size) 范围内)由表达式给出

prob = exp(-gamma*n) - exp(-gamma*(n+1))

gamma 等于 0.01 时,比如说 n 大约 1000 会给你大约 4*10^-7 的概率。因此,即使要在这个容器中获得一个事件,您也需要采样大约 250 万次

PPS

并且使用库指数抽样虽然总体上很好,但不会给您带来任何好处,因为据我所知您的抽样是可以的

关于c++ - 正确生成随机指数值c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29335761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com