Matrix Elements VB-800 Bedienungsanleitung Seite 166

  • Herunterladen
  • Zu meinen Handbüchern hinzufügen
  • Drucken
  • Seite
    / 172
  • Inhaltsverzeichnis
  • LESEZEICHEN
  • Bewertet. / 5. Basierend auf Kundenbewertungen
Seitenansicht 165
Appendix A8
Random Number Generators
A8.1 Modified Park & Miller generator
This random number generator is the modified Park and Miller generator (based on Park
and Miller, 1988, with modifications due to Park). It is a linear congruential generator,
which in C form can be written as (assuming an int is 32 bits):
#define PM_A 48271 /* a */
#define PM_M 2147483647 /* m = 2^31 - 1 */
#define PM_Q 44488 /* m / a */
#define PM_R 3399 /* m % a */
#define PM_INIT 198195252
static int s_iSeedPM = PM_INIT; /* initial seed */
double DRanPM(void)
{
static double dMinv = 1.0 / PM_M;
int test, lo, hi;
test = s_iSeedPM;
hi = (test / PM_Q);
lo = test - hi * PM_Q; /* test % PM_Q */
test = lo * PM_A - hi * PM_R;
s_iSeedPM = (test > 0) ? test : test + PM_M;
return s_iSeedPM * dMinv;
}
In the Ox version, lo = test % PM_Q has been replaced by lo = test - hi *
PM
Q for faster computation.
A8.2 Marsaglia’s generator
Code for this random number generator was posted by Prof. Marsaglia to the newsgroup
sci.stat.math (Marsaglia, 1997, also see Marsaglia and Zaman, 1994). It is a multiply
with carry generator with period of 2
60
. The C code used in Ox is slightly rewritten
from the original as:
#define GM_INIT_1 362436069
#define GM_INIT_2 521288629
static unsigned int s_uiSeed1GM = GM_INIT_1;
158
Seitenansicht 165

Kommentare zu diesen Handbüchern

Keine Kommentare