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

 
alsu >> :

beşinci forumda bu konuyla ilgili yeni bir makale var, yeni başlayanlar için resim ve örneklerle her şey var


Teşekkür ederim. Zaten okumak VS'yi indirmek için kalır. :)
 
Çözdüğümde yazarım, mutlaka yayınlarım.
 
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 ) ;
}

Çift bölme işlemi de oldukça yavaş olduğu için ondan kurtulursanız yine de işlemi hızlandırabilirsiniz. Örneğin şöyle:

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

Bakalım süreyi ne kadar azaltacak.

 
Yurixx >> :

Çift bölme işlemi de oldukça yavaş olduğu için ondan kurtulursanız yine de işlemi hızlandırabilirsiniz. Örneğin şöyle:

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

Bakalım süreyi ne kadar azaltacak.


Teşekkür ederim. Kontrol edeceğiz (daha sonra). Şimdi 1000000 ranD(0,32) başına eşleşme sayısını arıyorum...
 
gumgum >> :


Teşekkür ederim. Kontrol edeceğiz (daha sonra). Şimdi 1000000 ranD(0,32) başına eşleşme sayısını arıyorum...

Aşağıdaki basit test, bir dizinin kalitesini kontrol etmek için kullanışlıdır:

örneğin Excel veya Matlab'da koordinat eksenleri çizin, oluşturucuyu başlatın ve aşağıdaki koordinatlarla noktaları işaretlemeye başlayın:

(x1,x2), (x3,x4), (x5,x6), vb., ör. apsis olarak jeneratör tarafından verilen belirli bir sayıyı alıyoruz ve ordinat olarak aşağıdakileri almalıyız. Bu şekilde birkaç beklenen PRNG döngüsünün çalıştırılması (mümkünse) arzu edilir.


Jeneratörün özellikleri "iyi" ise, görünür yapı contaları olmadan tüm kareye eşit olarak yayılmış noktalar şeklinde bir resim görmeliyiz. Gözle fark edilen düzenlilikler varsa, jeneratörün dikişleri vardır - verileri arasında korelasyonlar vardır.


Bu yöntemin adını hatırlamıyorum, enstitüde bana öğretilmişti, ama her zaman harika çalışıyor. Ayrıca, akıllı istatistiksel yöntemlerle her zaman tespit edilemeyen bu tür zayıf korelasyonları bile yakalar. kullanmanızı tavsiye ederim. MQL kullanarak, en kolay yol bir CSV dosyası kullanmak ve ardından bir diyagram oluşturmaktır.

 
alsu >> :

Aşağıdaki basit test, bir dizinin kalitesini kontrol etmek için kullanışlıdır:

örneğin Excel veya Matlab'da koordinat eksenleri çizin, oluşturucuyu başlatın ve aşağıdaki koordinatlarla noktaları işaretlemeye başlayın:

(x1,x2), (x3,x4), (x5,x6), vb., ör. apsis olarak jeneratör tarafından verilen belirli bir sayıyı alıyoruz ve ordinat olarak aşağıdakileri almalıyız. Bu şekilde birkaç beklenen PRNG döngüsünün çalıştırılması (mümkünse) arzu edilir.


Jeneratörün özellikleri "iyi" ise, görünür yapı contaları olmadan tüm kareye eşit olarak yayılmış noktalar şeklinde bir resim görmeliyiz. Gözle fark edilen düzenlilikler varsa, jeneratörün dikişleri vardır - verileri arasında korelasyonlar vardır.


Bu yöntemin adını hatırlamıyorum, enstitüde bana öğretilmişti, ama her zaman harika çalışıyor. Ayrıca, akıllı istatistiksel yöntemlerle her zaman tespit edilemeyen bu tür zayıf korelasyonları bile yakalar. kullanmanızı tavsiye ederim. MQL kullanarak, en kolay yol bir CSV dosyası kullanmak ve ardından bir diyagram oluşturmaktır.


OpenOffice Calc'ım kilitleniyor. Pekala, canı cehenneme.
 
Bir tesadüf için. 1000000'de beklemekten bıktım, ancak bir geçişte 10 geçişten 100.000'de 1 maç var.
 
Eh, bu yöntem bana gösterildiğinde, kendimiz EGA ekranında noktalar çizmek için bir program yazdık ... zaman nasıl uçuyor ...
 
Yurixx >> :

Çift bölme işlemi de oldukça yavaş olduğu için ondan kurtulursanız yine de işlemi hızlandırabilirsiniz. Örneğin şöyle:

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

Bakalım süreyi ne kadar azaltacak.


10000000 ranD(1,40) hız = 37.95500000 div=1/div

10000000 ranD(1,40) hız = 26.34800000 div=div*0.5

:)

 
alsu >> :

Aşağıdaki basit test, bir dizinin kalitesini kontrol etmek için kullanışlıdır:

örneğin Excel veya Matlab'da koordinat eksenleri çizin, oluşturucuyu başlatın ve aşağıdaki koordinatlarla noktaları işaretlemeye başlayın:

(x1,x2), (x3,x4), (x5,x6), vb., ör. apsis olarak jeneratör tarafından verilen belirli bir sayıyı alıyoruz ve ordinat olarak aşağıdakileri almalıyız. Bu şekilde birkaç beklenen PRNG döngüsünün çalıştırılması (mümkünse) arzu edilir.


Jeneratörün özellikleri "iyi" ise, görünür yapı contaları olmadan tüm kareye eşit olarak yayılmış noktalar şeklinde bir resim görmeliyiz. Gözle fark edilen düzenlilikler varsa, jeneratörün dikişleri vardır - verileri arasında korelasyonlar vardır.


Bu yöntemin adını hatırlamıyorum, enstitüde bana öğretilmişti, ama her zaman harika çalışıyor. Ayrıca, akıllı istatistiksel yöntemlerle her zaman tespit edilemeyen bu tür zayıf korelasyonları bile yakalar. kullanmanızı tavsiye ederim. MQL kullanarak, en kolay yol bir CSV dosyası kullanmak ve ardından bir diyagram oluşturmaktır.


İşte ilkel bir kare. 1x1, 100 kareye bölünecek, burada 1000000 ranD(0.32)'deki isabetler

1000 ranD'de(0.32)

:) 100 ranD'de(0.32)