int64 в delphi

Oct 19, 2010 17:58

Люди, у кого есть delphi под рукой. Попробуйте скомпилить и запустить следующий код:

{$o-,q+,r+,s+}
uses sysutils;
var a,b,c:int64;
begin
b:=-1200000000;
c:=-1000000000;
a:=b*c;
writeln(a);
end.

Будет переполнение или нет? Указывайте также свою версию дельфи.

У меня под Turbo Delphi (10.0.2288.42451) переполняется; при этом если b заменить на -2000000000, то все работает. Мы с a_kruglov посмотрели asm-код, сгенерированный дельфей, и вроде дельфя просто некорректно проверяет факт переполнения.

Проблема обнаружена моим братом при попытке понять, откуда берется RE в векторном произведении на тестах жюри к задаче Theodore.

UPD: похоже, бага присутствует во всех версиях дельфи (проверено в Delphi 7, Turbo Delphi, Delphi 14, Delphi 15, и, видимо, в той дельфе, что установлена на ЛКШатском ejudge).

В FP бага нет.

Впервые в жизни мне хочется посоветовать использовать FP или отключать ключи компилятора - по крайней мере, при сдаче задачи и на конкретном куске кода.

программы и программирование, вопросы

Previous post Next post
Up