生成均匀分布的随机数(0,1)。 - 页 11

 
alsu >>:

на пятом форуме есть свежая статья на эту тему, там все для начинающих с картинками и примерами


谢谢你。我已经读过了,现在我只需要完成下载VS。:)
 
当我想通了,我一定会把它贴出来。
 
gumgum писал(а)>>
double ranD(int rsign,int rstep)
{
double div=2;
double rand=0; 
   for(int i=1; i<= rstep; i++)
   {
   //if(MathRand()+1>16383.5){rand+=MathPow(2,-i);}
   if(MathRand()+1>16383.5){rand+=1/ div;}
   div= div*2;   
   }
      if( rsign==1)
         {
         rand=2*rand-1;
         }
return(rand);
}

由于除以双数 的操作也相当缓慢,如果你摆脱了它,你仍然可以加快程序。例如,像这样。

{
double div=0.5;
double rand=0;
for(int i=1; i<= rstep; i++)
{
//if(MathRand()+1>16383.5){rand+=MathPow(2,-i);}
if(MathRand()+1>16383.5){rand+= div;}
div= div*0.5;
}

我想知道它能缩短多少时间。

 
Yurixx >>:

Поскольку операция деления double тоже довольно медленная, то можно еще ускорить процедуру если избавиться от нее. Например так:

{
double div=0.5;
double rand=0;
for(int i=1; i<= rstep; i++)
{
//if(MathRand()+1>16383.5){rand+=MathPow(2,-i);}
if(MathRand()+1>16383.5){rand+= div;}
div= div*0.5;
}

Интересно, насколько это сократит время.


谢谢你。我们将检查它(稍后)。现在寻找每1000000个ranD(0.32)的匹配数...
 
gumgum >>:


Спасибо. Сейчас проверим(позже). Сейчас ищу кол-во совпадений на 1000000 ranD(0,32)...

为了检查序列的质量,以下的简单测试是有用的。

绘制坐标轴,例如在Excel或Matlab中,运行生成器并开始用以下坐标标记点。

(x1,x2), (x3,x4), (x5,x6), 等等,也就是说,作为尾数,我们采取由发生器给出的一些数字,而作为序数--必然是以下数字。以这种方式运行一些预定的PRNG循环是可取的(如果可能的话)。


如果发生器的特性是 "良好的",我们应该看到一个图片,其形式是在广场周围均匀分布的小点,没有明显的结构压实。如果有明显的规律性,就意味着发电机有问题--其数据之间有关联性。


我不记得这个方法的名称了,我是在学院里学的,但它总是很有效。而且它甚至能捕捉到这种弱的关联,而机智的统计方法并不总是能发现这些关联。我建议使用它。使用MQL工具的最简单方法是使用CSV-文件,然后建立一个图表。

 
alsu >>:

Для проверки качества последовательности полезен следующий простой тест:

рисуем координатные оси, например, в Екселе или Матлабе, запускаем генератор и начинаем отмечать точки со следующими координатами:

(х1,х2), (х3,х4), (х5,х6), и т.д., т.е. в качестве абсциссы берем некое число, выдаваемое генератором, а в качестве ординаты - обязательно следующее. Желательно (если это возможно) прогнать так несколько предполагаемых циклов ГПСЧ.


Если характеристики генератора "хорошие", мы должны увидеть картинку в виде равномерно растыканных по всему квадрату точек без видимых уплотнений структуры. Если же имеются заметные глазу регулярности, значит генератор швах - между его данными имеются корреляции.


Не помню, как этот метод называется, меня ему еще в институте научили, но работает всегда замечательно. Причем вылавливает даже такие слабые корреляции, которые вумными статистическими методами не всегда поддаются выявлению. Советую воспользоваться. Средствами MQL проще всего через CSV-файл и потом построить уже диаграммку.


我的OpenOffice Calc挂掉了。所以,管它呢。
 
在1000000时,我已经厌倦了等待,但在100000时,在10次传球中,已经有一次匹配。
 
是的,当我被展示这种方法时,我们正在自己写一个程序,在EGA屏幕上画点。时光飞逝
 
Yurixx >>:

Поскольку операция деления double тоже довольно медленная, то можно еще ускорить процедуру если избавиться от нее. Например так:

{
double div=0.5;
double rand=0;
for(int i=1; i<= rstep; i++)
{
//if(MathRand()+1>16383.5){rand+=MathPow(2,-i);}
if(MathRand()+1>16383.5){rand+= div;}
div= div*0.5;
}

Интересно, насколько это сократит время.


10000000 ranD(1,40) speed = 37.95500000 div=1/div

10000000 ranD(1,40) speed = 26.34800000 div=div*0.5

:)

 
alsu >>:

Для проверки качества последовательности полезен следующий простой тест:

рисуем координатные оси, например, в Екселе или Матлабе, запускаем генератор и начинаем отмечать точки со следующими координатами:

(х1,х2), (х3,х4), (х5,х6), и т.д., т.е. в качестве абсциссы берем некое число, выдаваемое генератором, а в качестве ординаты - обязательно следующее. Желательно (если это возможно) прогнать так несколько предполагаемых циклов ГПСЧ.


Если характеристики генератора "хорошие", мы должны увидеть картинку в виде равномерно растыканных по всему квадрату точек без видимых уплотнений структуры. Если же имеются заметные глазу регулярности, значит генератор швах - между его данными имеются корреляции.


Не помню, как этот метод называется, меня ему еще в институте научили, но работает всегда замечательно. Причем вылавливает даже такие слабые корреляции, которые вумными статистическими методами не всегда поддаются выявлению. Советую воспользоваться. Средствами MQL проще всего через CSV-файл и потом построить уже диаграммку.


这里有一个原始的,我拿了一个1x1的方块除以100个方块,这里是1000000时的命中率ranD(0.32)。

在1000个ranD(0,32)时

:) 在100,000 ranD(0.32)