Errores, fallos, preguntas - página 2761

 
Aleksey Mavrin:

0xFF es probablemente convertido en 4 bytes por el compilador.

no, pero se inicializa correctamente

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
 

Buenas tardes, por favor, aconsejen cómo solucionar el problema:

Durante la optimización aparece un error:

2020.05.31 15:05:32.738 Core 7 genetic pass (0, 53) tested with error "critical runtime error 503 in OnTick function (zero divide, module Experts\e1.ex5, file e1.mq5, line 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);

Lo que hice:

1) He multiplicado Mix1 y Mix2 para reducir el número de decimales;

2) cambio de la cantidad de dígitos en la normalización;

3) Comprobado todos los ZExtLevels para asegurarse de que no contienen 0.


 
Igor Makanu:

No, pero se inicializa correctamente

¿Por qué estás seguro de que no? Por defecto en Entero se presenta. sizeof lo dice.

 
Aleksey Mavrin:

¿Por qué estás seguro de que no? El valor por defecto en Integer es presentar. sizeof dice que sí.

uint, para ser precisos.

 
Aleksey Mavrin:

¿Por qué estás seguro de que no? El valor por defecto en Integer es presentar. sizeof lo dice.


¿también funciona sin avisos?

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

Porque hay una firma correspondienteArrayInitialize

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

y por alguna razón desconocida no crearon ArrayInitialize() para unsigned uchar

 
Igor Makanu:

funciona de la misma manera sin ninguna advertencia?

porque hay una firma correspondiente ArrayInitialize

y para una uchar sin signo no hicieron ArrayInitialize() por alguna razón desconocida.

No se trata de la firma o la ausencia de ella. La cuestión es que 4 bytes se convierten en 1 y teóricamente se puede perder información - esto es lo que advierte el compilador.

Prueba conArrayInitialize(c, (char)10000);

también habrá una advertencia

 
Aleksey Mavrin:

No se trata de la firma o de la falta de ella. La cuestión es que 4 bytes se convierten en 1, teóricamente se puede perder información - esto es lo que advierte el compilador.

Prueba conArrayInitialize(c, (char)10000);

también habrá una advertencia

Bueno, estaba claro desde el principio

La pregunta es aquí de otra manera: ¿dónde se necesita realmente el carbón?

Utilizo uchar en StringToCharArray() y CryptEncode() y si buscas en la ayuda encontrarás más

por eso puedo inicializar un array char usando ArrayInitialize, pero uchar no puedo hacerlo


ok, es un gran alboroto, dudo que cambie ;)


PS: 0xFF = 255 (1 byte)

 
Igor Makanu:

Sí, está claro que eso fue todo desde el principio

aquí la cuestión es diferente, ¿es aquí donde se necesita realmente el carbón?

Yo uso uchar en StringToCharArray () y CryptEncode (), y si revisas la ayuda todavía hay

por eso puedo inicializar un array char usando ArrayInitialize, pero uchar no puede


ok, el noble holivar resultó, dudo que algo cambie;)


PS: 0xFF = 255 (1 byte)

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

Sí, de eso se trataba desde el principio.

Aquí hay otra pregunta. ¿Dónde necesitas realmente el carbón?

Uso uchar en StringToCharArray() y CryptEncode().

por eso puedo inicializar un array char usando ArrayInitialize, pero uchar no puedo hacerlo

ok, es un gran alboroto, dudo que cambie ;)

PS: 0xFF = 255 (1 byte)

No sé por qué no se puede. uchar funciona igual que char.

Has preguntado por qué recibiste la advertencia, porque 4 bytes en 1. 255 no es importante. 0 y 1 pueden ser 1 y 2 y 4 y 8 bytes)

 

Alain Verleyen:

ArrayInitialize (uc,(char) 0xFF );

revisado:

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, funciona sin ninguna advertencia del compilador

Gracias