Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 567
  • Last Modified:

Random Distribution Number Generator Algorithm

I need to build a random number generator. The number generated should follow some distribution like noemal distribution, Poisson distribution, exponential distribution and so on....
I'm using Visual C++ programming, but I will be appreciate if anybody can just let me know the algorithm.
I have gone through the exact generator I needed in Excel, but I can't get the source code.
Thanx for your help.
0
ronaldyoong
Asked:
ronaldyoong
1 Solution
 
nir_aradCommented:
There are specific algorithm tips in
"Simulation Modeling and Analysis", 2nd Edition by Law and Kelton.
If you need something specific - I have the book at hand.

Example:
Bernoulli (p.472)
-----------------
1. Generate U~U(0,1)
2. If U <= p return X = 1. Otherwise return X = 0.


Uniform distribution can be obtained by the C library rand() function.
0
 
deightonCommented:
Here is exponential for starters, include math.h

double exponential_distribution(double dlamda)
{
     double dprop;

     do
     {          
          dprop = (double) rand() / (double) RAND_MAX;
     }
     while (dprop == 0);

     return -log(dprop) / dlamda;
}


void main()
{


     printf("\nexponential lamda = 3 %lf",exponential_distribution(3));
         
         
}
0
 
deightonCommented:
include stdlib, stdio as well

and do a

// include time.h

srand( (unsigned)time( NULL ) );  

at program start to seed the random number if you want different numbers every time you run the program

0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
deightonCommented:
poisson distribution

long poisson_distribution(double lamda)
{
     double total=0;
     double dprop,dterm;
     long k=0;
     long c;
     
     do
     {
          dprop = (double) rand() / (double) RAND_MAX;
     } while (dprop == 1);

     do
     {
          dterm = (double) exp(-lamda);
          for(c = 1;c <= k ; c++)
          {
               dterm *= lamda / c;                    
          }

          total += dterm;
          k++;
     } while(total < dprop);
     k--;
     
     return k;
}
0
 
yairyCommented:
A 'Real' random number generator is impossible to build with a deterministic machine.




0
 
deightonCommented:
yairy,

I agree that the rand function produces pseudo random numbers, a mathematical sequence that appears to be random, but obviously isn't as such random.  However they are adequate for most tasks,  and it is possible to replicate in c++ anything that excel can do.
0
 
griesshCommented:
I think you forgot this question. I will ask Community Support to close it unless you finalize it within 7 days.
Unless there is objection or further activity,  I will suggest to accept "deighton" comment(s) as an answer.

If you think your question was not answered at all, you can post a request in Community support (please include this link) to refund your points.
The link to the Community Support area is: http://www.experts-exchange.com/jsp/qList.jsp?ta=commspt

Please do not accept this comment as an answer!
======
Werner
0
 
NetminderCommented:
Per recommendation comment force/accepted by

Netminder
Community Support Moderator
Experts Exchange
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now