Если читать в Справке, то
function Round(x: real): integer; Возвращает x, округленное до ближайшего целого.
Из описания мы видим, что функция принимает аргумент вещественного типа и возвращает целочисленный результат. Попробуем угадать, какое значение вернет эта функция в случае Round(3/2) и какое в случае Round(5/2).
Если рассуждать чисто математически, то 3/2=1.5, а 5/2=2.5 и следует ожидать по правилам округления результаты 2 и 3 соответственно. Проверим, что по этому поводу думает наш Паскаль?
Забавно он думает, не правда ли? Ошибка? Отнюдь нет, потому что так же думает и Free Pascal. Смотрим:
А как же “старый добрый” Турбо/Борланд Паскаль? А вот и неожиданность:
Такой вот прогресс произошел в компьютерной арифметике. Round для чисел, оканчивающихся на 0.5, прежде делал математическое округление, приводя результат к целому в сторону большего по модулю значения. А теперь он делает “банковское округление”, приводя результат к ближайшему четному значению.
Как итог: остерегаемся применять Round, если аргументом может оказаться нецелое значение, кратное 0.5. Помним, что нас подстерегает банковское округление!
Напоследок предлагаю запустить вот такую программку и полюбоваться на результат… это же генератор последовательности из пар четных чисел!
// PascalABC.NET 3.1, сборка 1192 от 07.03.2016
begin
Range(3,30,2).Select(i->Round(i/2)).Println
end.