Люди, у кого есть 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 или отключать ключи компилятора - по крайней мере, при сдаче задачи и на конкретном куске кода.