균일하게 분포된 난수 생성(0,1) - 페이지 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.656612875245796924105750827168e-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.3283064365e-10);
}
 
Ce 언어(또는 MQL)의 위의 두 프로그램은 거의 보장된 2^50 ..... 2^88(정말 많은) 의사 난수를 제공합니다.
 

:)))

 
흠 ....)
 
나는 그 소녀의 말이나 미국인의 말을 이해하지 못했다.
부족해 크톨리 2^88?
거래를 위해 - 충분히. 심각한 응용 프로그램의 경우 R250, (2 ^ 250)도 있지만 프로그램이 더 복잡합니다. 내가 가져온 것보다 더 쉽습니다 - 당신은 찾지 못할 것입니다. 글쎄, 매우 심각한 응용 프로그램의 경우 - Intel은 서버 프로세서에 2개의 내장형 실제 하드 난수 생성기를 가지고 있으며 표시된 프로그램과 교차할 수 있습니다.
인텔 라그란데라고 합니다. 설명 및 이러한 생성기를 호출하는 방법은 여기에서 찾을 수 있습니다.
http://www.intel.com/technology/security/


/*** WL Maier의 R250 난수 생성기용 함수 프로토타입 ***/
부호 없는 int r250(무효);
unsigned int r250n(unsigned n);
더블 dr250(무효);
파일:
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을 완전히 두 배로 채우고 있습니다. 그건 그렇고, 내 아바타는 성별이 아니라 내가 가장 좋아하는 만화를 암시합니다.
 
그리고 " 균일하게 분포된 난수 생성(0,1)"
 
gumgum >> :


MQL을 2배 푹 채우고 있습니다.

그럼 2 19937 - Mersenne 트위스터라고 불림

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

 
gumgum >> :


그건 그렇고, 내 아바타는 성별이 아니라 내가 가장 좋아하는 만화 를 암시합니다.

내가 어렸을 때 우리는 아바타가 좋아하는 맥주 브랜드를 암시해야 한다고 생각했습니다.

이제 맥주가 상당한 양으로 해롭다는 것을 알고 있지만 여전히 ... 여가 시간에 그것에 대해 생각하십시오.

결정하다.