4. forumda defalarca tartışıldı. MathRand'i aramak 15 sayfadan fazla sonuç döndürür
Örneğin, bu konular:
https://www.mql5.com/ru/forum/123337
https://www.mql5.com/ru/forum/111855
- www.mql5.com
Lütfen bana MathRand()'ın nasıl değerler aldığını söyleyin.
MathRand()'ın belirtilen aralıkta eşit olarak dağıtılması beklenebilir mi?
Uzun zaman önce php ile kontrol ettim.
Görünüşe göre çok sayıda rastgele sayı üretiliyor ve ardından bir grafik oluşturuluyor.
Veya örneğin, kaba bir tahmin için aynı sayıların sayısını bulabilirsiniz.
Birkaç yüz sayı üretin ve bir dosyaya yazın, ardından en azından excel'de bir grafik oluşturun.
dize ,
Okumak için önerilen tüm bağlantılarda ustalaşmadım))
Mesajların sayısına ve tartışmadaki katılımcıların kompozisyonuna bakarak şu sonuca vardım:
- MathRand()'ı güvenle kullanabilirsiniz
- yeterli "çözünürlük" 0..32767 yoksa, MathRand()*MathRand() alabilirsiniz, - dağılım bir yönde güçlü bir şekilde "çarpık" olmaz
mrProF ,
Kaba bir tahmin yapmak kolaydır
int A[32768];
(int i=0; i<100000000; i++) için
A[MathRand()]++;
ama neden?
benim amaçlarım için geliştiricilerin yorumu yeterli
benim amaçlarım için geliştiricilerin yorumu yeterli
Geliştiriciler MathRand'i kendi başlarına geliştirmediler, ancak çağrı çevirisini doğrudan CRT işlevleri srand ve rand'a uyguladılar.
Genel kullanım için iyi.
- www.mql5.com
Bulanık mantık algoritmalarında ağırlıkları rastgele değiştirmem gerekiyor
asıl mesele, bir yönde sürekli "tıkanma" olmamasıdır.
tabii ki "hoo" için teşekkürler, ama benim durumumda gereksiz))
hesaba
" - yeterli "çözünürlük" 0..32767 yoksa, o zaman MathRand()*MathRand() alabilirsin, - dağılım bir yönde güçlü bir şekilde "çarpık" olmaz "
Heyecanlandım...
beklenti aralığın ortasının soluna kayacak (bundan şüpheleniyorum 1/4 * 32768^2 , ama artık hiçbir şeyden emin değilim)
genel olarak, ifadem yanlıştı
hesaba
" - yeterli "çözünürlük" 0..32767 yoksa, o zaman MathRand()*MathRand() alabilirsiniz, - dağılım bir yönde güçlü bir şekilde "çarpık" olmaz "
Heyecanlandım...
beklenti aralığın ortasının soluna kayacak (bundan şüpheleniyorum 1/4 * 32768^2 , ama artık hiçbir şeyden emin değilim)
genel olarak, ifadem yanlıştı
hmslo drange [0, (2^rstep)-1]
long ranD( int rstep) { long div= 1 ; long r= 0 ; for ( int i= 1 ;i<=rstep;i++) { if ( MathRand ()+ 1 > 16383.5 ){ if (i== 1 ){r= 1 ;} else {r+=div;}} div=div* 2 ; } return (r); }
Long yerine int, double veya ulong kullanabilirsiniz.
sakız ,
rstep [0, 2^rstep-1] - bu parametrenin ne olduğunu anlamadı
Soru:
double değişkeninin, örneğin 8. ondalık basamağa kadar doğrulukla rastgele değiştirilmesi gerekir
MathRand()/32768, 0,00003'lük bir adım verecektir - yeterli değil
MathRand() kullanılarak 0.00000001 ayrıklığı ile (0..1) rastgele değer üzerinde eşit olarak nasıl dağıtılır?
sakız ,
rstep [0, 2^rstep-1] - bu parametrenin ne olduğunu anlamadı
Soru:
double değişkeninin, örneğin 8. ondalık basamağa kadar doğrulukla rastgele değiştirilmesi gerekir
MathRand()/32768, 0,00003'lük bir adım verecektir - yeterli değil
MathRand() kullanılarak 0.00000001 ayrıklığı ile (0..1) rastgele değer üzerinde eşit olarak nasıl dağıtılır?
rsign=1 (-1,1) ile rsign=0 (0,1) ile
double ranD( int rsign, int rstep) { double div= 2 ; double r= 0 ; for ( int i= 1 ;i<=rstep;i++) { if ( MathRand ()+ 1 > 16383.5 ){r+= 1 /div;} div=div* 2 ; } if (rsign== 1 ) { r= 2 *r- 1 ; } return (r); }
rstep derecedir

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Lütfen bana MathRand() 'ın değerleri nasıl aldığını söyleyin.
MathRand()'ın belirtilen aralıkta eşit olarak dağıtılması beklenebilir mi?