Eugene (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Потенциальная проблема с if, Потенциальная проблема с логическим оператором или скрытая ошибка
 
Здравствуйте, Петр

Цитата
Мы постараемся исправить ошибку в одной из очередных версий программы.
Приносим извинения за причиненные неудобства.
Спасибо!
Я ничуть не в претензии. Просто это было неожиданно, и интересно почему так происходит.

С уважением,
Евгений
Потенциальная проблема с if, Потенциальная проблема с логическим оператором или скрытая ошибка
 
Добрый вечер, Николай

> Я указал как возможную ошибку ограничение памяти на основании того, что Вы указали о ранее работавшей программе.
> Т е данная конструкция у Вас работала. Т е она интерпретировалась правильно.
> Теперь не работает. как вариант, интерпретатрор обрезал строку и получил ошибку.

Я нисколько не отбрасываю эту гипотезу - данных мало.

> ----------------------------------------------
> Написал препроцессор , но так как компилятора нет в QPILE, то назвал его компилятор,
> который сам создает внутренние переменные для функций.
> ---------------------------------------------------
> Вместо функций сделал макросы.
> ----------------------------------------------------
> Компилятор выдает список всех переменных и функций.
> ----------------------------------------------

Никогда не хватало терпения сделать все по человечески :)
Сиюминутные решения уже вошли в привычку.

> Все функции и макросы разместил в библиотеках.
--------------------------------------------------

Описание функций, конечно, в отдельном файле (хотя его вряд ли можно назвать библиотекой)
В основном файле - описание переменных и мэйн.

> В результате программа на QPILE стала простой и понятной.
> --------------------------------------------------------

Мои коды просты как дрова, сложные я писать не умею :)

С уважением,
Евгений
Потенциальная проблема с if, Потенциальная проблема с логическим оператором или скрытая ошибка
 
Здравствуйте, Николай!

Цитата

выражение
if((Server_Time_var-Registration_Time)>Time_Criterium_for_Bad_Deal)
перепишите так:
x=Server_Time_var-Registration_Time-Time_Criterium_for_Bad_Deal
if x>0
Да, я так и сделал. Смутило следующее: 1) по-сути выражение очень простое, казалось невероятным, что оно может
неправильно интерпретироваться; 2) эта ошибка всплыла, т.е. очень долго ее не было и все работало ок;
3) из своего мелкого опыта на С я знаю, что если такие вещи внезапно появляются, то это может быть симптомом серьезной
наведенной ошибки (обычно с использованием памяти).
Просто там я знаю, что проверять - массивы и указатели, а здесь - понятия не имею. А речь все-таки о деньгах  :)

Цитата
Можно предположить, что не хватает памяти для данной строки и в результате облом.
Возможно. Против этого говорят примеры, приведенные s_mike в первом ответе (второй пример вообще убойный).
Похоже это все-таки проблемы с разбором скобок.

Цитата
Могу рекомендовать следующее правило:
Не пишите сложных и длинных выражений в условиях и такой проблемы никогда не будет.
Так и решил делать в дальнейшем
Цитата
И еще в QPILE не рекомендую использовать длинные имена переменных.
Все переменные и функции на одном уровне видимости.
Длинные имена лишь замедляют интерпретацию
Как раз из-за этого (что они все на одном уровне), я успеваю забыть, что значат короткие имена.
Но, конечно, насчет скорости Вы правы. Просто у меня код относительно короткий (т.е. я смысл переменных все равно успеваю забыть :)),
поэтому проблемы со скоростью исполнения возникают только при ожидании ответа сервера. Кстати, последнее время, в вечернюю
сессию (когда, казалось бы, запросов меньше) это стало доставлять массу неприятностей.

Спасибо за Ваш ответ!

С уважением,
Евгений
Потенциальная проблема с if, Потенциальная проблема с логическим оператором или скрытая ошибка
 
Здравствуйте, Сергей!

Цитата
Информация получена, проблема изучается. Постараемся в ближайшее время дать ответ.
Спасибо! Хоть метод исправления вроде бы ясен, но причина проблемы тоже интересна.

С уважением,
Евгений
Потенциальная проблема с if, Потенциальная проблема с логическим оператором или скрытая ошибка
 
Спасибо, Mike!

Я сам искал в инете, но не смог найти.
Неужели все так плохо?
Какого ж черта эта зараза полгода работала нормально? (эта я так, риторически)

Спасибо еще раз! Буду избегать сложных многоскобочных выражений :)
Потенциальная проблема с if, Потенциальная проблема с логическим оператором или скрытая ошибка
 
Здравствуйте!

Столкнулся со следующей проблемой:
Есть код, который, в частности, содержит фрагмент

  if((Server_Time_var-Registration_Time)>Time_Criterium_for_Bad_Deal)
    if(Order_Status=="ACTIVE" )
      kill_order()
    end if
  end if

Этот код успешно работает полгода, причем этот кусок многократно задействован,
и, казалось бы, проверен (т.е. он работал так как и ожидалось и было нужно).
В последние три дня он вылетает с формулировкой

Произошла ошибка при расчете портфеля "Trader",
идентификатор организации "XXX", сообщение об ошибке
"File: Functions.qpl, line: 386. Expected symbol ). [ ((SERVER_TIME_VAR-REGISTRATION_TIME)>TIME_CRITERIUM_FOR_BAD_DEAL) ] "

Количество скобок правильное. Что может означать это сообщение?

В отладчике это место ловить долго, поэтому расставил сигнальные сообщения, чтобы увидеть точку останова

 WRITELN(Log_File_Name, "Ok 6a: " & Server_Time_var & "    " & time_count)
  if((Server_Time_var-Registration_Time)>Time_Criterium_for_Bad_Deal)
 WRITELN(Log_File_Name, "Ok 6b: " & Server_Time_var & "    " & time_count)
    if(Order_Status=="ACTIVE" )
 WRITELN(Log_File_Name, "Ok 6c: " & Server_Time_var & "    " & time_count)
      kill_order()
 WRITELN(Log_File_Name, "Ok 6d: " & Server_Time_var & "    " & time_count)
    end if
 WRITELN(Log_File_Name, "Ok 6e: " & Server_Time_var & "    " & time_count)
  end if

Видно, что вылет действительно происходит после Ок 6a, но до Ок 6b

Привел этот кусок к следующему виду
 Time_Difference_var=(Server_Time_var-Registration_Time)
  if(Time_Difference_var>Time_Criterium_for_Bad_Deal)
    if(Order_Status=="ACTIVE")
      kill_order()
    end if
  end if

После чего, ошибка в этом месте исчезла и переместилась к другому оператору if в другой функции.

Это, видимо, какая-то наведенная ошибка, но я не знаю какая. Может быть где-то требуется явное приведение
типа, а я этого не сделал.
Не приходилось ли Вам сталкиваться ранее с такой проблемой?
Симптомами какого типа ошибок может быть такое поведение?

С уважением,
Евгений
Страницы: 1
Наверх