Дробные числа сами по себе работают раз в 50 (а то и больше) медленнее целых.
Например:
Если a и b - Integer, этот код в ассемблере выглядит так:
Код:
mov eax, b
add eax, a
mov a, eax
т.е. 3 команды.
Если эти числа - real, то сначала 5 строк заполнения параметров, потом вызов функции перевода b из Real в Extended, потом то же самое для A, потом функция сложения и функция перевода результата из Extended в Real. Все эти функции от 10 команд.
Функция Round тормозит прогресс. Приходится считать выражение дробным и переводить в целое.