Error en la búsqueda binaria de un valor en una matriz ordenada:
voidOnStart()
{
long hash[]= {-8017261424500504960,-7417030212113027668,-4495301772150012897,8444435679621798267};
long my_hash=hash[3];
int index=ArrayBsearch(hash,my_hash);
ArrayPrint(hash);
Print(my_hash,": ",index);
}
No se trata de sortear el error, sino de solucionarlo, sobre todo porque esta función se puede utilizar en muchas fuentes, incluso las estándar. Y es posible que se utilice en el propio código del terminal, editor de código...
No se trata de sortear el error, sino de solucionarlo, sobre todo porque esta función se puede utilizar en muchas fuentes, incluso las estándar. Y es posible que se utilice en el propio código del terminal, editor de código...
Creo que el problema está en los bits grandes en una situación en la que casi todos los bits están ocupados. es increíble que alguien haya encontrado este error después de tanto tiempo.
Probablemente lo arreglarán. en mi opinión, el problema está en los largos en una situación en la que casi todos los bits están ocupados. es sorprendente que alguien haya encontrado este fallo después de tanto tiempo.
Me sorprende que no hayan encontrado este fallo en una función de uso frecuente en tanto tiempo.
De nuevo, sobre las variables no inicializadas. Está claro que su valor puede ser imprevisible de cualquier manera. Pero es la primera vez que encuentro que pueden cambiar su valor por sí mismos en tiempo de ejecución de una función (no lo he encontrado buscando). Aquí está el código del script y lo que obtengo:
//--- проверка поведения неинициализированных переменныхvoidOnStart()
{
Print("проверка поведения неинициализированных переменных");
long a, b;
//тест без изменения значений переменныхPrintFormat("a==%I64d, b==%I64d", a, b);
Print("a==1:", a == 1);
Print("a==2:", a == 2);
Print("b==1:", b == 1);
Print("b==2:", b == 2);
PrintFormat("%I64d", 1); //после этого начинаются чудесаPrintFormat("a==%I64d", a);
PrintFormat("b==%I64d", b);
Print("a==1:", a == 1);
Print("a==2:", a == 2);
Print("b==1:", b == 1);
Print("b==2:", b == 2);
PrintFormat("a==%I64d, b==%I64d", a, b);
Print("a==1:", a == 1);
Print("a==2:", a == 2);
Print("b==1:", b == 1);
Print("b==2:", b == 2);
//тест с изменением значения переменныхint x, y = 0;
Print("x=", x, " y=", y);
Print("y = x++");
y = x++;
Print("x=", x, " y=", y);
}
terminal: 2021.02.19 19:30:47.003 Terminal Opening Broker x64 build 2755 iniciado para JSC ''Opening Broker'' 2021.02.19 19:30:47.113 Terminal Windows 7 Service Pack 1 build 7601, Intel Core i5-2520M @ 2.50GHz, 5 / 7 Gb de memoria, 41 / 287 Gb de disco, IE 11, UAC, GMT+3
Si el script se ejecuta repetidamente, los valores iniciales de las variables a,b y x pueden cambiar, pero el comportamiento general es constante:
1. En la primera parte del script, los valores de las variables a y b en el código no cambian, pero después de ejecutar PrintFormat("%I64d", 1) de repente PrintFormat("a==%I64d", a) da como resultado 1, lo mismo para b. ¡¡¡Y lo más interesante es que (a==1)==true e inmediatamente (a==2)==true (para b también)!!! En la última llamada PrintFormat("a==%I64d, b==%I64d", a, b) muestra a==1, pero b == el valor que había al principio del script.
2. En la segunda parte del script intento cambiar el valor de la variable no inicial. Después de y=x++ el valor de x debería cambiar. Pero sigue siendo el mismo (en esta ejecución ==1).
Por favor, que alguien intente ejecutar el script y publique el resultado.
De ahí la pregunta a los entendidos: ¿es este un comportamiento normal (como un comportamiento indefinido) o es un error?
De nuevo, sobre las variables no inicializadas. Está claro que su valor puede ser imprevisible de cualquier manera. Pero es la primera vez que encuentro que pueden cambiar su valor por sí mismos en tiempo de ejecución de una función (no lo he encontrado buscando). Aquí está el código del script y lo que obtengo:
resultado:
terminal: 2021.02.19 19:30:47.003 Terminal Opening Broker x64 build 2755 iniciado para JSC ''Opening Broker'' 2021.02.19 19:30:47.113 Terminal Windows 7 Service Pack 1 build 7601, Intel Core i5-2520M @ 2.50GHz, 5 / 7 Gb de memoria, 41 / 287 Gb de disco, IE 11, UAC, GMT+3
Si el script se ejecuta repetidamente, los valores iniciales de las variables a,b y x pueden cambiar, pero el comportamiento general es constante:
1. En la primera parte del script, los valores de las variables a y b en el código no cambian, pero después de ejecutar PrintFormat("%I64d", 1) de repente PrintFormat("a==%I64d", a) da como resultado 1, lo mismo para b. ¡¡¡Y lo más interesante es que (a==1)==true e inmediatamente (a==2)==true (para b también)!!! En la última llamada PrintFormat("a==%I64d, b==%I64d", a, b) muestra a==1, pero b == el valor que había al principio del script.
2. En la segunda parte del script intento cambiar el valor de la variable no inicial. Después de y=x++ el valor de x debería cambiar. Pero sigue siendo el mismo (en esta ejecución ==1).
Por favor, que alguien intente ejecutar el script y publique el resultado.
De ahí la pregunta a los entendidos: ¿es este un comportamiento normal (como un comportamiento indefinido) o es un error?
No inicializar sus variables es un comportamiento anormal. Inicialice y no habrá tales preguntas.
Discutido.
El error no es obvio allí porque: "tal vez estaba previsto así".
Aquí está después de ejecutar la función GetLastError() = ERR_WRONG_STRING_DATE. Si la fecha es errónea, ¿por qué el resultado no es erróneo?
Lo dudo.
No me molesté... He contado - usted tiene 30 líneas, yo tengo 13
No me molesté... He contado: tú tienes 30 líneas, yo tengo 13.
Lo principal es obtener el mismo resultado y no perder rendimiento.
Error en la búsqueda binaria de un valor en una matriz ordenada:
Resultado:
En lugar de 2 debería ser 3
Error en la búsqueda binaria de un valor en una matriz ordenada:
Resultado:
En lugar de 2 debería ser 3
No se trata de sortear el error, sino de solucionarlo, sobre todo porque esta función se puede utilizar en muchas fuentes, incluso las estándar. Y es posible que se utilice en el propio código del terminal, editor de código...
No se trata de sortear el error, sino de solucionarlo, sobre todo porque esta función se puede utilizar en muchas fuentes, incluso las estándar. Y es posible que se utilice en el propio código del terminal, editor de código...
Creo que el problema está en los bits grandes en una situación en la que casi todos los bits están ocupados. es increíble que alguien haya encontrado este error después de tanto tiempo.
Probablemente lo arreglarán. en mi opinión, el problema está en los largos en una situación en la que casi todos los bits están ocupados. es sorprendente que alguien haya encontrado este fallo después de tanto tiempo.
Me sorprende que no hayan encontrado este fallo en una función de uso frecuente en tanto tiempo.
De nuevo, sobre las variables no inicializadas. Está claro que su valor puede ser imprevisible de cualquier manera. Pero es la primera vez que encuentro que pueden cambiar su valor por sí mismos en tiempo de ejecución de una función (no lo he encontrado buscando). Aquí está el código del script y lo que obtengo:
resultado:
terminal:
2021.02.19 19:30:47.003 Terminal Opening Broker x64 build 2755 iniciado para JSC ''Opening Broker''
2021.02.19 19:30:47.113 Terminal Windows 7 Service Pack 1 build 7601, Intel Core i5-2520M @ 2.50GHz, 5 / 7 Gb de memoria, 41 / 287 Gb de disco, IE 11, UAC, GMT+3
Si el script se ejecuta repetidamente, los valores iniciales de las variables a,b y x pueden cambiar, pero el comportamiento general es constante:
1. En la primera parte del script, los valores de las variables a y b en el código no cambian, pero después de ejecutar PrintFormat("%I64d", 1) de repente PrintFormat("a==%I64d", a) da como resultado 1, lo mismo para b. ¡¡¡Y lo más interesante es que (a==1)==true e inmediatamente (a==2)==true (para b también)!!! En la última llamada PrintFormat("a==%I64d, b==%I64d", a, b) muestra a==1, pero b == el valor que había al principio del script.
2. En la segunda parte del script intento cambiar el valor de la variable no inicial. Después de y=x++ el valor de x debería cambiar. Pero sigue siendo el mismo (en esta ejecución ==1).
Por favor, que alguien intente ejecutar el script y publique el resultado.
De ahí la pregunta a los entendidos: ¿es este un comportamiento normal (como un comportamiento indefinido) o es un error?
De nuevo, sobre las variables no inicializadas. Está claro que su valor puede ser imprevisible de cualquier manera. Pero es la primera vez que encuentro que pueden cambiar su valor por sí mismos en tiempo de ejecución de una función (no lo he encontrado buscando). Aquí está el código del script y lo que obtengo:
resultado:
terminal:
2021.02.19 19:30:47.003 Terminal Opening Broker x64 build 2755 iniciado para JSC ''Opening Broker''
2021.02.19 19:30:47.113 Terminal Windows 7 Service Pack 1 build 7601, Intel Core i5-2520M @ 2.50GHz, 5 / 7 Gb de memoria, 41 / 287 Gb de disco, IE 11, UAC, GMT+3
Si el script se ejecuta repetidamente, los valores iniciales de las variables a,b y x pueden cambiar, pero el comportamiento general es constante:
1. En la primera parte del script, los valores de las variables a y b en el código no cambian, pero después de ejecutar PrintFormat("%I64d", 1) de repente PrintFormat("a==%I64d", a) da como resultado 1, lo mismo para b. ¡¡¡Y lo más interesante es que (a==1)==true e inmediatamente (a==2)==true (para b también)!!! En la última llamada PrintFormat("a==%I64d, b==%I64d", a, b) muestra a==1, pero b == el valor que había al principio del script.
2. En la segunda parte del script intento cambiar el valor de la variable no inicial. Después de y=x++ el valor de x debería cambiar. Pero sigue siendo el mismo (en esta ejecución ==1).
Por favor, que alguien intente ejecutar el script y publique el resultado.
De ahí la pregunta a los entendidos: ¿es este un comportamiento normal (como un comportamiento indefinido) o es un error?