Well here is my newb problem:
I have a random generator class written in c++ (numerical recipes).
In c# i add a class item RG.cs and then i am confused.Do i copy and paste everything from the .h file and the .cpp file of my c++ class?When I do that I get a lot of errors.What transformation do i have to do?
Another question is how can i declare in c# a method that in c++ would be double ran2(long&);?
Here is the .h file:
//------------------------
class Rand
{
public:
// default constructor generates 1st random number and stores it in r
Rand(long);
// returns a uniform Random deviate between 0.0 and 1.0
double ran2(long&);
// Generates a new random number, stores it in r and then returns r
double NewRand();
// returns a random number
double GetRand();
private:
// seed
long num;
// random number
double r;
} ;
//----------------------
here is the .cpp file
Rand::Rand(long dummy)
{
num = -dummy;
// Initialize random number generator
ran2(num);
// stores random number in r
r = ran2(num);
}
// returns random number
double Rand::GetRand()
{
return r;
}
// generates new random number, stores in r and then returns r
double Rand::NewRand()
{
r = ran2(num);
return r;
}
double Rand::ran2(long& idum)
{
const long IM1=2147483563;
const long IM2=2147483399;
const double AM=(1.0/IM1);
const long IMM1=(IM1-1);
const long IA1=40014;
const long IA2=40692;
const long IQ1=53668;
const long IQ2=52774;
const long IR1=12211;
const long IR2=3791;
const long NTAB=32;
const long NDIV=(1+IMM1/NTAB);
const double EPS=1.2e-7;
const double RNMX=(1.0-EPS);
int j;
long k;
static long idum2=123456789;
static long iy=0;
static long iv[NTAB];
double temp;
if(idum <= 0)
{
if(-(idum) < 1)
idum = 1;
else
idum = -(idum);
idum2 = (idum);
for(j=NTAB+7;j >= 0;j--)
{
k=(idum)/IQ1;
idum=IA1*(idum-k*IQ1)-k*IR1;
if(idum < 0)
idum+=IM1;
if(j < NTAB)
iv[j] =idum;
}
iy = iv[0];
}
k = idum/IQ1;
idum = IA1*(idum - k*IQ1) - k*IR1;
if(idum < 0)
idum += IM1;
k = idum2/IQ2;
idum2 = IA2*(idum2-k*IQ2)-k*IR2;
if(idum2 < 0)
idum2 += IM2;
j=iy/NDIV;
iy=iv[j]-idum2;
iv[j] = idum;
if (iy < 1)
iy += IMM1;
if ((temp = AM*iy) > RNMX)
return RNMX;
else
return temp;
}
//------
Thanks all!