Erzeugung von gleichmäßig verteilten Zufallszahlen (0,1) - Seite 17

 
//                              From volume 2 Knuth
// rand() = 1.83 seconds Mersenne = 1.01 seconds GameRand = 0.24 seconds
//...........................................................................
// Числа Мерсена:
//p0 = 2147483647,              p1 = 2147483629,         p2 = 2147483587,        p3 = 2147483579,
//p4 = 2147483563,              p5 = 2147483549,        p6 = 2147483543,        p7 = 2147483497,
//p8 = 2147483489,              p9 = 2147483477,        p10 = 2147483423,       p11 = 2147483399,
//p12 = 2147483353,     p13 = 2147483323,       p14 = 2147483269,       p15 = 2147483249,
//p16 = 2147483237,     p17 = 2147483179,       p18 = 2147483171,       p19 = 2147483137,
//p20 = 2147483123,     p21 = 2147483077,       p22 = 2147483069,       p23 = 2147483059,
//p24 = 2147483053,     p25 = 2147483033,       p26 = 2147483029,       p27 = 2147482951,

#define MM 2147483647 // p0, простое число Эвклида (Мерсена),
#define AA 48271      // full-period multiplier, спектральный критерий
#define QQ 44488      //        (long) (MM/AA)
#define RR 3399       //        (long) MM % AA, important RR < QQ

static long int X = 153;
static long int Y = 8479237;
//............................../ RNG_Mersenne \........................
long int RNG_Mersenne (void)
{       long int Z;
        //.......................................................
        //
        // 1  key  making LCG multiplatform fixing
        // overflow problem  multiplying two 32 bit is
        // Schrage solved by the doing approximate factorization of m such that
        // m = aq + r , q = (int)(m/a), r = m mod a
        // xi = a(xi-1 mod q) - r*(int)(xi-1/q)         if xi-1 >= 0
        // xi = a(xi-1 mod q) - r*(int)(xi-1/q) + m    otherwise
        // m=16807 becomes q = 127773 and r = 2836
        //........................................................
        //
        X = AA * (X % QQ) - RR * (long int) (X / QQ);   // Schrage's approximate factorization
        if (X < 0)
                X = X + MM;
//......................................................................
//
// #define MMM 2147483399       // p11, простое число но не Мерсена
#define MMM 2147483629          // prime p1
#define AAA 40692               // спектральный критерий
#define QQQ 52774               // (long) (MMM/AAA)
#define RRR 3791                // (long) MMM % AAA, important RRR < QQQ
        Y = AAA * (Y % QQQ) - RRR * (long) (Y / QQQ);
        if (Y < 0)
                Y = Y + MMM;
        Z = X - Y;
        if (Z < 0)
                Z = Z + MMM;
        return (Z);
}

//............................./ DRNG_Mersenne \.................................
double DRNG_Mersenne (void)
{       return ( (double) RNG_Mersenne () * 4.656612875245796924105750827168 e-10);  // or / 2147483647.0
//      return ( (double) RNG_Mersenne () / 2 147 483 647.0);
}
 
// Tausworthe is a nice option. It gives 2^88 non-repetitive numbers.
// A handful of primitive operations, and extremely good randomness;
static unsigned long int s1 = 1423667, s2 = 2234, s3 = 34567 ; // any non-zero numbers
long int RNG_Tausworthe ()
{       unsigned long int b ;
        b = ( (s1 << 13) ^ s1) >> 19;
        s1 = ( (s1 & 4294967294) << 12) ^ b;
        b = ( (s2 << 2) ^ s2) >> 25;
        s2 = ( (s2 & 4294967288) << 4) ^ b ;
        b = ( (s3 << 3) ^ s3) >> 11 ;
        s3 = ( (s3 & 4294967280) << 17) ^ b ;
        return (s1 ^ s2 ^ s3);
}
// Or, simply:
// s1=((s1&4294967294)<<12)^(((s1<<13)^s1)>>19) ;
// s2=((s2&4294967288)<<4)^(((s2<<2)^s2)>>25) ;
// s3=((s3&4294967280)<<17)^(((s3<<3)^s3)>>11) ;
// return (s1^s2^s3) ;

//............................./ DRNG_Tausworthe \.................................
double DRNG_Tausworthe (void)
{       return ( (double) RNG_Tausworthe () * 2.3283064365 e-10);
}
 
Die beiden oben genannten Programme in Ce (oder MQL) ergeben fast garantiert 2^50 ..... 2^88 (das ist eine ganze Menge) Pseudo-Zufallszahlen.
 

:)))

 
Mda....)
 
Ich verstehe weder den Text des Mädchens noch den der Amerikaner.
Sind 2^88 nicht genug?
Für den Handel ist das ausreichend. Für ernsthafte Anwendungen gibt es auch R250, (2^250), aber das ist komplizierter. Sie werden es nicht einfacher finden als das, was ich Ihnen gegeben habe. Nun, für wirklich SERIÖSE Anwendungen hat Intel zwei echte, festverdrahtete Zufallszahlengeneratoren in Server-CPUs eingebaut, die Sie mit den oben genannten Programmen kombinieren können.
Es heißt Intel LaGrande. Eine Beschreibung und wie man diese Generatoren aufruft, finden Sie hier:
http://www.intel.com/technology/security/


/*** Funktionsprototypen für den Zufallszahlengenerator R250, von W. L. Maier ***/
unsigned int r250(void);
unsigned int r250n(unsigned n);
double dr250(void);
Dateien:
r250.rar  3 kb
 
AlexEro >>:
Не понял я реплик ни от девушки, ни от америкоса.
Это мало, чтоли, 2^88?
Для трейдинга - вполне достаточно. Для серъёзных приложений есть ещё R250, (2^250) но там сложнее прога. Проще, чем я привёл - не найдёте. Ну для совсем СЕРЪЁЗНЫХ приложений - у Интела в серверных процессорах есть два встроенных настоящих хардварных генератора случайных чисел - их можно скрестить с указанными прогами.
Называется Intel LaGrande. Описание и как вызывать эти генераторы найдёте здесь:
http://www.intel.com/technology/security/


/*** Function prototypes for R250 random number generator, by W. L. Maier ***/
unsigned int r250(void);
unsigned int r250n(unsigned n);
double dr250(void);


Ich fülle die MMS vollständig aus. Übrigens spielt mein Avatar auf meinen Lieblingscartoon an, nicht auf mein Geschlecht.
 
Und "Erzeugung von gleichmäßig verteilten Zufallszahlen (0,1)"
 
gumgum >>:


Я полностью double в MQL заполняю.

Nun denn219937 - genannt Mersenne-Twister

https://en.wikipedia.org/wiki/Mersenne_twister

 
gumgum >>:


И кстати мой аватар намекает на мой любимый мультфильм, а не половую принадлежность.

Als ich jung war, dachten wir alle, dass der Avatar auf die Lieblingssorte Bier anspielen sollte.

Nun weiß ich, dass Bier in großen Mengen schädlich ist, aber trotzdem... Denken Sie in aller Ruhe darüber nach.

Entscheiden Sie sich.