Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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?
işte bir örnek, elbette başka, daha karmaşık algoritmalar da var ...
rand.c kaynağı:
RNG işlevi, Int sayısının 0'dan herhangi bir değere üretilmesi için gerekliydi.
Int'nin maksimum değeri = 2 147 483 647 olduğu için ona kadar hesaplıyoruz
Böyle bir fonksiyon var. Bence dağılım eşit .
Makalenin 4294967295'e kadar bir jeneratörü var
SB Alglib, yüksek hassasiyetli bir jeneratöre sahiptir
UPD: Bununla uğraşmaya çalıştım https://www.mql5.com/ru/forum/324066#comment_13500222 , işe yarıyor gibi görünüyor, ancak MQL5'te Alglib ile ilgili herhangi bir belge yok, Alglib web sitesini okumanız gerekiyor
Makalenin 4294967295'e kadar bir jeneratörü var
Teşekkürler, hesaplamaların hızını karşılaştırdım.
Standart Rand() üzerindeki işlevim 2 kat daha yavaş çıktı. Kod çok daha basit gibi görünse de ...
SB Alglib, yüksek hassasiyetli bir jeneratöre sahiptir
UPD: Bununla uğraşmaya çalıştım https://www.mql5.com/ru/forum/324066#comment_13500222 , işe yarıyor gibi görünüyor, ancak MQL5'te Alglib ile ilgili herhangi bir belge yok, Alglib web sitesini okumanız gerekiyor
Evet gördüm ama alglibsiz istiyorum. Ayrıca, bu fonksiyon kütle */% içerir. Hızı karşılaştırmadım, açıkçası daha yavaş. Makaledeki oluşturucu, bit düzeyinde ofsetlerle çalışır - hızlıdır.
Hızı optimize etmek için f-th'imi yeniden yazdım:
Dağılım eşit çıktı. https://www.mql5.com/en/blogs/post/735953 blogunda deneyin resimlerine bakınMakaleden RNG'yi yeniden yazdı.
Fazlalığı attı, işte olanlar:
Dağılım da tekdüzedir.
Her iki işlevin de hız karşılaştırmasını yaptım, makaledeki orijinali ve yalnızca MathRand():
Orijinal makale Rnd.Rand_01() - 602msrnu.Rand_01() makalesi ile kısaltılmıştır - 596 ms
Optimize edilmiş RandomInteger() sürümüm 840ms (eski sürüm 1200ms, yani %25 hızlandırılmış)
Basitçe MathRand() ile - 353 ms (en hızlı, ancak dağılım eşit olmayacak. Gerekli sayıların aralığı 32767'den fazlaysa, sonuç boşluklarla olacaktır. 32767'den küçükse, örneğin i=31111 , sonra bazı noktalara yuvarlama daha sık gerçekleşir.)
eğlence)
neden işleri bu kadar karmaşık hale getiriyorsun?
bunu şöyle yapabilirsiniz (kabaca konuşursak):
Ve etrafta oynamak veya ne gösterdiğini görmek istiyorsanız, şöyle yapın:
ve değerleri nasıl değiştirdiğini görün.
Hızı optimize etmek için f-th'imi yeniden yazdım:
Dağılım eşit çıktı. https://www.mql5.com/en/blogs/post/735953 blogunda deneyin resimlerine bakınMakaleden RNG'yi yeniden yazdı.
Fazlalığı attı, işte olanlar:
Dağılım da tekdüzedir.
Referanstan gelen dağılımla karşılaştırıldığında, farkı görmüyorum