Search code examples
c++randomlogarithmexponential

Generate random number belonging to exponential distribution


I'm trying to generate random values belonging to an exponential distribution.

#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;
}

I'm using this formula x = log(1-u)/(−λ) that I have read in this post Pseudorandom Number Generator - Exponential Distribution

But the output that I see is this one:

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

It is always printed the same value of the random number and also the result of the logarithm is always 0, I can't understand way.


Solution

  • You are using random uninitialized, so it is undefined what value it will hold. And you are never changing its value, so each iteration of the loop it will behave the same.