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
Bayrakların başarıyla eşleştiğini düşünüyorum:
http://osinavi.ru/asm/4.php
ve ekstra operatörler/karşılaştırmalar için...
Anlamadığım yürütme süresindeki farka geri dönüyorum, mantıkta neredeyse% 100 aynı, kontrol sayısı ve iki döngünün toplamı:
Zaten yukarıda yazdım - kodumda daha az karşılaştırma işlemi var ...
-----
90'larda ders dışı etkinliklerden:
1) Eğer (koşullar) A, B, C bağımsızsa, olasılık arttıkça VE işlevine ve azaldıkça OR işlevine itilmelidirler.
ve eğer bağımlılarsa, tek bir ifadede birleştirilemezler (yani do if (A && B) ).
2) İç içe döngüler A, B varsa, o zaman dış döngü daha kısa olmalıdır.
3) Döngünün içinde bir koşul varsa, mümkünse döngüyü bölmek ve koşulu çıkarmak gerekir.
Zaten yukarıda yazdım - kodumda daha az karşılaştırma işlemi var ...
-----
90'larda ders dışı etkinliklerden:
1) Eğer (koşullar) A, B, C bağımsızsa, olasılık arttıkça VE işlevine ve azaldıkça OR işlevine itilmelidirler.
ve eğer bağımlılarsa, tek bir ifadede birleştirilemezler (yani do if (A && B) ).
2) İç içe döngüler A, B varsa, o zaman dış döngü daha kısa olmalıdır.
3) Döngünün içinde bir koşul varsa, mümkünse döngüyü bölmek ve koşulu çıkarmak gerekir.
1) tam tersine, yaptığınız. C'de koşullu operatörlerin yürütülmesinin özellikleri. AND operatöründeki ilk koşul yürütülmezse, neden diğer tüm koşulları kontrol edin. Bu nedenle, önce büyük olasılıkla yanlış olan koşulu kontrol ederiz.
Her ne kadar evet - öyle: bileşik bir durumda ifadelerin doğruluğu olasılığının artan düzeninde sıralama.
1) tam tersine, yaptığınız. C'de koşullu ifadelerin yürütülmesinin özellikleri.
belki yanlış yazmışımdır ama herkes hemen açıklasa nasıl olur...
A && B &&C
VE, diğer tüm koşullardan geçmemek için mümkün olan en kısa sürede başarısız olmalıdır. Yani, daha sonraki tüm zincirin yürütülmesini bozacak olan ilk yüklem koyulur. Programcı için optimize edici bunu yapmayacaktır (*) çünkü programın hangi veriler üzerinde yürütüldüğünü bilmiyor
Bir || B || C
tam tersi :-) çünkü boole aritmetiği.. !( (!A)&&(!B)&&(!C)) )
*) derleyicileri optimize etmek, koşulların bu şekilde ayarlandığı gerçeğine güvenebilir ve iç mutfağını bu varsayımlar üzerine inşa edebilir.
belki yanlış yazmışımdır ama herkes hemen açıklasa nasıl olur...
A && B &&C
VE, diğer tüm koşullardan geçmemek için mümkün olan en kısa sürede başarısız olmalıdır. Yani, daha sonraki tüm zincirin yürütülmesini bozacak olan ilk yüklem koyulur. Programcı için optimize edici bunu yapmayacaktır (*) çünkü programın hangi veriler üzerinde yürütüldüğünü bilmiyor
Bir || B || C
tam tersi :-) çünkü boole aritmetiği.. !( (!A)&&(!B)&&(!C)) )
*) derleyicileri optimize etmek, koşulların bu şekilde ayarlandığı gerçeğine güvenebilir ve iç mutfağını bu varsayımlar üzerine inşa edebilir.
Tamamen katılıyorum.
Anlamadığım yürütme süresindeki farka geri dönüyorum, mantıkta neredeyse% 100 aynı ve iki döngünün kontrol ve toplam sayısı:
Tekrar ediyorum, neden Kuznetsov'un kodundan böyle bir seçenek:
bunun iki katından daha hızlı çalışır ve tam olarak aynı şeyi yapar:
Derleyicinin harikaları nelerdir?
Gerçekten böyle bir tasarım için:
derleyici, işlemci için bazı özel montajcı arama talimatları buluyor mu? Ama içeride ek bir i<j kontrolü var mı?
sonuçta, aynı şey aşağıdakiler için gözle görülür şekilde daha yavaş yapılır:
Ekli, gösteren komut dosyası kodudur.
Bu sık sık böyle olur. Görünüşe göre gereksiz bir çöplük yapıyorsun ve kendin için çok ilginç bir şey buluyorsun.
Geliştiriciler, yürütülebilir koda bakabilir misiniz, neden böyle bir fark var?
Sonuçta, gelecekte daha optimal algoritmalar oluşturmak için derleyicinin mantığını anlamanız gerekir.
Genel olarak, garip bir durum.Sanırım çok şey derleyiciye ve testin yapıldığı makineye bağlı.İşte 32 bitlik bir makinedeki örneğinizin sonucu
Gördüğünüz gibi, özel bir avantaj yok. Ve işte son seçenekten bir diziden silme işlevlerinin bir testi.
ayrıca, bazen test sırasında sonuçlar öncekilerden çok farklı olabilir ve bunun neyle bağlantılı olduğu açık değildir, belki de MQL'de kod işlerken bazı özel kesme sistemleri
algoritmaları test ederken, almak gerekir
* veya önceden hazırlanmış veri kümeleri (gerçekte gerekli olanlara yaklaşık olarak benzer),
* veya RNG'de çok önemli sayıda geçiş yapmak,
testlerde:
* test sırasını değiştirin/karıştırın ve
* duraklamaları gözlemleyin ve her türlü önbelleği sıfırlayın
algoritmaları test ederken, almak gerekir
* veya önceden hazırlanmış veri kümeleri (gerçekte gerekli olanlara yaklaşık olarak benzer),
* veya RNG'de çok önemli sayıda geçiş yapmak,
testlerde:
* test sırasını değiştirin / karıştırın ve
* duraklamaları gözlemleyin ve her türlü önbelleği sıfırlayın
Peki, önceden hazırlanmış verileri nasıl kullanırdık. Tüm fonksiyonları test etmek için aynı veriler kullanılır. Ancak karıştırma / değiştirme pahasına, evet. Testlerin sırasını değiştirirseniz bir fark fark ettim. Ancak önbellekler nasıl sıfırlanır?
algoritmaları test ederken, almak gerekir
* veya önceden hazırlanmış veri kümeleri (gerçekte gerekli olanlara yaklaşık olarak benzer),
* veya RNG'de çok önemli sayıda geçiş yapmak,
testlerde:
* test sırasını değiştirin / karıştırın ve
* duraklamaları gözlemleyin ve her türlü önbelleği sıfırlayın
insanları kandırmaya gerek yok