MQL4 ve MQL5'te Rakamları () atlayarak herhangi bir sayıdan (sadece tırnak işaretleri değil) sonra ondalık basamak sayısını alma - sayfa 22
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
ihtiyacım yok.
Yükleyici denir, değil mi? ..
Burada, her türden her döngüden önce rastgele seçilmiş, tamamen rastgele 10.000 öğeden oluşan bir dizi verilmiştir. Her yöntemin 1000 tekrarı için toplam süre (ms).
Yerleşik ArraySort, birkaç gün önce yazdığım yöntemim (bundan önce sıralama algoritmalarıyla hiç ilgilenmiyordum) ve her şeyi yapmama rağmen kitaplığınızdaki en iyi 6 yöntem (gerisi çok daha kötüydü) oradan kaldırılan grafiklerle ilgiliydi...
Yükleyici denir, değil mi? ..
Burada, her türden her döngüden önce rastgele seçilmiş, tamamen rastgele 10.000 öğeden oluşan bir dizi verilmiştir. Her yöntemin 1000 tekrarı için toplam süre (ms).
Yerleşik ArraySort, birkaç gün önce yazdığım yöntemim (bundan önce sıralama algoritmalarıyla hiç ilgilenmiyordum) ve her şeyi yapmama rağmen kitaplığınızdaki en iyi 6 yöntem (gerisi çok daha kötüydü) oradan kaldırılan grafiklerle ilgiliydi...
Makaledeki videoya bakılırsa, en hızlı olanlar Count, LSD ve MSD'dir.
Makaledeki videoya bakılırsa, en hızlı olanlar Count, LSD ve MSD'dir.
Bu pasajların tamamlanmasını beklemedim.
Ondalık noktadan sonra ondalık basamak sayısını almak gerektiğinde nadir bir durum yaşayan tek ben değilim sanırım ve Digits() işlevi yalnızca tırnak işaretleri ile çalışıyor ve ayrıca bu konuda hiçbir bilgi yok herhangi bir yerde (en azından bu yazıyı daha önce yazarken bulamadım, bu yüzden bulduğum çözümü göstermek istiyorum)?
Görünüşe göre, öz çok basit, ancak yine de bir dezavantajı var - onlardan sonra başka basamak yoksa bu işlev sıfırları tanımıyor. Örneğin, fonksiyona 0,01 sayısı verilirse 2, 0,0000 ise 0 döndürür (yani dört sıfır görmez). Bu nedenle, geliştirmelerinizde bu eksikliği göz önünde bulundurun.
MQL4'teki kod
MQL5'teki kod
MQL5'teki kodun biraz iyileştirilmesi gerekiyordu, çünkü görünüşe göre MQL5'te double türündeki değişkenler, kendisine bir tamsayı atanıp atanmadığına bakılmaksızın, sonunda otomatik olarak ,0 atanır. Ve bu nedenle fonksiyon asla 0 döndürmedi
Konu alakalıysa, işte benim versiyonum:
int kol_Z(double zzz) { // ondalık basamak sayısını hesapla
Konu alakalıysa, işte benim versiyonum :
Misal:
Sonuç: 5, ancak 6 olmalıdır
Misal:
Sonuç: 5, ancak 6 olmalıdır
Ondalık basamak sayısını saymanın en kolay yolu ?". Bilgisayara, sahip olduğu mantis boyuna göre kesmesi gereken bir sayı verdikten sonra, bu sonsuz periyodik kesrin sonu nerede diye sormak nasıl mümkün olabilir?
0.0001100110011001100110011(0011) - ikili gösterimde ondalık sayı 0.1. Parantez içinde sonsuz bir kesrin periyodik kısmıdır. Peki, sonsuz sayıdan yalnızca ilk 52 anlamlı basamağı çift olarak saklanırsa, bilgisayar ne cevap vermelidir?
Ondalık gösterimdeki (0.33333...) çok kısa üçlü sayı 0.1'in ondalık noktadan sonra sonsuz sayıda anlamlı basamağa sahip olmasına kimse şaşırmaz. İkili 0.1, şans eseri sonlu sayıda basamakla ondalık 0,5'e eşittir, ortak bir bölen bulundu ve 2 ve 10 sayı sistemlerinin iki tabanında indirgendi, bu 2'dir. Her iki gösterimdeki yarının dereceleri de iyidir: 0,5 => 0,1; 0,05 => 0,01 ; 0.025 => 0.001; 0.0125 => 0.0001. Ancak kesrin paydasında 5 göründüğü anda - hepsi bu, çok sayıda önemli sayı var.
Kesirli kısımdaki anlamlı basamak sayısı, sadece sayının büyüklüğü ile değil, gösterimde kullanılan karakter sayısı ile ilgilidir.
Üç kez başlatıldı. Lider doğrudan yeleye nefes alır... Herhangi birinin ihtiyacı olursa, işlev burada - https://www.mql5.com/en/code/904 , işlevin adı SortHoareUp.
Üç kez başlatıldı. Lider doğrudan yeleye nefes alır... Herhangi birinin ihtiyacı olursa, işlev burada - https://www.mql5.com/en/code/904 , işlevin adı SortHoareUp.
Ayrıca stat'den MathQuickSort () vardır. kitaplıklar (#include <Math\Stat\Math.mqh>). Çok, çok hızlı bir kütüphanenin yazdığı bir makale olduğunu hatırlıyorum)
Hızı ölçmedim, esas olarak orijinal dizinin bir dizi indeksini kaydetme yeteneği nedeniyle kullanıyorum.
Ondalık basamak sayısını saymanın en kolay yolu ?". Bilgisayara, sahip olduğu mantis boyuna göre kesmesi gereken bir sayı verdikten sonra, bu sonsuz periyodik kesrin sonu nerede diye sormak nasıl mümkün olabilir?
0.0001100110011001100110011(0011) - ikili gösterimde ondalık sayı 0.1. Parantez içinde sonsuz bir kesrin periyodik kısmıdır. Peki, sonsuz sayıdan yalnızca ilk 52 anlamlı basamağı çift olarak saklanırsa, bilgisayar ne cevap vermelidir?
Ondalık gösterimdeki (0.33333...) çok kısa üçlü sayı 0.1'in ondalık noktadan sonra sonsuz sayıda anlamlı basamağa sahip olmasına kimse şaşırmaz. İkili 0.1, şans eseri sonlu sayıda basamakla ondalık 0,5'e eşittir, ortak bir bölen bulundu ve 2 ve 10 sayı sistemlerinin iki tabanında indirgendi, bu 2'dir. Her iki gösterimdeki yarının dereceleri de iyidir: 0,5 => 0,1; 0,05 => 0,01 ; 0.025 => 0.001; 0.0125 => 0.0001. Ancak kesrin paydasında 5 göründüğü anda - hepsi bu, çok sayıda önemli sayı var.
Kesirli kısımdaki anlamlı basamak sayısı, sadece sayının büyüklüğü ile değil, gösterimde kullanılan karakter sayısı ile ilgilidir.
Çözülecek problemin şartlarına karar vermeye başlamakta fayda var. Sayıların bilgisayardaki temsiline ilişkin teorik bir çalışmadan bahsediyorsak, bu çalışmanın amacının daha fazla açıklığa kavuşturulması gerekir.
Soru, NormalizeDouble() işlevine ikinci argüman olarak hangi tamsayı sağlanacağı ise, yanıt aynı işlev kullanılarak aranmalıdır. Bu, normalleştirilmiş sayının orijinale eşit olacağı 0 ile 8 arasındaki minimum tam sayı olacaktır. Böyle bir tam sayı yoksa, orijinal sayı yanlıştır. Burada, minimum hacim adımı için karakter sayısının hesaplandığı bir kod örneği verilmiştir.