Рис.1.
Я начал перебирать код и нашел место в котором программа выдает данное сообщение.Есть функция, которая возвращает посчитанный результат тип которого
real.
function getsigparam(p : PPar; n : integer) : real;Как я понял при умножении двух переменных integer со смещением и integer результат представляется в integer, только после того преобразуются в real.
begin
with p^ do
case n of
...
2: result := num_ch+1;
9: result := power_event*(1 shl 16) * data_ch; //В этом месте возникает ошибка integer Overflow
...
else
result := 0;
end;
end;
Решение данной проблемы простое, и оно мне помогло. Я умножил уравнение на 1.0 после чего ошибка исчезла.
В результате я получил следующий работающий код:
function getsigparam(p : PPar; n : integer) : real;
begin
with p^ do
case n of
...
2: result := num_ch+1;
9: result := 1.0*power_event*(1 shl 16) * data_ch;
...
else
result := 0;
end;
end;
1 комментарий:
Спасибо, данная статья помогла. У меня возникала проблема в ассемблере из-под Delphi. У меня шли 2 раза подряд div. Поэтому и выскакивала данная ошибка. Исправил я ее добавив между ними mul eax,1
Отправить комментарий