Числовые функции

d

Миф №1: Функция Round (округление) работает «неправильно» и ломает логику

Многие разработчики, столкнувшись с результатом работы функции Round в Delphi, впадают в панику. Им кажется, что компилятор «сходит с ума», округляя 2.5 до 2, а 3.5 до 4. На самом деле, это не ошибка и не баг — это банковское округление (round half to even). Заблуждение возникает из-за того, что в школе нас учили всегда округлять 0.5 вверх. Delphi же следует стандарту IEEE 754, где при пограничном значении округление идёт к ближайшему чётному числу, чтобы избежать накопления систематической ошибки в статистических расчётах. Если вам нужно обычное «математическое» округление (всегда вверх от 0.5), используйте конструкцию Trunc(X + 0.5) или собственную функцию. Не верьте мифу, что Round «сломан» — он просто другой.

Миф №2: Функция Trunc просто «отбрасывает дробную часть» — это просто и безопасно

Поверхностное понимание этого заблуждения приводит к фатальным ошибкам. Разработчики думают, что Trunc(3.9) = 3, и это конец истории. Однако реальная угроза — это потеря точности в финансовых вычислениях. Если вы сначала делите 10 на 3 и получаете 3.33333333, а затем применяете Trunc к промежуточному результату, вы теряете копейки в каждой строке. Вместо простого «отбрасывания» используйте Floor и Ceil из модуля Math для строгого округления вниз или вверх. Trunc не «чистит» данные — он безжалостно их режет, и только понимание этого факта спасёт вас от ошибок на биллинге.

Миф №3: Все математические функции в Delphi тормозят из-за проверок на NaN и Infinity

Ходят слухи, что встроенные функции (Sin, Cos, Power) работают медленно из-за встроенной диагностики. Это микроскопическое заблуждение. Да, в Include-файлах Delphi есть проверки на особые значения, но они выполняются за один такт процессора. Реальное «торможение» обычно вызвано библиотеками сторонних разработчиков или неоптимальными алгоритмами цикла. Не бойтесь использовать Math.Power вместо самодельного цикла умножения — компилятор оптимизирует вызов, и для 99% задач разница в скорости незаметна. Более того, вызов проверки на IsInfinite не обнуляет производительность — это безопасный предохранитель, который стоит встроить в свой код, а не избегать его.

Миф №4: Если я использую Integer, то точность стопроцентная, и Float мне вообще не нужен

Классическое заблуждение начинающих (и не только). «Целые числа — это железобетонно точно», — думает разработчик и пытается записать 1/3 в Integer, получая 0. Да, Integer не даёт плавающей ошибки, как Float, но он мгновенно убивает любую нецелую информацию. Миф состоит в том, что Integer чище и надёжнее. Надёжнее — да, в плане отсутствия дрифта, но он не подходит для 90% реальных задач: координаты, деньги с дробной частью, проценты, время. Настоящий страх — это «потерять» копейки из-за Single, но реальная катастрофа происходит, когда вы пытаетесь хранить сумму 10.5 в Integer и получаете 10. Для валютных расчётов в Delphi используйте Currency — он фиксированной точности и лишён мифов о «странном» поведении Float.

Миф №5: Функция Power (возведение в степень) – это излишество, проще написать цикл умножения

За этим заблуждением стоит страх перед абстракциями. «А вдруг Power медленнее, чем X*X*X?» пишет кодер, генерируя 50 строк уродливого кода для расчёта X^8. На деле, Math.Power (или Math.IntPower для целых степеней) использует алгоритм быстрого возведения в степень (exponentiation by squaring), который для X^8 делает всего 3-4 умножения, а цикл с 7 умножениями — это потеря времени и читаемости. Не поддавайтесь иллюзии, что «ручная работа» всегда быстрее. Компилятор Delphi достаточно умён, а библиотечные функции протестированы тысячами проектов. Единственный случай, когда Power может быть медленнее — это очень маленькие и строгие embedded-системы, где каждый такт на счету. Для обычного приложения это самовнушение.

Сводка: Чего на самом деле стоит бояться?

Главный миф, который нужно разрушить: «Числовые функции в Delphi — это чёрный ящик, который живёт своей жизнью». Нет, они следуют строгим математическим и индустриальным стандартам. Понимание этих правил заменяет страх на профессиональное спокойствие.

Добавлено: 27.04.2026