Hi. Ich möchte mit ran1(&idum) Zufallszahlen zwischen 0 und 1 erzeugen. Das Programm sieht folgendermaßen aus:
#define IA
In der eigentlichen Funktion, wo es aufgerufen wird, initialisiere ich idum mit z.B. long idum=-3. Dann kann ich es aufrufen mit z.B. p_rand=ran1(&idum). Nun habe ich aber festgestellt, dass meine Zufallszahlen gar nicht zwischen 0 und 1 liegen sondern eher zwischen 0 und viel größeren Zahlen, ich kriege z.B. 12, 6, 0, 32 etc.
Hat jemand vielleicht eine Ahnung, woran das liegt?
vielen Dank für die Hilfe
#define IA
Code:
16807
#define IM 2147483647
#define IQ 127773
#define IR 2836
#define NTAB 32
#define EPS (1.2E-07)
#define MAX(a,b) (a>b)?a:b
#define MIN(a,b) (a<b)?a:b
double ran1(idum)
int *idum;
{
int j,k;
static int iv[NTAB],iy=0;
void nrerror();
static double NDIV = 1.0/(1.0+(IM-1.0)/NTAB);
static double RNMX = (1.0-EPS);
static double AM = (1.0/IM);
if ((*idum <= 0) || (iy == 0)) {
*idum = MAX(-*idum,*idum);
for(j=NTAB+7;j>=0;j--) {
k = *idum/IQ;
*idum = IA*(*idum-k*IQ)-IR*k;
if(*idum < 0) *idum += IM;
if(j < NTAB) iv[j] = *idum;
}
iy = iv[0];
}
k = *idum/IQ;
*idum = IA*(*idum-k*IQ)-IR*k;
if(*idum<0) *idum += IM;
j = iy*NDIV;
iy = iv[j];
iv[j] = *idum;
return MIN(AM*iy,RNMX);
}
#undef IA
#undef IM
#undef IQ
#undef IR
#undef NTAB
#undef EPS
#undef MAX
#undef MIN
In der eigentlichen Funktion, wo es aufgerufen wird, initialisiere ich idum mit z.B. long idum=-3. Dann kann ich es aufrufen mit z.B. p_rand=ran1(&idum). Nun habe ich aber festgestellt, dass meine Zufallszahlen gar nicht zwischen 0 und 1 liegen sondern eher zwischen 0 und viel größeren Zahlen, ich kriege z.B. 12, 6, 0, 32 etc.
Hat jemand vielleicht eine Ahnung, woran das liegt?
vielen Dank für die Hilfe