Jump to content

Арифметика насыщения

Арифметика насыщения — это версия арифметики , в которой все операции, такие как сложение и умножение , ограничены фиксированным диапазоном между минимальным и максимальным значением.

Если результат операции больше максимального, он устанавливается (« фиксируется ») на максимум; если оно ниже минимума, оно фиксируется на минимуме. Название происходит от того, как значение становится «насыщенным», когда оно достигает крайних значений; дальнейшие добавления к максимуму или вычитания из минимума не изменят результат.

Например, если допустимый диапазон значений составляет от –100 до 100, следующие насыщающие арифметические операции дают следующие значения:

  • 60 + 30 → 90.
  • 60 + 43 → 100. ( не ожидаемое 103.)
  • (60 + 43) − (75 + 25) → 0. ( не ожидаемое 3.) (100 − 100 → 0.)
  • 10 × 11 → 100. ( не ожидаемые 110.)
  • 99 × 99 → 100. ( не ожидаемый 9801.)
  • 30 × (5–1) → 100. ( не ожидаемые 120.) (30 × 4 → 100.)
  • (30 × 5) − (30 × 1) → 70. ( не ожидаемые 120. не предыдущие 100.) (100 − 30 → 70.)

Вот еще один пример насыщенного вычитания , когда вместо этого допустимый диапазон от 0 до 100:

  • 30–60 → 0. ( не ожидаемое -30.)

Как видно из этих примеров, знакомые свойства, такие как ассоциативность и дистрибутивность, могут не работать в арифметике насыщения. [а] Из-за этого с ней неприятно иметь дело в абстрактной математике , но она играет важную роль в цифровом оборудовании и алгоритмах , где значения имеют максимальные и минимальные представимые диапазоны.

Современное использование

[ редактировать ]

общего назначения Обычно микропроцессоры не реализуют целочисленные арифметические операции с использованием арифметики насыщения; вместо этого они используют более простую в реализации модульную арифметику , в которой значения, превышающие максимальное значение, « переходят » к минимальному значению, как часы на часах, переходящие от 12 к 1. В аппаратном обеспечении модульная арифметика с минимумом ноль и максимум r н − 1, где r система счисления , можно реализовать, просто отбросив все , кроме самых младших n цифры . Для двоичного оборудования, которым является подавляющее большинство современного оборудования, система счисления равна 2, а цифры представляют собой биты.

Однако, хотя арифметика насыщения более сложна в реализации, она имеет множество практических преимуществ. Результат численно максимально близок к истинному ответу; для 8-битной двоичной арифметики со знаком, когда правильный ответ равен 130, гораздо менее удивительно получить ответ 127 в результате насыщающей арифметики, чем получить ответ -126 в результате модульной арифметики. Аналогично, для 8-битной двоичной беззнаковой арифметики, когда правильный ответ — 258, менее удивительно получить ответ 255 в результате насыщающей арифметики, чем получить ответ 2 в результате модульной арифметики.

Арифметика насыщения также позволяет последовательно обнаруживать переполнение при сложении и умножении без бита переполнения или чрезмерных вычислений путем простого сравнения с максимальным или минимальным значением (при условии, что данным не разрешено принимать эти значения).

Кроме того, арифметика насыщения позволяет создавать эффективные алгоритмы для решения многих задач, особенно при цифровой обработке сигналов . Например, регулировка уровня громкости звукового сигнала может привести к переполнению, а насыщение вызывает значительно меньшие искажения звука, чем зацикливание. По словам исследователей Г.А. Константинидиса и др.: [1]

При добавлении двух чисел с использованием представления дополнения до двух переполнение приводит к явлению «зацикливания». Результатом может стать катастрофическая потеря отношения сигнал/шум в системе DSP. Поэтому сигналы в конструкциях DSP обычно либо соответствующим образом масштабируются, чтобы избежать переполнения для всех входных векторов, кроме самых крайних, либо создаются с использованием арифметических компонентов насыщения.

Реализации

[ редактировать ]

Арифметические операции насыщения доступны на многих современных платформах и, в частности, являются одним из расширений платформы Intel MMX специально для таких приложений обработки сигналов. Эта функциональность также доступна в более широких версиях в наборах целочисленных инструкций SSE2 и AVX2 . Он также доступен в ARM NEON наборе инструкций .

Арифметика насыщения для целых чисел также была реализована в программном обеспечении для ряда языков программирования, включая C , C++ , таких как GNU Compiler Collection , [2] LLVM IR и Eiffel . Это помогает программистам лучше предвидеть и понимать последствия переполнения, а в случае компиляторов обычно выбирать оптимальное решение.

Насыщение сложно эффективно реализовать в программном обеспечении на машине, выполняющей только модульные арифметические операции, поскольку простые реализации требуют ветвей, которые создают огромные задержки в конвейере. Однако можно реализовать насыщающее сложение и вычитание в программном обеспечении без ветвей , используя только модульные арифметические и поразрядно-логические операции, которые доступны на всех современных процессорах и их предшественниках, включая все процессоры x86 (назад к исходному Intel 8086 ) и некоторые популярные процессоры. 8-битные процессоры (некоторые из них, например Zilog Z80 , все еще производятся). С другой стороны, на простых 8-битных и 16-битных процессорах алгоритм ветвления может оказаться быстрее, если его запрограммировать на ассемблере, поскольку нет конвейеров, которые могли бы остановиться, и каждая инструкция всегда занимает несколько тактов. На платформе x86, которая обеспечивает флаги переполнения и условные перемещения , возможен очень простой код без ветвей. [3]

Хотя арифметика насыщения менее популярна для целочисленной арифметики в аппаратном обеспечении, стандарт IEEE с плавающей запятой , самая популярная абстракция для работы с приблизительными действительными числами , использует форму насыщения, при которой переполнение преобразуется в «бесконечность» или «отрицательную бесконечность». и любая другая операция с этим результатом продолжает давать то же значение. Это имеет преимущество перед простым насыщением, заключающееся в том, что последующие операции, уменьшающие значение, не приведут к получению обманчиво «разумного» результата, например, при вычислении . В качестве альтернативы могут существовать специальные состояния, такие как «переполнение экспоненты» (и «недополнение экспоненты»), которые аналогичным образом будут сохраняться в последующих операциях или вызывать немедленное завершение или проверяться, как в IF ACCUMULATOR OVERFLOW ... как в FORTRAN для IBM 704 (октябрь 1956 г.).

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Фактически, сбоев арифметика ненасыщения также может страдать от ассоциативности и дистрибутивности в средах с ограниченной точностью, но такие сбои, как правило, менее очевидны.
  1. ^ Г. А. Константинидес, ПИК Чунг и В. Лук. Синтез арифметических архитектур насыщения .
  2. ^ «Внутреннее устройство коллекции компиляторов GNU (GCC): арифметика» . Документация GCC . Встроенные языковые функции
  3. ^ «Насыщающая арифметика без ветвей» . locklessinc.com . Архивировано из оригинала 13 февраля 2019 г.
[ редактировать ]
  • SARITH: Safe ARITHmetic – Отчет о ходе работы : Отчет о компоненте арифметики насыщения для Eiffel .
  • saturation — библиотека C++, предназначенная только для заголовков, для насыщения арифметических операций с точки зрения встроенных функций GCC Overflow.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 40e63c1a122034399e4b831e3411b32d__1716532140
URL1:https://arc.ask3.ru/arc/aa/40/2d/40e63c1a122034399e4b831e3411b32d.html
Заголовок, (Title) документа по адресу, URL1:
Saturation arithmetic - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)