Errori, bug, domande - pagina 2761

 
Aleksey Mavrin:

0xFF è probabilmente trasformato in 4 byte dal compilatore.

no, ma si inizializza correttamente

uchar uc[16];
ArrayInitialize(uc,(uchar)0xFF); // truncation of constant value        
ArrayPrint(uc);                  //     255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
 

Buon pomeriggio, per favore consigliate come risolvere il problema:

Durante l'ottimizzazione appare un errore:

2020.05.31 15:05:32.738 Core 7 genetico passaggio (0, 53) testato con errore "errore critico di runtime 503 nella funzione OnTick (zero divide, modulo Experts\e1.ex5, file e1.mq5, linea 826, col 73)" in 0:00:00.153

double Mix1 = NormalizeDouble((MathAbs(ZExtLevel[0] - ZExtLevel[1]), 2)

double Mix2 = NormalizeDouble((MathAbs(ZExtLevel[1] - ZExtLevel[2])), 2);

double Mix = NormalizeDouble((Mix1/Mix2),2);

Cosa ho fatto:

1) Ho moltiplicato Mix1 e Mix2 per ridurre il numero di cifre decimali;

2) ha cambiato la quantità di cifre nella normalizzazione;

3) Controllato tutti gli ZExtLevels per assicurarsi che non contengano 0.


 
Igor Makanu:

No, ma si inizializza correttamente

Perché sei sicuro che non sia così? Il default in Integer è di presentare. la dimensione di dice così.

 
Aleksey Mavrin:

Perché sei sicuro che non sia così? Il default in Integer è di presentare. sizeof dice che lo fa.

uint, per essere precisi.

 
Aleksey Mavrin:

Perché sei sicuro che non sia così? Il default in Integer è di presentare. la dimensione di dice così.


funziona anche senza avvertimenti?

char c[16];
ArrayInitialize(c, 127);

Perché c'è una firma corrispondenteArrayInitialize

int  ArrayInitialize(
   char    array[],     // инициализируемый массив
   char    value        // значение, которое будет установлено
   );

e per qualche ragione sconosciuta non hanno creato ArrayInitialize() per unsigned uchar

 
Igor Makanu:

funziona allo stesso modo senza avvertimenti?

perché c'è una firma corrispondente ArrayInitialize

e per un unsigned uchar non hanno fatto ArrayInitialize() per qualche ragione sconosciuta.

Non si tratta della firma o dell'assenza di essa. Il punto è che 4 byte sono convertiti in 1 e l'informazione può teoricamente essere persa - questo è ciò di cui avverte il compilatore.

ProvaArrayInitialize(c, (char)10000);

ci sarà anche un avvertimento

 
Aleksey Mavrin:

Non si tratta della firma o della sua mancanza. Il punto è che 4 byte sono convertiti in 1, l'informazione può teoricamente essere persa - questo è ciò di cui avverte il compilatore.

ProvaArrayInitialize(c, (char)10000);

ci sarà anche un avvertimento

Beh, era chiaro fin dall'inizio

La domanda è qui in un modo diverso - dove avete davvero bisogno di carbone?

Uso uchar in StringToCharArray() e CryptEncode() e se guardate nell'aiuto troverete altro

Ecco perché posso inizializzare un array di char usando ArrayInitialize, ma uchar non posso farlo


Ok, questo è un gran baccano, dubito che cambierà ;)


PS: 0xFF = 255 (1 byte)

 
Igor Makanu:

Sì, è chiaro che era tutto dall'inizio

qui la domanda è diversa, è qui che il carbone è veramente necessario?

Io uso uchar in StringToCharArray () e CryptEncode (), e se andate nell'aiuto ci sono ancora

ecco perché posso inizializzare un array di char usando ArrayInitialize, ma uchar non può


ok, il nobile holivar si è rivelato, dubito che qualcosa cambierà;)


PS: 0xFF = 255 (1 byte)

ArrayInitialize (uc,(char) 0xFF ); // truncation of constant value        
 
Igor Makanu:

Sì, è stato così fin dall'inizio.

Ecco un'altra domanda: dove hai davvero bisogno del carbone?

Uso uchar in StringToCharArray() e CryptEncode().

Ecco perché posso inizializzare un array di char usando ArrayInitialize, ma uchar non posso farlo

Ok, questo è un gran baccano, dubito che cambierà ;)

PS: 0xFF = 255 (1 byte)

Non so perché non si può. uchar funziona allo stesso modo di char.

Hai chiesto perché hai ricevuto l'avviso, perché 4 byte in 1. 255 non è importante. 0 e 1 possono essere 1 e 2 e 4 e 8 byte)

 

Alain Verleyen:

ArrayInitialize (uc,(char) 0xFF );

controllato:

uchar uc[16];
ArrayInitialize (uc, (char) 0xFF );
ArrayPrint(uc); 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

OK, funziona senza alcun avvertimento del compilatore

Grazie