Düzgün dağılmış rasgele sayılar (0,1) oluşturma - sayfa 17

[Silindi]  
//                              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.656612875245796924105750827168e-10);  // or / 2147483647.0
//      return ( (double) RNG_Mersenne () / 2 147 483 647.0);
}
[Silindi]  
// 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.3283064365e-10);
}
[Silindi]  
Ce dilindeki (veya MQL) yukarıdaki iki program neredeyse garantili 2^50 ..... 2^88 (bu çok fazla) sözde rasgele sayılar verir.
 

:)))

 
Hmm ....)
[Silindi]  
Ne kızdan ne de Amerikalılardan gelen açıklamaları anlamadım.
Yetmez mi chtoli, 2 ^ 88?
Ticaret için - oldukça yeterli. Ciddi uygulamalar için ayrıca R250, (2 ^ 250) vardır, ancak program orada daha karmaşıktır. Benim getirdiğimden daha kolay - bulamazsınız. Eh, çok CİDDİ uygulamalar için - Intel, sunucu işlemcilerinde iki yerleşik gerçek sabit rastgele sayı üretecine sahiptir - belirtilen programlarla çaprazlanabilirler.
Adı Intel LaGrande. Bu jeneratörlerin tanımı ve nasıl çağrılacağı burada bulunabilir:
http://www.intel.com/technology/security/


/*** R250 rasgele sayı üreteci için fonksiyon prototipleri, WL Maier ***/
imzasız int r250(void);
imzasız int r250n(imzasız n);
çift dr250(boş);
Dosyalar:
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 WL Maier ***/
unsigned int r250(void);
unsigned int r250n(unsigned n);
double dr250(void);


MQL'yi iki katına tamamen dolduruyorum. Bu arada avatarım cinsiyeti değil en sevdiğim çizgi filmi gösteriyor.
 
Ve " Tekdüze dağıtılmış rasgele sayılar (0,1) üret"
[Silindi]  
gumgum >> :


MQL'yi iki katına tamamen dolduruyorum.

Peki o zaman 2 19937 - Mersenne twister denir

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

[Silindi]  
gumgum >> :


Bu arada avatarım cinsiyeti değil en sevdiğim çizgi filmi gösteriyor.

Ben gençken, hepimiz avatarın en sevdiğiniz bira markasını ima etmesi gerektiğini düşündük.

Artık biranın önemli miktarlarda zararlı olduğunu biliyorum, ama yine de ... boş zamanlarınızda düşünün.

Karar vermek.