I’m writing a program which has to use a series of random numbers (representing an angle of incidence). My program showed some weird behaviour, so I digged into the documentation on ROOT’s random generators. The user guide states that the use of the C++ function rand() is a bad idea. It does not state explicitly what it means with “bad”, so I decided to make a histogram filled with numbers generated with rand().
Here is my code:
TH1D *dist = new TH1D("dist","Distribution",90,0,90);
for (size_t idx = 0; idx < 100000; ++idx)
{
Double_t alpha = static_cast<Double_t>(rand() % 9001) / 100;
dist->Fill(alpha);
}
dist->Draw();
The result is shocking! See the attached image.
Maybe it is a good idea to included such an image somewhere in the user guide, to show why the use of rand() is indeed very bad?
Of course, now I switched to the use of gRandom->Uniform(x1,x2). The first question I have is: are x1 and x2 included in the domain?
As the above code suggests, I would like to generate random numbers in discrete steps (0, 0.01, 0.02, 0.03, etc. but nothing in between). What would be the best option to do this? Just use TMath::floor() ?