Hatalar, hatalar, sorular - sayfa 1782

 
-Aleks- :

Ve hangileri çalışıyor?

Önemli rakamların kaybolması ve rastgele işlerle doldurulması kuralı

Sonuç uzun, ancak ara hesaplamalarda iki katına çıkıyor ve içlerinde önemli rakamlar kayboluyor.

(Rakamlar+1)*3-1=17

 
A100 :

Önemli rakamları kaybetme ve bunları rastgele işlerle doldurma kuralı

Sonuç uzun, ancak ara hesaplamalarda iki katına çıkıyor ve içlerinde önemli rakamlar kayboluyor.

(Rakamlar+1)*3-1=17

Bilgi için teşekkürler.

Ancak, bilgilerin sığdırılması zordur - yani. Bir sayı böyle olabilir, ancak onunla hesaplama yapamaz mısınız?

İşte bir dizeden bir sayıya dönüşümün olduğu bir kod örneği

long CalcY= StringToDouble ( "111111111111111111" );
Print ( "CalcY=" ,CalcY);

111111111111111104 numarasını yazdırır

Onlar. burada bir hesaplama yok, yoksa yanılıyor muyum?

Bu tür sayılarla işlem yapmak mümkün mü yoksa dil sınırlaması mı var?

 
-Aleks- :

Onlar. burada bir hesaplama yok, yoksa yanılıyor muyum?

Hesaplamalar - herhangi bir işlem ( bu durumda dönüşüm) . Belirtilen sayı için StringToDouble , hassasiyet kaybıyla bir çift döndürür

StringToInteger uzun dönecek, ancak kesinlik kaybı olmadan sonraki hesaplamalar double ile çalışan işlevleri kullanamaz, örneğin: NormalizeDouble, MathPow

 
A100 :

Hesaplamalar - herhangi bir işlem ( bu durumda dönüşüm) . StringToDouble çift döndürür - hassasiyet kaybı oluşur

StringToInteger uzun dönecektir, ancak kesinlik kaybı olmadan sonraki hesaplamalar double ile çalışan işlevleri kullanamaz, örneğin: NormalizeDouble, MathPow,

StringToInteger ile bir sayıyı ifade etmek mümkündü, ancak o zaman zaten çöp, matematiksel işlemler için sayıyı bir şekilde bileşenlere ayırmanız gerekiyor ...

long CalcZ= StringToInteger ( "111111111111111111" );
Print ( "CalcZ=" ,CalcZ);

double Test=CalcZ;
Print ( "Test=" ,Test);

Test=1.111111111111111e+17

 

Yine yardımda yazıyor

INT_MAX

Bir int ile temsil edilebilecek maksimum değer

2147483647

Öyleyse , sayı izin verilenden daha büyükse, dönüştürme StringToInteger aracılığıyla nasıl oldu ve uzun süre kaldı?

 
-Aleks- :

Öyleyse , sayı izin verilenden daha büyükse, dönüştürme StringToInteger aracılığıyla nasıl oldu ve uzun süre kaldı?

StringToInteger başlangıçta LONG_MIN LONG_MAX içinde bir uzun döndürür (StringToKolobok olarak da adlandırılabilir)

 
A100 :
StringToInteger başlangıçta bir uzun döndürür (StringToKolobok olarak da adlandırılabilir)

Bu, elbette, görünüşe göre öyle, ama yardımda çok zordu

"

Bir sayının karakter gösterimini içeren bir dizgiyi int (tamsayı) sayıya dönüştürme.

"

bu yanıltıcıydı.

Bilgi için teşekkürler.

Yukarıdaki sayının grafik arabelleğine sığmayacağını anlıyorum?

 
-Aleks- :

Yukarıdaki sayının grafik arabelleğine sığmayacağını anlıyorum?

Bu formda yazılırlar B'111111111111111111111111111111111'

 
A100 :

Zaman çerçevesini M5'ten M15'e değiştirirken, ilk göstergeye (ve sadece ona - bu durumda M5) hiçbir M5 Deinit komutunun gönderilmediğini ve şu ana kadar grafikten boşaltılmayacağını iddia ediyorum (ve bunu kontrol etmeyi öneriyorum). kullanıcı uzmanı siler

Slava haklı ve yükleme düzgün çalışıyor.

Lütfen MT5'te göstergenin hesaplama çekirdeğinin, kendi yöneticisinde bir kullanım sayacı ile paylaşılan bir kaynak olduğunu unutmayın. Farklı programlarda veya pencerelerde aynı parametrelere sahip bir gösterge kullanılıyorsa, aslında kullanım sayacı ile hesaplanmış bir kopya çalışır. Bu, bir tüccar grafiklerde ve Expert Advisor'da aynı göstergeleri kullandığında çok tasarruf etmenizi sağlar.

Gösterge yöneticisi, göstergeleri eşzamansız ve gecikmeli olarak fiziksel olarak kaldıracak şekilde tasarlanmıştır. Bu arada, genellikle eski kopya fiziksel olarak silinmeden önce başlatılan yeni parametrelerle yeni bir çalışma kopyası oluşturulur.
 
Renat Fatkhullin :
Gösterge yöneticisi, göstergeleri eşzamansız ve gecikmeli olarak fiziksel olarak kaldıracak şekilde tasarlanmıştır. Bu arada, genellikle eski kopya fiziksel olarak silinmeden önce başlatılan yeni parametrelerle yeni bir çalışma kopyası oluşturulur.

Göstergeyi basitleştirelim

//Test_i.mq5 //Индикатор
void Prn( string f, int i = - 1 ) { Print ( f, "->" , StringSubstr ( EnumToString ( Period ()), 7 ), (i == - 1 ? "" : ":" + i )); }
void OnInit ()                    { Prn( __FUNCTION__ );         }
void OnDeinit ( const int reason ) { Prn( __FUNCTION__ , reason ); }
int OnCalculate ( const int , const int , const int , const double & [] ) { return 0 ; }

Test.mq5 Expert Advisor'ı M5 grafiğine ekleyelim ve ardından M5->M15 grafik periyodunu değiştirelim.

Sonuç:

2017.02.06 00:54:20.897 OnInit->M5
2017.02.06 00:54:25.553 OnInit->M15

Soru: OnDeinit->M5 ne zaman çağrılacak?

Cevabım: Asla!

Yukarıdaki cevabınız: eşzamansız ve gecikmeli

Dosyalar:
Test.mq5  1 kb