c++ - 生成属于指数分布的随机数

标签 c++ random logarithm exponential

我正在尝试生成属于指数分布的随机值。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <iostream>
#include <math.h>

using namespace std;

int main(){
    double x;
    double random;
    double one=1.0;
    for(int i=0; i<1000; i++){
        x = ((double) rand() / (RAND_MAX));
        cout << random <<endl;
        x=log(one-random)/(-3);
        cout<< x<< endl;
        cout<< "__"<<endl;
    }
    return 0;
}

我正在使用这个公式 x = log(1-u)/(−λ) 我在这篇文章中读到了 Pseudorandom Number Generator - Exponential Distribution

但我看到的输出是这个:

3.90272e-319
0
__
3.90272e-319
0
__
3.90272e-319
0
__
3.90272e-319
0
__
and so on

它总是打印相同的随机数值,而且对数的结果总是0,我无法理解。

最佳答案

您正在使用未初始化的 random,因此未定义它将持有什么值。而且您永远不会更改它的值,因此循环的每次迭代都将表现相同。

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

相关文章:

c++ - 如何在 C++ 的循环中生成不同的随机数?

java - 在 Java 的公式中使用 log base 10

python - 在Python中以对数尺度插值

c++ - QObject派生类回调函数到c库

C++:将 const 与模板参数组合

C++ 等待线程退出

python - `numpy.random.normal` 在不同的系统上生成不同的数字

C++ 外部文件读取 : I know how to find and read a string, findMe.但是我如何处理 findMei(查找字符串中的任意数字 i)?

performance - 在保持顺序的同时有效地随机抽样列表

r - 带对数刻度的 geom_raster 插值