Errori, bug, domande - pagina 2360

 
Aliaksandr Hryshyn:

Errore per gli sviluppatori.

Lo script non si compila, identificarne il motivo)). Utilizzare il file allegato.


Stesso file:


Tutte le compilazioni, rimuovere la linea di errore

 
Vladimir Pastushak:

Tutto si compila, cancellare la linea Errore

limitazione della lunghezza delle linee nell'editor

 
Fast528:

Limitare la lunghezza di una linea nell'editor

Una stringa non viene visualizzata quando diventa più lunga di 4095 caratteri.

 
fxsaber:

Per favore, spiegate a un pazzo perché questo accade qui?

Supponiamo di poter operare solo su numeri dispari, e se il risultato di un'operazione aritmetica diventa pari, si assume che sia il numero dispari più vicino dall'alto, allora

(43 -  5) - 7  = (38)39 - 7  = (32)33
 43 - (5  + 7) = 43 - (12)13 = (30)31 

33 != 31

 
fxsaber:
Ho passato diverse ore a cercare le divergenze. Ho trovato questo


Le peculiarità doppie si conoscono, ma non tali che se si cambia l'ordine di addizione (tranne che per i numeri relativamente molto diversi), il risultato è diverso! Per favore, spiegate a un pazzo perché questo accade qui?

Basta guardare le due righe in basso nella fonte.

Come lei stesso ama dire, l'agolito che si stabilisce per la precisione dell'arrotondamento del doppio allo stesso numero al limite della precisione specificata è "storto". La ragione, ovviamente, è che lo stesso valore ottenuto con metodi diversi (scambiando i moltiplicatori, aprendo le parentesi, ecc.) nella rappresentazione doppia può risultare in numeri diversi, massimamente vicini a quello desiderato da lati diversi. Arrotonda alla cifra successiva, e poi decidi come trattare l'ultima...

 
fxsaber:

Quando si fa size+point, si fa un overflow della mantissa seguito da arrotondamento/rifiuto (a seconda della modalità della fpu).

   float avg = 0.7;
   float size = 0.3;
   float point = 0.4;

   float r1 = avg - size - point;
   float r2 = avg - (size + point);
   cout << "r1 == r2 ? " << (r1 == r2) << '\n';

   cout << "-----avg-----\n";  prfl(avg);
   cout << "-----size-----\n"; prfl(size);
   cout << "-----point-----\n"; prfl(point);
   cout << "-----avg - size------\n"; prfl(avg - size);
   cout << "-----(avg - size) - point------\n"; prfl((avg - size) - point);
   cout << "-----size + point------\n"; prfl(size + point);
   cout << "-----avg - (size + point)------\n"; prfl(avg - (size + point));
r1 == r2 ? 0
-----avg-----
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
exponenta = -1
sign = 0
-----size-----
implicit_1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0
exponenta = -2
sign = 0
-----point-----
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1
exponenta = -2
sign = 0
-----avg - size------
implicit_1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
exponenta = -2
sign = 0
-----(avg - size) - point------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -25
sign = 1
-----size + point------
implicit_1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 0
exponenta = -1
sign = 0
-----avg - (size + point)------
implicit_1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
exponenta = -24
sign = 1

In generale, il risultato di due doppietti sarà lo stesso solo se sono ottenuti nello stesso modo (a meno che non si contino i casi in cui si tratta di interi).

 
A100:
Ilya Malev:
pavlick_:

Grazie per le risposte, ognuna è stata preziosa. Per la prima volta ho incontrato (notato) che aggiungendo gli stessi elementi al PREZZO, ma in sequenza diversa si creano PREZZI diversi. Quindi risultati diversi nel Tester.

Quando si parlava di dub, era chiaro quando e perché potevano essere paragonati l'uno all'altro. Ma il prezzo più punti e il diverso risultato di uscita è la prima volta che il risultato del TC è stato così chiaramente influenzato.


Si scopre che per evitare queste ambiguità, dobbiamo aggiungere una mezzana in meno di mezzo punto al prezzo calcolato, e poi normalizzare.

 
fxsaber:

Si scopre che per evitare queste ambiguità, dobbiamo aggiungere al prezzo calcolato una semplice frazione inferiore a mezzo punto, e poi normalizzare.

E c'è anche un'opinione che se i risultati del TC cambiano molto da cose così insignificanti, si dovrebbe dire "grazie" e buttare tale TC nella spazzatura.

 
fxsaber:

Grazie per le risposte, ognuna è stata preziosa. Per la prima volta ho riscontrato (notato) che aggiungendo gli stessi elementi a un PREZZO, ma in una sequenza diversa, si creano PREZZI diversi. Quindi risultati diversi nel Tester.

Quando si parlava di dub, era chiaro quando e perché potevano essere paragonati l'uno all'altro. Ma il prezzo più punti e il diverso risultato di uscita è la prima volta che il risultato del TC è stato così chiaramente influenzato.


Si scopre che per evitare queste ambiguità, dobbiamo aggiungere una mezzana in meno di mezzo punto al prezzo calcolato, e poi normalizzare.

Forse vale la pena mappare le caratteristiche?

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2017.02.24
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Ilya Malev:

E c'è anche l'opinione che se i risultati di un TC cambiano molto da cose così piccole, si dovrebbe dire "grazie" e buttare tale TC nella spazzatura.

Non cambiano molto, cambiano e basta. Questo è sufficiente per iniziare un'indagine.