-
Столкнулся с неприятной проблемой: дельфи не выкидывает Integer Overflow при операциях с Int64. Тупо-глупо отрезает что влезло - и все, не ломается.
С опциями проекта все нормальненько, на Integer - при переполнении ломается как и надо, на Int64 не хочет. Мне это сильно требуется.
Отсюда вопрос: это лечится как-нибудь? Что-то ничего полезного не нашел в гугле... Справка про переполнение упоминает только int16/int32. Про Int64 - молчек.
-
> это лечится как-нибудь?
лечится.
Просто не пихай туда то что туда заведомо не лезет.
-
> Сергей М, (16.04.08 18:16) [1]
> Просто не пихай туда то что туда заведомо не лезет.
Так оно ж в результате вычислений может случиться.... а я и не узнаю, обидно.
-
myint64 and $00000000FFFFFFFF;
-
> Так оно ж в результате вычислений может случиться.
Сравнивай с $FF FF FF FF FF FF FF FF, узнаешь.
ЗЫ: Федеральный долг США считаешь ?
-
> Сравнивай с $FF FF FF FF FF FF FF FF, узнаешь.
ТПРУ это для unsigned.
-
> оно ж в результате вычислений может случиться.... а я и
> не узнаю, обидно
А ты компилятор попроси)
В ряде случаев он сможет помочь твоей беде исключением)
-
в BDS2006 то же самое
-
> tesseract (16.04.2008 18:32:05) [5]
Зачем своя константа, MaxInt
-
> KSergey © (16.04.08 18:10
Delphi 7. +Overflow Checking.
var a:int64;
begin
a:=$7FFFFFFFFFFFFFFF;
a:=a+1; // <-Исключение здесь
Что я не так делаю? :)
-
> Отсюда вопрос: это лечится как-нибудь?
Лечится как обычно проверкой битика регистра флагов.
-
Либо проще
-Overflow Checking(Disabled).
var a:int64;
begin
a:=$8000000000000000;
a:=a-1;
asm
into;
end;