
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
Burada Adler32 karma işlevinin çalışan bir örneğini kırptım:
Fonksiyonun ana kodu Wikipedia'dan alınmıştır ve MQL5 için biraz değiştirilmiştir. İşte betiğin çıktısı:
Gördüğünüz gibi, işlev tarafından verilen tüm değerler tamamen farklıdır, ancak dizelerin kendileri çok farklı değildir.
Neden ulong ve uint değil?
Ve bu fonksiyondaki dizilerle yapılan işlem son derece verimsizdir. Kodu modernize etmek ve unicode'u iki bağımsız karaktere ayırmak daha kolay - 50 kat daha hızlı olacak
3 milyon çalıştırmada 13822 ms'ye karşı 3681 msn.... sadece 4 kat fark... ancak dönüşüm kaybı yokEvet, kesinlikle, çünkü 32 bit bir tam sayıdır ve uzun değildir. Dürüst olmak gerekirse, 64 bit sürüm için karma işlevini yine de yeniden yapardım. Yine de, çarpışma olasılığı daha az gibi görünüyor ve bir uzmanın büyüsünü ayarlamak kolay. Öte yandan, mevcut uygulama MQL4 ile tamamen uyumlu olmasına rağmen (sonuçta içinde uzun tip yok)
PS Döngüden önce dizeyi uchar dizisine dönüştürürseniz ve döngüde zaten dizi değerleri üzerinde yinelenirseniz daha hızlı olmaz mıydı? Yine de, bir döngüde her zaman StringGetCharacter(buf, n) çağırmanın çok pahalı olduğunu düşünüyorum.
Evet, kesinlikle, çünkü 32 bit bir tam sayıdır ve uzun değildir. Dürüst olmak gerekirse, 64 bit sürüm için karma işlevini yine de yeniden yapardım. Yine de, çarpışma olasılığı daha az gibi görünüyor ve bir uzmanın büyüsünü ayarlamak kolay. Öte yandan, mevcut uygulama MQL4 ile tamamen uyumlu olmasına rağmen (sonuçta içinde uzun tip yok)
PS Döngüden önce string'i uchar dizisine çevirirseniz ve zaten döngüde sıralı olarak dizinin değerlerine göre sıralarsanız daha hızlı olmaz mıydı? Yine de, bir döngüde her zaman StringGetCharacter(buf, n) çağırmanın çok pahalı olduğunu düşünüyorum.
Bu algoritmanın yalnızca 32 bit olabileceğini anlıyorum.
Ve döngüden önceki dönüşüm hakkında - nasıl? O zaman bir diziye ihtiyacınız olacak ... dinamik ayırma ... Evet ve dönüştürürken bilgi kaybolur
Bu algoritmanın yalnızca 32 bit olabileceğini anlıyorum.
3 milyon çalıştırmada 13822 ms'ye karşı 3681 msn.... sadece 4 kat fark... ancak dönüşüm kaybı yok
dat % 256 işleminin yerine dat & 0xFF ve s = (...)%65521; s = (...); if(s>=65521) s-=65521;
А по поводу конвертации перед циклом - это как? Вам массив тогда понадобится... динамическое распределение... Да и при конвертации происходит потеря информации
İşte döngüden önceki düzenli dönüşüm:
Doğru, yine bu işlev yalnızca MQL5'te mevcuttur. Ve anladığım kadarıyla bilgi kaybı, oldukça kabul edilebilir olan Unicode --> ASCII ile gerçekleşir.
İşte döngüden önceki düzenli dönüşüm:
Doğru, yine bu işlev yalnızca MQL5'te mevcuttur. Ve anladığım kadarıyla bilgi kaybı, oldukça kabul edilebilir olan Unicode --> ASCII ile gerçekleşir .
Eh, evet ... sadece bu sizin özel görevinizde sizin için kabul edilebilir, ancak algoritma için değil.
64-bit MaHash8v64 (ulong) algoritmasına daha yakından bakın ve muhtemelen aynı anda iki grupta daha iyi (en azından kendim yapacağım)
Ve MQL4'te Unicode yok, sorun yok...
PS StringGetCharacter oldukça hızlı bir işlevdir, istenen konumdan yalnızca bir WORD ( MQL5 için ushort ) döndürür, yani. dize ile hiç çalışmıyor
Herhangi birinin bir VS uygulamasının C++ windows projesi varsa, tercihen sürüm 10 için. Projenin çalışmasında dll'yi kullanması gerekir. Şablon olarak kullanacağım.
Dll'nin MLP2HL.dll olarak adlandırılması arzu edilir.
Şimdiden teşekkürler.
Herhangi birinin bir VS uygulamasının C++ windows projesi varsa, tercihen sürüm 10 için. Projenin çalışmasında dll'yi kullanması gerekir. Şablon olarak kullanacağım.
Dll'nin MLP2HL.dll olarak adlandırılması arzu edilir.
Şimdiden teşekkürler.
Şablon burada: ...\MetaTrader 4\experts\samples\DLLSample
VS 2010 bunu otomatik olarak dönüştürecektir. İsim değiştirilebilir.Şablon burada: ...\MetaTrader 4\experts\samples\DLLSample
VS 2010 bunu otomatik olarak dönüştürecektir. İsim değiştirilebilir.Hayır, bu şablon dll'yi biliyorum. :)
Dll'nin hatalarının ayıklanabilmesi için projesi dll kaynaklarını içeren bir exe proje şablonuna ihtiyacım var. dll yürütülebilir değildir ve birisi tarafından çağrılmalıdır. VS için Intel Parallel Studio 2011'i incelemeye karar verdim.