Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Округление в большую сторону

Delphi , Синтаксис , Математика



Автор: Dimka Maslov
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> «Округление» в большую сторону

Функция возвращает наименьшее число, большее чем Value, которое без остатка
делится на Divider

Зависимости: нет
Автор:       Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        20 мая 2002 г.
***************************************************** }

function RoundNext(Value, Divider: Integer): Integer;
asm
   mov ecx, edx
   cdq
   idiv ecx
   imul ecx
   add eax, ecx
end;

Пример использования:

RoundNext(10, 3) // = 12
RoundNext(9, 3) // = 12

Программный код на языке ассемблера Delphi! Это реализация функции под названием RoundNext, которая принимает два целочисленных параметра: Value и Divider. Функция возвращает наименьшее целое число, большее или равное Value, которое может быть разделено без остатка Divider.

Вот шаг за шагом, как работает код:

  1. Код использует инструкцию mov для перемещения значения Divider в регистр ecx.
  2. Затем код настраивается для деления с помощью cdq, который очищает флаги и устанавливает делимое (значение, которое подлежит делению) в 0.
  3. Далее код выполняет неотрицательное целочисленное деление (idiv ecx) на значение в регистре eax (инициализированное значением Value) по значению в регистре ecx. Это дает нам частоту деления.
  4. Остаток деления отбрасывается с помощью imul ecx, который умножает результат деления на оригинальный делимое (ecx). Это эффективно округляет до ближайшего кратного делимому.
  5. Наконец, код добавляет результат умножения (ecx) к оригинальному значению в регистре eax с помощью add eax, ecx. Это обеспечивает, что возвращаемое значение действительно больше или равно входному значению.

Пример использования функции показывает, как она может использоваться:

  • RoundNext(10, 3) возвращает 12, потому что 10 разделено на 3 оставляет остаток 1, поэтому округление вверх дает нам 12.
  • RoundNext(9, 3) также возвращает 12, потому что 9 разделено на 3 оставляет остаток 0, и мы уже находимся на кратном делимому.

В целом, это эффективная реализация, которая использует возможность языка ассемблера для выполнения низкоуровневых операций напрямую. Однако стоит отметить, что в современных версиях Delphi вы можете использовать встроенную функцию Ceiling из модуля Math, чтобы достичь аналогичных результатов без необходимости писать код на ассемблере.

Округление в большую сторону - функция Delphi, которая возвращает наименьшее целое число, большее чем заданное, и кратно заданному делителю.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Математика ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:35:21/0.0032382011413574/0