home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
EFFO
/
forum7.lzh
/
C
/
HINTERHALT
/
rand.c
< prev
Wrap
Text File
|
2009-11-06
|
3KB
|
60 lines
/******************************************************************************/
/* */
/* RAND.R */
/* */
/* Zufallszahlengenerator */
/* Werte fuer M und A aus 'Angewandte Statistik' von Karl Bosch. */
/* Die Werte koennen auch geaendert werden. */
/* */
/******************************************************************************/
#define M 2147483648
#define A 65539
static unsigned int y = 0;
randomize () /* Initialisierung der Zufalls- */
/* reihe */
{
int time, date, tick, err;
short day;
extern unsigned int y;
err = _sysdate (1, &time, &date, &day, &tick); /* Systemzeit in juliani- */
/* scher Form */
if (err == -1) exit (_errmsg (errno, "Fehler bei Systemzeit\n"));
y = time; /* Sekunden seit Mitternacht */
if (y % 2 == 0) y++; /* y muss ungerade sein */
}
double rnd (parm) /* Ausgabe einer Zufallszahl */
unsigned short parm; /* parm = 0: alt 1: neu */
{
double r;
static double rstat;
extern unsigned int y;
if (y == 0) exit (_errmsg (1, "Zufallsreihe nicht Initialisiert\n"));
if (parm > 1) exit (_errmsg (1, "Func rnd(): Parameter zu gro▀\n"));
y = (A * y) % M; /* Berechnung des neuen y */
r = -1.0 * ((double) y / (double) M); /* Zufallszahl zw. 0 und 1 */
if (parm == 0) return (rstat); /* Ausgabe der alten Zufallsz.*/
rstat = r;
return (r);
}
unsigned long rndx (a, b, parm) /* Ausgabe einer Zufallszahl */
unsigned long a; /* zwischen a und b */
unsigned long b;
unsigned short parm; /* parm = 0: alt 1: neu */
{
unsigned long r;
if (a >= b) exit (_errmsg (1, "Func rndx(): 2. Parameter gr÷▀er als 1.\n"));
if (parm > 1) exit (_errmsg (1, "Func rndx(): 3. Parameter zu gro▀\n"));
b++; /* damit r den Wert von b er- */
/* reichen kann. */
r = rnd (parm) * (b - a) + a;
return (r);
}