//*CMZ :  2.23/04 08/10/99  08.26.12  by  Rene Brun
//*CMZ :  2.21/07 04/03/99  15.29.26  by  Rene Brun
//*-- Author :    Rene Brun   04/03/99

//////////////////////////////////////////////////////////////////////////
//
// TRandom2
//
// Random number generator class (periodicity > 10**14).
//
// Has a better periodicity than its base class TRandom but is slower.
//////////////////////////////////////////////////////////////////////////

//*KEEP,TMath.
#include "TMath.h"
//*KEEP,TRandom2,T=C++.
#include "TRandom2.h"
//*KEND.

ClassImp(TRandom2)

//______________________________________________________________________________
 TRandom2::TRandom2(UInt_t seed)
{
//*-*-*-*-*-*-*-*-*-*-*default constructor*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*                  ===================

   SetName("Random2");
   SetTitle("Random number generator with period > 10**14");
   SetSeed(seed);
   fSeed1 = 9876;
   fSeed2 = 54321;
}

//______________________________________________________________________________
 TRandom2::~TRandom2()
{
//*-*-*-*-*-*-*-*-*-*-*default destructor*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*                  ==================

}

//______________________________________________________________________________
 void TRandom2::GetSeed2(UInt_t &seed1, UInt_t &seed2)
{
//  Set the random generator seeds

   seed1 = UInt_t(fSeed1);
   seed2 = UInt_t(fSeed2);
}

//______________________________________________________________________________
 Float_t TRandom2::Rndm(Int_t)
{
//  Machine independent random number generator.
//  Produces uniformly-distributed floating points between 0 and 1.
//  Identical sequence on all machines of >= 32 bits.
//  Periodicity > 10**14

   Int_t k = Int_t(fSeed1/53668);
   fSeed1 = 40014*(fSeed1 - k*53668) - k*12211;
   if (fSeed1 < 0) fSeed1 += 2147483563;
   k = Int_t(fSeed2/52774);
   fSeed2 = 40692*(fSeed2 - k*52774) - k*3791;
   if (fSeed2 < 0) fSeed2 += 2147483399;
   Double_t iz = fSeed1 - fSeed2;
   if (iz <= 0) iz += 2147483562;
   Float_t r = iz*4.6566128e-10;
   return r;
}

//______________________________________________________________________________
 void TRandom2::SetSeed(UInt_t seed)
{
//  Set the random generator sequence (not yet implemented)

   fSeed = seed;
}

//______________________________________________________________________________
 void TRandom2::SetSeed2(UInt_t seed1, UInt_t seed2)
{
//  Set the random generator seeds
//  Note that seed1 and seed2 must be < 2147483647

   fSeed1 = Double_t(seed1);
   fSeed2 = Double_t(seed2);
}


ROOT page - Class index - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.