生成均匀分布的随机数(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.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);
}
 
在Ce(或MQL)中的上述两个程序,几乎可以保证得到2^50 .....2^88(这是个很大的数字)的伪随机数。
 

:)))

 
Mda....)
 
我不明白那个女孩和美国人的台词。
2^88还不够吗?
对于交易来说,这就足够了。对于严肃的应用,还有R250,(2^250)但它更复杂。你不会发现它比我给你的那个更容易。那么,对于真正严肃的应用,英特尔在服务器CPU中内置了两个真正的硬接线随机数生成器,你可以将它们与上述程序结合起来。
它叫英特尔拉格朗德。描述和如何调用这些生成器可在这里找到。
http://www.intel.com/technology/security/


/**** R250随机数发生器的函数原型,由W. L. Maier编写 ***/
无符号int r250(void);
无符号int r250n(无符号n)。
double dr250(void);
附加的文件:
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);


我完全是在填写MQL。顺便说一下,我的头像暗指我最喜欢的动画片,而不是我的性别。
 
以及 "生成均匀分布 的随机数(0,1)"
 
gumgum >>:


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

那么219937--叫梅森捻线器

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

 
gumgum >>:


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

在我年轻的时候,我们都认为头像应该暗指你最喜欢的那种啤酒

现在我知道啤酒在大量使用时是有害的,但仍...闲暇时可以考虑一下。

下定决心。