一様分布乱数(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を 分割する操作もかなり遅いので、これをなくせばまだまだ高速化できます。例えば、こんな風に。

{
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;
}

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


ありがとうございます。後日)確認します。今度は100万回あたりのマッチング数を調べてみると......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回通過のうち、1回マッチングが成立している。
 
ああ、この方法を教えてもらったときは、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 runD(0.32)の場合