Errores, fallos, preguntas - página 2360

 
Aliaksandr Hryshyn:

Error para los desarrolladores.

El script no compila, identifique por qué)). Utilice el archivo adjunto.


El mismo archivo:


Todas las compilaciones, eliminar la línea de error

 
Vladimir Pastushak:

Todo se compila, borre la línea de error

limitación de la longitud de las líneas en el editor

 
Fast528:

Limitar la longitud de una línea en el editor

Una cadena no se muestra cuando supera los 4095 caracteres.

 
fxsaber:

Por favor, explique a un tonto por qué sucede esto aquí.

Supongamos que sólo podemos operar con números impares, y que si el resultado de una operación aritmética se vuelve par, se supone que es el número impar más cercano desde arriba, entonces

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

33 != 31

 
fxsaber:
Pasé varias horas buscando divergencias. Encontré esto


Las peculiaridades se conocen doblemente, pero no de tal manera que si se cambia el orden de la suma (salvo los números relativamente muy diferentes), ¡el resultado es diferente! Por favor, explique a un tonto por qué sucede esto aquí.

Sólo hay que mirar las dos últimas líneas de la fuente.

Como a usted mismo le gusta decir, el agolito que se establece para la precisión de redondear el doble al mismo número en el límite de la precisión especificada está "torcido". La razón, obviamente, es que el mismo valor obtenido por diferentes métodos (intercambiando multiplicadores, abriendo paréntesis, etc.) en la representación doble puede resultar ser un número diferente, lo más cercano al deseado desde diferentes lados. Redondea hasta el siguiente dígito, y luego decide cómo tratar el último...

 
fxsaber:

Cuando se hace tamaño+punto, se desborda la mantisa seguida de redondeo/rechazo (dependiendo del modo de la 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

En general, el resultado de dos dobletes sólo será el mismo si se obtienen de la misma manera (a no ser que se cuenten los casos en los que se trata de números enteros).

 
A100:
Ilya Malev:
pavlick_:

Gracias por las respuestas, cada una ha sido valiosa. Por primera vez encontré (noté) que al agregar los mismos artículos al PRECIO, pero en diferente secuencia se crean diferentes PRECIOS. De ahí los diferentes resultados en el probador.

Al hablar de los doblajes, quedó claro cuándo y por qué se pueden comparar entre sí. Pero el precio más los puntos y el resultado diferente de la salida es la primera vez que el resultado del TC se ha visto tan claramente afectado.


Resulta que para evitar estas ambigüedades, hay que añadir una mesana de menos de medio punto al precio calculado, y luego normalizar.

 
fxsaber:

Resulta que para evitar estas ambigüedades, hay que añadir al precio calculado una mera fracción inferior a medio punto, y luego normalizar.

Y también existe la opinión de que si los resultados de la CT cambian mucho por cosas tan insignificantes, hay que decir "gracias" y tirar dicha CT a la basura.

 
fxsaber:

Gracias por las respuestas, cada una de ellas ha sido valiosa. La primera vez que encontré (noté) que agregar los mismos artículos a un PRECIO, pero en una secuencia diferente crea diferentes PRECIOS. De ahí los diferentes resultados en el probador.

Al hablar de los doblajes, quedó claro cuándo y por qué se pueden comparar entre sí. Pero el precio más los puntos y el resultado diferente de la salida es la primera vez que el resultado del TC se ha visto tan claramente afectado.


Resulta que para evitar estas ambigüedades, hay que añadir una mesana de menos de medio punto al precio calculado, y luego normalizar.

¿Quizás merezca la pena mapear las características?

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

Y también existe la opinión de que si los resultados de una CT cambian mucho por cosas tan pequeñas, hay que dar las gracias y tirar dicha CT a la basura.

No cambian mucho, sólo cambian. Eso es suficiente para iniciar una investigación.