Округление

Слово "округление" для числового значения означает замену его другим значением, которое приблизительно равно, но имеет более короткую, простую или явную форму. Например, 23,74 доллара США можно округлить до 24 долларов США, или дробь 312/937 можно округлить до 1/3, или выражение 2 {\displaystyle {\sqrt {2}}}{\displaystyle {\sqrt {2}}} как 1,41.

Округление часто делается специально, чтобы получить значение, которое легче написать и обработать, чем оригинал. Это может быть сделано также для указания точности вычисленного числа; например, количество, которое было вычислено как 123 456, но которое, как известно, является точным только до нескольких сотен единиц, лучше указать как "около 123 500".

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

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

Округление имеет много общего с квантованием, которое происходит, когда физические величины должны быть закодированы числами или цифровыми сигналами.

Виды округления

Типичные проблемы с округлением:

  • аппроксимация иррационального числа на дробь, например, π на 22/7;
  • аппроксимация дроби с периодическим десятичным разложением на конечную десятичную дробь, например, 5/3 на 1.6667;
  • замена рационального числа на дробь меньшим числителем и знаменателем, например, 3122/9417 на 1/3;
  • замена дробного десятичного числа на одно меньшим числом, например, 2 1784 доллара на 2,18 доллара;
  • замена десятичного целого на целое с большим количеством трейлинговых нулей, например, 23 217 человек на 23 200 человек; или, в общем, замена десятичного числа на целое с большим количеством трейлинговых нулей,
  • замена значения на кратное заданному количеству, например, 27,2 секунды на 30 секунд (кратное 15).

Округление до заданного приращения

Наиболее распространенным типом округления является округление до целого числа; или, более широко, до целого числа, кратного некоторому приращению - например, округление до целых десятых долей секунды, до сотых долей доллара, до целых кратных 1/2 или 1/8 дюйма, до целых десятков или тысяч и т.д..

В общем случае округление числа x до кратного некоторому заданному приращению m влечет за собой следующие шаги:

  1. Разделите x на m, пусть результат будет y;
  2. Округлите y до целочисленного значения, назовите его q;
  3. Умножьте q на m, чтобы получить округленное значение z.

z = r o u n d ( x , m ) = r o u n d ( x / m ) m {\displaystyle z=\mathrm { round} (x,m)=\mathrm { round} (x/m)\cdot m,} {\displaystyle z=\mathrm {round} (x,m)=\mathrm {round} (x/m)\cdot m\,}

Например, округление x = 2.1784 долларов до целых центов (т.е. до кратного 0.01) влечет за собой вычисление y = x/m = 2.1784/0.01 = 217.84, затем округление y до целого q = 218, и, наконец, вычисление z = q×m = 218×0.01 = 2.18.

При округлении до заданного числа значащих цифр приращение m зависит от величины округляемого числа (или округленного результата).

Приращение m обычно является конечной дробью в любой числовой системе, которая используется для представления чисел. Для отображения людям это обычно означает десятичную систему чисел (т.е. m - целое число, умноженное на 10, например 1/1000 или 25/100). Для промежуточных значений, хранящихся в цифровых компьютерах, это часто означает двоичную систему счисления (m - целое число, умноженное на 2).

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

Округление до целого числа

Наиболее простой формой округления является замена произвольного числа на целое число. Все следующие режимы округления являются конкретными реализациями абстрактной однозначной функции "round()", представленной и использованной в предыдущих разделах.

Существует много способов округления числа y до целого q. Наиболее распространенными являются следующие

  • округлить (или взять слово, или округлить до минус бесконечности): q - наибольшее целое число, не превышающее y.

q = f l o r ( y ) = y = - - y {\displaystyle q=\mathrm {floor} (y)=\left\lfloor y\right\rfloor =-\left\lceil -y\right\rceil ,} {\displaystyle q=\mathrm {floor} (y)=\left\lfloor y\right\rfloor =-\left\lceil -y\right\rceil \,}

  • округлите вверх (или возьмите потолок, или округлите в сторону плюс бесконечность): q - наименьшее целое число, которое не меньше y.

q = c e i l ( y ) = y = - - y {\displaystyle q=\mathrm {ceil} (y)=\left\lceil y\right\rceil =-\left\lfloor -y\right\rfloor ,} {\displaystyle q=\mathrm {ceil} (y)=\left\lceil y\right\rceil =-\left\lfloor -y\right\rfloor \,}

  • округляется в сторону нуля (или усекается, или округляется от бесконечности): q - целочисленная часть y, без дробных цифр.

q = t r u n c a t e ( y ) = sgn ( y ) | y | = - sgn ( y ) - | y | {\displaystyle q=\mathrm {truncate} (y)=\operatorname {sgn}(y)\left\lfloor \left|y\right|\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|\right\rceil , } {\displaystyle q=\mathrm {truncate} (y)=\operatorname {sgn}(y)\left\lfloor \left|y\right|\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|\right\rceil \,}

  • округлить от нуля (или округлить до бесконечности): если y - целое число, то q - это y; иначе q - целое число, которое ближе всего к 0 и такова, что y находится между 0 и q.

q = sgn( y ) | y | = - sgn( y ) - | y | {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|\rfloor ,} {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|\right\rfloor \,}

  • округляется с точностью до ближайшего: q - ближайшее к y целое число (правила разрыва связей см. ниже).

Первые четыре метода называются направленным округлением, так как смещения от исходного числа y к округленному значению q направлены в сторону или от одного и того же предельного значения (0, +∞ или -∞).

Если y положительное, то округление - то же самое, что и округление-ноль, а округление-вверх - то же самое, что и округление-от-ноль. Если y отрицательно, то округление - это то же самое, что и округление от нуля, а округление вверх - это то же самое, что и округление от нуля. В любом случае, если y - целое число, то q - просто y. В следующей таблице показаны эти методы округления:

y

округление
(по направлению к -∞)

сводка
(по адресу +∞)

круглосуточный нуль

безостановочный
fromzero

круглосуточный сайт

+23.67

+23

+24

+23

+24

+24

+23.50

+23

+24

+23

+24

+23 или +24

+23.35

+23

+24

+23

+24

+23

+23.00

+23

+23

+23

+23

+23

0

0

0

0

0

0

−23.00

−23

−23

−23

−23

−23

−23.35

−24

−23

−23

−24

−23

−23.50

−24

−23

−23

−24

-23 или -24

−23.67

−24

−23

−23

−24

−24

В тех случаях, когда многие вычисления выполняются последовательно, выбор метода округления может оказать очень существенное влияние на результат. Известным примером является новый индекс, установленный Ванкуверской фондовой биржей в 1982 году. Первоначально он был установлен на уровне 1000.000, а через 22 месяца упал примерно до 520 - в то время как цены на акции в этот период в целом выросли. Проблема была вызвана тем, что индекс пересчитывался тысячи раз в день и всегда округлялся до 3-х знаков после запятой таким образом, что ошибки округления накапливались. Пересчет с лучшим округлением дал в конце того же периода значение индекса 1098,892.

Разрыв связей

Округление числа y до ближайшего целого требует некоторого правила связывания для тех случаев, когда y находится ровно на полпути между двумя целыми числами - то есть когда дробная часть y равна ровно 0.5.

Соберите половину

Следующее правило, называемое "округлить наполовину вверх" (или "округлить наполовину в сторону плюс бесконечность"), широко используется во многих дисциплинах. То есть, значения "y" всегда округляются наполовину вверх.

  • Если доля y равна точно 0.5, то q = y + 0.5.

q = y + 0.5 = - - y - 0.5 {\displaystyle q=\left\lfloor y+0.5\right\rfloor =-\left\lceil -y-0.5\right\rceil ,} {\displaystyle q=\left\lfloor y+0.5\right\rfloor =-\left\lceil -y-0.5\right\rceil \,}

Например, по этому правилу значение 23.5 округляется до 24, а -23.5 - до -23.

Это одно из двух правил, которые обычно преподаются на уроках начальной математики в США. []

Если бы не 0,5 фракции, ошибки округления, введенные округлением до ближайшего метода, были бы достаточно симметричны: для каждой округляемой фракции (например, 0,268) существует комплементарная фракция (а именно, 0,732), которая округляется в меньшую сторону, на ту же самую величину. При округлении большого набора чисел случайными дробными долями эти ошибки округления статистически компенсировали бы друг друга, а ожидаемое (среднее) значение округленных чисел было бы равно ожидаемому значению исходных чисел.

Тем не менее, правило округления по принципу половинного срыва не является симметричным, так как фракции, составляющие ровно 0.5, всегда округляются вверх. Эта асимметрия вносит положительный сдвиг в ошибки округления. Например, если дробь y состоит из трех случайных десятичных цифр, то ожидаемое значение q будет на 0.0005 больше ожидаемого значения y. По этой причине округление до ближайшего с правилом округления half up также (неоднозначно) называется асимметричным округлением.

Одна из причин округления на 0,5 состоит в том, что нужно исследовать только одну цифру. При рассмотрении 17.50000... например, первые три цифры, 17.5, определяют, что цифра будет округлена до 18. Если бы было использовано противоположное правило (округлить наполовину вниз), то все нулевые знаки после запятой нужно было бы рассмотреть, чтобы определить, является ли значение 17.5.

Округлить половину

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

  • Если дробь y равна точно 0.5, то q = y - 0.5.

q = y - 0.5 = - - y + 0.5 {\displaystyle q=\left\lceil y-0.5\right\rceil =-\left\lfloor -y+0.5\right\rfloor ,} {\displaystyle q=\left\lceil y-0.5\right\rceil =-\left\lfloor -y+0.5\right\rfloor \,}

Например, 23.5 округляется до 23, а -23.5 округляется до -24.

Правило округления полураспада не является симметричным, так как фракции, составляющие ровно 0.5, всегда округляются вниз. Эта асимметрия приводит к отрицательному смещению ошибок округления. Например, если дробь y состоит из трех случайных десятичных цифр, то ожидаемое значение q будет на 0.0005 меньше ожидаемого значения y. По этой причине округление долей с правилом округления до половины округления также (неоднозначно) называется асимметричным округлением.

Округляйте на полпути от нуля

Другой распространенный метод связывания, который обычно преподается и используется, это круглый, наполовину удаленный от нуля (или круглый, наполовину удаленный от нуля, в бесконечность), а именно:

  • Если доля y равна точно 0.5, то q = y + 0.5, если y положительна, и q = y - 0.5, если y отрицательна.

q = sgn ( y ) | y | + 0,5 = - sgn ( y ) - | y | - 0,5 {\displaystyle q=\operatorname {sgn}(y)\left\lfloor \left|y\right|+0.5\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|-0.5\right\rceil ,} {\displaystyle q=\operatorname {sgn}(y)\left\lfloor \left|y\right|+0.5\right\rfloor =-\operatorname {sgn}(y)\left\lceil -\left|y\right|-0.5\right\rceil \,}

Например, 23,5 округляется до 24, а -23,5 округляется до -24.

Этот метод симметрично обрабатывает положительные и отрицательные значения, и поэтому не имеет общей погрешности, если исходные числа положительны или отрицательны с одинаковой вероятностью. Однако это правило все равно будет вводить положительное смещение для положительных чисел и отрицательное смещение для отрицательных.

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

Половина круга до нуля

Можно также округлить половину в сторону нуля (или округлить половину в сторону от бесконечности) в отличие от более обычного округления в сторону от нуля (округление в сторону от нуля - это общая конвенция, но не более чем конвенция).

  • Если доля y равна точно 0.5, то q = y - 0.5, если y положительна, и q = y + 0.5, если y отрицательна.

q = sgn ( y ) | y | - 0,5 = - sgn ( y ) - | y | + 0,5 {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|-0.5\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|+0.5\right\rfloor , } {\displaystyle q=\operatorname {sgn}(y)\left\lceil \left|y\right|-0.5\right\rceil =-\operatorname {sgn}(y)\left\lfloor -\left|y\right|+0.5\right\rfloor \,}

Например, 23.5 округляется до 23, а -23.5 округляется до -23.

Этот метод также симметрично обрабатывает положительные и отрицательные значения, и поэтому не имеет общей погрешности, если исходные числа положительны или отрицательны с одинаковой вероятностью. Однако это правило все равно будет вводить отрицательное смещение для положительных чисел и положительное смещение для отрицательных.

Округлый половину до четвёртого

Еще менее предвзятое правило, округленное наполовину до четного, а именно

  • Если дробь y равна 0.5, то q является четным целым числом, ближайшим к y.

Так, например, +23.5 становится +24, +22.5 становится +22, -22.5 становится -22, и -23.5 становится -24.

Этот метод также симметрично обрабатывает положительные и отрицательные значения, и поэтому не имеет общей погрешности, если исходные числа положительны или отрицательны с одинаковой вероятностью. Кроме того, для наиболее разумных распределений y значений ожидаемое (среднее) значение округленных чисел по существу равнозначно значению исходных чисел, даже если все последние являются положительными (или все отрицательные). Однако это правило все равно будет вводить положительное смещение для четных чисел (включая ноль), а для нечетных - отрицательное.

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

Это режим округления по умолчанию, используемый в вычислительных функциях и операторах IEEE 754.

Округлый половину до нечетного

Другое ничьющее правило, которое очень похоже на округляющее половину до четной, а именно

  • Если дробь y равна 0.5, то q - нечетное целое число, ближайшее к y.

Так, например, +22.5 становится +23, +21.5 становится +21, -21.5 становится -21, и -22.5 становится -23.

Этот метод также симметрично обрабатывает положительные и отрицательные значения, и поэтому не имеет общей погрешности, если исходные числа положительны или отрицательны с одинаковой вероятностью. Кроме того, для наиболее разумных распределений y значений ожидаемое (среднее) значение округленных чисел по существу равнозначно значению исходных чисел, даже если все последние являются положительными (или все отрицательные). Однако это правило все равно будет вводить отрицательное смещение для четных чисел (включая ноль), а для нечетных - положительное.

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

Стохастическое закругление

Еще один несмещенный метод закругления - стохастическое закругление:

  • Если дробная часть y равна .5, выбирайте q случайным образом между y + 0.5 и y - 0.5, с одинаковой вероятностью.

Как и в случае с круглыми с половиной до четного, это правило, по сути, не имеет общей предвзятости; но оно также справедливо и в отношении четных и нечетных q-значений. С другой стороны, оно вводит в результат случайную составляющую; выполнение одного и того же вычисления дважды на одних и тех же данных может дать два разных результата. Кроме того, она открыта для бессознательного смещения, если люди (а не компьютеры или устройства случайности) "случайным образом" решают, в каком направлении округлить.

Альтернативное разрывание связей

Один из методов, более непонятный, чем большинство, круглый попеременно наполовину.

  • Если дробная часть равна 0,5, попеременно округляйте вверх и вниз: при первом появлении дробной части 0,5 округляйте вверх; при втором появлении округляйте вниз; и так далее.

Это подавляет случайную составляющую результата, если происшествия 0,5 дробных частей могут быть эффективно пронумерованы. Но это все равно может привнести положительное или отрицательное смещение в соответствии с направлением округления, присвоенным первому происшествию, если общее число происшествий нечетное.

Простое сглаживание

В некоторых случаях все вышеперечисленные методы округления могут быть неудовлетворительными. Например, предположим, что y - это точное измерение звукового сигнала, который округляется до целого числа q, чтобы снизить затраты на хранение или передачу. Если y изменяется медленно с течением времени, любой из описанных выше методов округления приведет к тому, что q будет полностью постоянным на длинных интервалах, разделенным внезапными скачками ±1. При воспроизведении сигнала q эти шаги будут слышны как очень неприятный шум, и любые изменения исходного сигнала между двумя целыми числами будут полностью потеряны.

Один из способов избежать этой проблемы - округлить каждое значение y вверх с вероятностью, равной его доле, и округлить его вниз с добавлением этой вероятности. Например, число 23.17 будет округлено до 24 с вероятностью 0.17, и до 23 с вероятностью 1 - 0.17 = 0.83. (Это эквивалентно округлению вниз y + s, где s - случайное число, равномерно распределенное между 0 и 1). При таком особом округлении, известном как дизеринг, внезапные шаги заменяются менее возмутительным шумом, и даже небольшие вариации исходного сигнала будут в некоторой степени сохранены. Как и при стохастическом подходе к сглаживанию, сглаживание не имеет смещения: если все значения дробей одинаково вероятны, округление на определенную величину так же вероятно, как и округление на ту же самую величину; то же самое верно и для суммы из нескольких округленных чисел. С другой стороны, сглаживание вносит в результат случайную составляющую, значительно большую, чем стохастическое разбиение.

Точнее, ошибка округления для каждого десятичного числа будет равномерно распределенной случайной величиной со средним значением нуля, но со стандартным отклонением 1 / 12 ≈ 0.2886 {\displaystyle 1/{\sqrt {12}}\approx 0.2886} {\displaystyle 1/{\sqrt {12}}\approx 0.2886}что лучше, чем 1/2 стандартного отклонения при использовании простых методов прогнозирования, но немного больше, чем при использовании более простого стохастического метода. Однако сумма n округленных чисел будет случайной величиной с ожидаемым нулевым значением ошибки, но со стандартным отклонением n / 12 {\displaystyle {\sqrt {n}}/{\sqrt {12}}. {\displaystyle {\sqrt {n}}/{\sqrt {12}}}(суммарный остаточный шум), который рассеивается полуквадратично и может стать легко воспринимаемым, даже если стандартное отклонение ошибки округления на выборку будет 1 / 12 n {\displaystyle 1/{\sqrt {12n}}}{\displaystyle 1/{\sqrt {12n}}}, которое медленно сходится полуквадратично с нулем. Таким образом, это случайное распределение все еще может быть слишком высоким для некоторых приложений, округляющих большое количество данных.

Многомерное сглаживание

Этот вариант простого метода дизеринга по-прежнему округляет значения с вероятностью, равной его доле. Однако вместо использования случайного распределения для округления изолированных выборок ошибка округления, возникающая в каждой округленной выборке, суммируется для следующих окружающих элементов для выборки или вычисления; это накопленное значение затем прибавляется к значению этих следующих вычисленных или вычисленных значений для округления, так что измененные значения будут учитывать эту разницу с помощью прогностической модели (например, сглаживание Флойда-Стайнберга).

Затем измененные значения округляются любым из вышеперечисленных методов округления, причем лучшим из них является стохастический метод или метод сглаживания: в этом последнем случае сумма n округленных чисел все равно будет случайной переменной с ожидаемым нулевым значением ошибки, но с отличным постоянным стандартным отклонением 1 / 12 {\displaystyle 1/{\sqrt {12}}. {\displaystyle 1/{\sqrt {12}}}Вместо того, чтобы расходиться полуквадратично при сглаживании изолированных образцов; и общее среднее отклонение ошибки округления на округленный образец будет 1 / ( n 12 ) {\displaystyle 1/(n{\sqrt {12}}}{\displaystyle 1/(n{\sqrt {12}})}, которое будет сходиться гиперболически к нулю, быстрее, чем сходиться с полугиперболическим сглаживанием при сглаживании изолированных образцов.

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

Эффективное распространение накопленных ошибок округления может зависеть от дискретной размерности дискретных данных для округления: при дискретизации двумерных изображений, включая цветные (которые добавляют дискретную размерность цветовых плоскостей), или трехмерных видео (которые добавляют дискретную размерность времени), или от полифонических звуковых данных (с использованием дискретных размеров времени и канала), все же может быть предпочтительнее распространить эту ошибку в предпочтительном направлении, или в равной степени в нескольких ортогональных измерениях, таких как вертикально против вертикального, например. горизонтально для двумерных изображений, или в параллельные цветовые каналы в той же позиции и/или метке времени, и в зависимости от других свойств этих ортогональных дискретных размеров (в соответствии с моделью восприятия). В этих случаях можно использовать несколько аккумуляторов ошибок округления (хотя бы по одному на каждое дискретное измерение) или (n-1)-вектор измерения (или матрицу) аккумуляторов.

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

Округление до простых фракций

В некоторых случаях желательно округлить заданное число x до "аккуратной" дроби - то есть ближайшей дроби z = m/n, числитель m и знаменатель n которой не превышают заданного максимума. Эта задача достаточно отлична от задачи округления значения до фиксированного числа десятичных или двоичных цифр или до кратного заданной единице m. Эта задача связана с последовательностями Фарея, деревом Штерна-Брокота и непрерывными дробями.

Масштабное округление

Этот тип округления, который также называют округлением до логарифмической шкалы, является вариантом округления до заданного приращения, но с приращением, которое изменяется в зависимости от масштаба и величины результата. Конкретно целью является ограничение количества значащих цифр, округление значения так, чтобы не значащие цифры опускались. Такой тип округления происходит неявно с числами, вычисленными с плавающей точкой с ограниченной точностью (например, IEEE-754 float и double), но его можно использовать в более общем плане для округления любых реальных значений с любым положительным числом значащих цифр и любым строго положительным реальным основанием.

Например, ее можно использовать в инженерной графике для представления данных с логарифмической шкалой с переменным шагом (например, длины волн, база которых не обязательно является целочисленной мерой), или в статистических данных для определения классов реальных значений в интервалах экспоненциально возрастающей ширины (но наиболее часто используются целочисленные базы, такие как 10 или 2). [источник?]

Этот тип округления основывается на логарифмическом масштабе, определяемом фиксированным ненулевым реальным масштабирующим коэффициентом s (в большинстве случаев этот коэффициент s=1) и фиксированной положительной базой b>1 (не обязательно целое число и чаще всего отличается от масштабирующего коэффициента), а также фиксированным целым числом n>0 значащих цифр в этой базе (которое будет определять значение приращения, используемого для округления, наряду с вычисленным эффективным масштабом округленного числа).

Номер первичного аргумента (а также результирующее округленное число) сначала представляется в экспоненциальной нотации x = s-a-m-bc, так что знак s либо +1, либо -1, абсолютная мантисса a ограничивается полуоткрытым положительным интервалом [1/b,1], а экспонента c - любым (положительным или отрицательным) целым числом. В этом представлении все значащие цифры находятся в дробной части абсолютной мантиссы, целая часть которой всегда равна нулю.

Если исходное число (или округленное число) равно 0, то абсолютная мантисса а определяется как 0, то экспонент c фиксируется к произвольному значению (0 в большинстве конвенций, но некоторые представления с плавающей точкой не могут использовать нулевую абсолютную мантиссу, а резервируют для экспоненты c конкретное максимальное отрицательное значение, чтобы она представляла само число 0), и знак s может быть произвольно выбран между -1 или +1 (для простого нуля он обычно устанавливается в +1, или он устанавливается в тот же знак, что и аргумент в округленном значении, если представление числа позволяет различать положительные и отрицательные нули, даже если они, в конечном счете, представляют собой одно и то же числовое значение 0).

Масштабируемое экспоненциальное представление как x = a-s-bc также может быть использовано эквивалентно, при этом подписанная мантисса a либо равна нулю, либо находится в пределах одного из двух полуоткрытых интервалов (-1,-1/b] и [+1/b,+1), и это будет сделано в алгоритме, описанном ниже.

Шаги расчета этого масштабируемого округления, как правило, аналогичны следующим:

  1. если х равен нулю, просто верните х; в противном случае:
  2. преобразовать Х в масштабированное экспоненциальное представление, с подписанной мантиссой:
    x = a
    s b c {\displaystyle x=a\cdot s\cdot b^{c},} {\displaystyle x=a\cdot s\cdot b^{c}\,}
    1. пусть x' будет немасштабируемым значением x, разделив его на масштабный коэффициент s:
      x ′ = x / s {\displaystyle x'=x/s,}
      {\displaystyle x'=x/s\,} ;
    2. пусть масштабирующий экспонент c будет единицей плюс базовый логарифм b абсолютного значения x', округленный до целого (до минус бесконечности):
      c = 1 + лог
      b | x ′ | = 1 + лог b | x / с | {\displaystyle c=1+\left\lfloor \log _{b}\left|x'\right|\right\rfloor =1+\left\lfloor \log _{b}\left|x/s\right|\right\rfloor ,}{\displaystyle c=1+\left\lfloor \log _{b}\left|x'\right|\right\rfloor =1+\left\lfloor \log _{b}\left|x/s\right|\right\rfloor \,} ;
    3. пусть подписанная мантисса будет произведением x' разделенным на b к силе c:
      a = x ′
      b - c = x / s b - c {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c},} {\displaystyle a=x'\cdot b^{-c}=x/s\cdot b^{-c}\,}
  3. вычислить округленное значение в этом представлении:
    1. пусть c' будет начальным масштабирующим экспонентом c x':
      c ′ = c {\displaystyle c'=c,}
      {\displaystyle c'=c\,}
    2. пусть m будет приращением для округления мантиссы a в соответствии с количеством значащих цифр:
      m = b - n {\displaystyle m=b^{-n},}
      {\displaystyle m=b^{-n}\,}
    3. пусть a' будет подписанной мантиссой округленной в соответствии с этим приростом m и выбранным режимом округления:
      a ′ = r o u u n d ( a , m ) = r o u n d ( x / s
      b n - c ′ ) b - n {\displaystyle a'=\mathrm {round} (a,m)=\mathrm {round} (x/s\cdot b^{n-c'}) \cdot b^{-n},} {\displaystyle a'=\mathrm {round} (a,m)=\mathrm {round} (x/s\cdot b^{n-c'})\cdot b^{-n}\,}
    4. если абсолютное значение a' не меньше b, то декремент n (умножить приращение m на b), приращение масштабного экспонента c', деление подписанной мантиссы a на b и повторное округление новой подписанной мантиссы a на a' по той же формуле; этого шага можно избежать только в том случае, если абстрактная функция "round()" всегда округляет a до 0 (i.e. когда это простое усечение), но это необходимо, если округление a может быть произведено до бесконечности, так как округленная мантисса в этом случае может иметь более высокий масштабный экспонент, оставляя лишнюю цифру точности.
  4. вернуть округленное значение:
    y = s c a l e d r o u n d ( x , s , b , n ) = a′
    s b c′ = r o u n d ( x / s b n - c′ ) s b c′ - n {\displaystyle y=\mathrm {scaledround} (x,s,b,n)=a'\cdot s\cdot b^{c'}=\mathrm { round} (x/s\cdot b^{n-c'})\cdot s\cdot b^{c'-n},}{\displaystyle y=\mathrm {scaledround} (x,s,b,n)=a'\cdot s\cdot b^{c'}=\mathrm {round} (x/s\cdot b^{n-c'})\cdot s\cdot b^{c'-n}\,} .

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

Например:

  • масштабируемое округление 1.234 с коэффициентом масштабирования 1 в базисе 10 и 3 значащими цифрами (максимальная относительная точность = 1/1000), при использовании любого округления до ближайшего режима, вернет 1.23;
  • Аналогичное масштабируемое округление в 1,236 вернет 1,24;
  • Аналогичное масштабируемое округление 21.236 вернет 21.2;
  • Аналогичное масштабируемое округление в 321.236 вернет 321;
  • масштабируемое округление 1,234 масштабного коэффициента 1 в базисе 10 и 3 значащих цифры (максимальная относительная точность = 1/1000), при использовании режима округления, вернет 1,23;
  • Аналогичное масштабируемое округление в 1,236 также вернет 1,23;
  • масштабируемое округление 3 π / 7 ≈ 6.8571 π 2 - 4 {\displaystyle \scriptstyle 3\pi /7;\approx ;6.8571\cdot \pi \cdot 2^{-4}}{\displaystyle \scriptstyle 3\pi /7\;\approx \;6.8571\cdot \pi \cdot 2^{-4}} с масштабным коэффициентом π {\displaystyle \scriptstyle \pi }{\displaystyle \scriptstyle \pi } в базовых 2 и 3 значащих разрядах (максимальная относительная точность=1/8) при использовании режима округления вернется 6 π 2 - 4 = 3 π / 8 {\displaystyle \scriptstyle \scriptstyle 6\cdot \pi \cdot 2^{-4};=;3\pi /8}{\displaystyle \scriptstyle 6\cdot \pi \cdot 2^{-4}\;=\;3\pi /8} ;
  • аналогичное масштабируемое округление 5 π / 7 ≈ 5.7143 π 2 - 3 {\displaystyle \scriptstyle 5\pi /7;\approx ;5.7143\cdot \pi \cdot 2^{-3}}{\displaystyle \scriptstyle 5\pi /7\;\approx \;5.7143\cdot \pi \cdot 2^{-3}} вернёт 5 π 2 - 3 = 5 π / 8 {\displaystyle \scriptstyle \scriptstyle 5\cdot \pi \cdot 2^{-3};=;5\pi /8}{\displaystyle \scriptstyle 5\cdot \pi \cdot 2^{-3}\;=\;5\pi /8} ;
  • аналогичное масштабируемое округление π / 7 ≈ 4.5714 2 - 5 {\displaystyle \scriptstyle \pi /7;\approx ;4.5714\cdot \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /7\;\approx \;4.5714\cdot \pi \cdot 2^{-5}} вернёт 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle \scriptstyle 4\cdot \pi \cdot 2^{-5};=;=;\pi /8}{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • подобное масштабируемое округление π / 8 = 4 π 2 - 5 {\displaystyle \scriptstyle \pi /8;=;4\cdot \pi \pi \cdot 2^{-5}}{\displaystyle \scriptstyle \pi /8\;=\;4\cdot \pi \cdot 2^{-5}} также вернет 4 π 2 - 5 = π / 8 {\displaystyle \scriptstyle \scriptstyle 4\cdot \pi \pi \cdot 2^{-5};=;\pi /8}{\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-5}\;=\;\pi /8} .
  • аналогичное масштабируемое округление π / 15 ≈ 4.2667 2 - 6 {\displaystyle \scriptstyle \pi /15;\approx ;4.2667\cdot \pi \pi \cdot 2^{-6}}{\displaystyle \scriptstyle \pi /15\;\approx \;4.2667\cdot \pi \cdot 2^{-6}} вернёт 4 π 2 - 6 = π / 16 {\displaystyle \scriptstyle \scriptstyle 4\cdot \pi \cdot 2^{-6};=;=;\pi /16}. {\displaystyle \scriptstyle 4\cdot \pi \cdot 2^{-6}\;=\;\pi /16}.

Округленно до доступной стоимости

Готовые пиломатериалы, писчая бумага, конденсаторы и многие другие продукты обычно продаются только в нескольких стандартных размерах.

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

Когда набор предпочтительных значений расположен на одинаковом расстоянии по логарифмической шкале, выбор ближайшего предпочтительного значения к любому заданному значению можно рассматривать как своего рода масштабируемое округление. Такие "округленные" значения могут быть непосредственно вычислены.

Закругление с плавающей точкой

В арифметике с плавающей точкой округление направлено на превращение заданного значения x в значение z с заданным количеством значащих цифр. Другими словами, z должно быть кратно числу m, которое зависит от величины z. Число m - это мощность основания (обычно 2 или 10) формы с плавающей точкой.

Кроме этой детали, все рассмотренные выше варианты округления относятся и к округлению чисел с плавающей точкой. Алгоритм такого округления представлен выше в разделе "Масштабируемое округление", но с постоянным масштабирующим коэффициентом s=1 и целочисленной базой b>1.

Для результатов, при которых округленный результат переполнится, результатом для направленного округления является либо соответствующая знаковая бесконечность, либо наибольшее репрезентабельное положительное конечное число (либо наименьшее репрезентабельное отрицательное конечное число, если x равно отрицательному), в зависимости от направления округления. Результатом переполнения для обычного случая округления до четного всегда является соответствующая бесконечность.

Кроме того, если бы округлый результат был бы недоливным, т.е. если экспонента превысит наименьшее представляемое целое значение, то эффективный результат может быть либо нулевым (возможно, подписанным, если представление может поддерживать различие знаков для нулей), либо наименьшим представляемым положительным конечным числом (или наибольшим представляемым отрицательным конечным числом, если x отрицательное), возможно, денормальным положительным или отрицательным числом (если в мантиссе хранятся все его значащие цифры), В этом случае самая значащая цифра все равно может быть сохранена в нижнем положении, установив наибольшую сохраненную цифру в ноль, и эта сохраненная мантисса не опускает самую значащую цифру, что возможно при базисе b=2, так как самая значащая цифра всегда 1 в этом базисе), в зависимости от направления округления. Результатом недолива при обычном случае округления до четного всегда является соответствующий ноль.

Двойное округление

Скругление числа дважды подряд к различным точкам, при этом последняя точность является более грубой, не гарантированно дает тот же результат, что и скругление один раз к конечной точности, за исключением случая направленного скругления. Например, при округлении 9.46 до одного знака после запятой дается 9.5, а при округлении до целого числа - 10 с использованием округления наполовину до четного, но при прямом округлении до целого числа дается 9.

Некоторые компьютерные языки и стандарт IEEE 754-2008 диктуют, что при простых вычислениях результат не должен округляться дважды. Это была особая проблема с Java, так как она предназначена для одинакового запуска на разных машинах, для этого пришлось использовать специальные трюки программирования с плавающей точкой x87. Язык Java был изменен, чтобы разрешить различные результаты, где разница не имеет значения и требует использования "Strictfp" классификатора, когда результаты должны точно соответствовать.

Точное вычисление с округленной арифметикой

Для оценки точного значения функции с дискретным доменом и диапазоном можно использовать округлённую арифметику. Например, если известно, что целое число n - это идеальный квадрат, то можно вычислить его квадратный корень, преобразовав n в значение x с плавающей точкой, вычислив приблизительный квадратный корень y из x с плавающей точкой, а затем округлив y до ближайшего целого q. Если n не слишком большое, то ошибка округления в y с плавающей точкой будет меньше 0.5, поэтому округленное значение q будет точным квадратным корнем n. В большинстве современных компьютеров этот метод может быть намного быстрее, чем вычисление квадратного корня n по целочисленному алгоритму.

Дилемма столяра

Уильям Кэхан придумал термин "Дилемма изготовителя стола" за неизвестную стоимость округления трансцендентных функций:

"Никто не знает, сколько будет стоить правильное округление y^w для каждых двух аргументов с плавающей точкой, при котором он не переполняется/не переполняется. Вместо этого авторитетные математические библиотеки вычисляют элементарные трансцендентные функции в основном в пределах чуть более половины ulp и почти всегда хорошо в пределах одной ulp. Почему Y^W не может быть округлено в пределах половины ulp, как SQRT? Потому что никто не знает, сколько это будет стоить... Не существует общего способа предсказать, сколько лишних цифр придется перенести, чтобы вычислить трансцендентальное выражение и правильно округлить его до некоторого заранее заданного числа цифр. Даже тот факт (если он верен), что конечного числа лишних цифр будет в конечном счете достаточно, может быть глубокой теоремой".

Стандарт IEEE с плавающей точкой гарантирует, что сложение, вычитание, умножение, деление, квадратный корень и остаток с плавающей точкой дадут правильно округленный результат бесконечной операции точности. Однако, для более сложных функций такая гарантия не дается, и они, как правило, в лучшем случае, точны только до последнего бита.

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

Сейчас есть несколько пакетов, которые предлагают полную точность. Пакет MPFR дает корректно округленные результаты произвольной точности. IBM написал пакет для быстрых и точных элементарных функций IEEE, и в будущем стандартные библиотеки могут предложить такую точность.

Можно придумать четко определенные вычисляемые числа, которые, возможно, никогда не удастся правильно округлить независимо от того, сколько цифр вычислено. Например, если гипотеза Гольдбаха верна, но недоказуема, то невозможно корректно округлить 0,5 + 10n, где n - первое четное число больше 4, которое не является суммой двух примесей, или 0,5, если такого числа нет. Это, однако, может быть аппроксимировано к любой заданной точности, даже если предположение неопровержимо.

История

Концепция округления очень старая, возможно, даже древняя, чем концепция деления. Некоторые древние глиняные таблетки, найденные в Месопотамии, содержат таблицы с округленными значениями обратных связей и квадратными корнями в основании 60. Округленные приближения к π, длина года и длина месяца также являются древними.

Метод округления до безубыточности служит стандартом ASTM (E-29) с 1940 года. Происхождение терминов "непредвзятое округление" и "статистическое округление" достаточно самоочевидно. В 4-м издании "Вероятность и теория ошибок" 1906 г. Роберт Симпсон Вудворд назвал это "правилом компьютера", указав, что в то время оно широко использовалось человеческими компьютерами, которые вычисляли математические таблицы. В работе Черчилля Эйзенхарта 1947 года "Эффекты округления или группировки данных" (в Избранных методах статистического анализа, McGrawHill, 1947, Eisenhart, Hastay, и Wallis, редакторы) указывалось, что эта практика уже "хорошо зарекомендовала себя" при анализе данных.

Происхождение термина "округление банкиров" остается более непонятным. Если этот метод округления когда-либо был стандартом в банковской сфере, то найти доказательства оказалось чрезвычайно сложно. Напротив, в разделе 2 доклада Европейской комиссии "Введение евро и округление валютных сумм" говорится о том, что ранее не существовало стандартного подхода к округлению в банковской сфере, а также уточняется, что "полусумма" должна округляться в большую сторону.

До 1980-х годов метод округления, используемый в компьютерной арифметике с плавающей точкой, обычно фиксировался аппаратным обеспечением, плохо документировался, был непоследовательным и отличался для каждой марки и модели компьютера. Эта ситуация изменилась после того, как стандарт IEEE 754 для арифметики с плавающей запятой был принят большинством производителей компьютеров. Стандарт позволяет пользователю выбрать один из нескольких режимов округления и в каждом случае точно указать, как должны округляться результаты. Эти особенности сделали численные вычисления более предсказуемыми и машинно-независимыми, а также сделали возможной эффективную и последовательную реализацию интервальной арифметики.

Функции округления на языках программирования

Большинство языков программирования предоставляют функции или специальный синтаксис для округления дробных чисел различными способами. Самые ранние числовые языки, такие как FORTRAN и C, предоставляют только один метод, обычно усечение (к нулю). Этот метод по умолчанию может подразумеваться в определенных контекстах, например, при присвоении дробного числа целой переменной или использовании дробного числа в качестве индекса массива. Другие виды округления должны быть запрограммированы явно; например, округление положительного числа до ближайшего целого может быть реализовано путем сложения 0,5 и усечения.

Однако в последние десятилетия синтаксис и/или стандартные библиотеки большинства языков обычно обеспечивали по крайней мере четыре основные функции округления (вверх/вниз/вниз/вниз, до ближайшего и до нуля). Метод округления может варьироваться в зависимости от языка и версии, и/или может быть выбран программистом. Несколько языков следуют примеру стандарта IEEE-754 с плавающей точкой и определяют эти функции как получение аргумента двойной точности с плавающей точкой и возврат результата того же типа, который при необходимости может быть приведен к целому числу. Поскольку IEEE формат двойной точности имеет 52 дробных бита, такой подход может избежать поддельных переполнений в языках с 32-битными целыми числами. Некоторые языки, такие как PHP, предоставляют функции, округляющие значение до заданного числа десятичных цифр, например, от 4321.5678 до 4321.57 или 4300. Кроме того, многие языки предоставляют функцию форматирования строк "printf" или аналогичную ей, которая позволяет преобразовывать дробное число в строку, округленную до заданного пользователем числа десятичных разрядов (точность). С другой стороны, усечение (округление до нуля) по-прежнему является методом округления по умолчанию, используемым многими языками, особенно при делении двух целочисленных значений.

Напротив, CSS и SVG не определяют никакой специфической максимальной точности для чисел и измерений, которые рассматриваются и выставляются в их объектной модели документа и в их интерфейсе описания-языка интерфейса как строки, как если бы они имели бесконечную точность, и не различают целые числа и значения с плавающей точкой; однако реализации этих языков обычно преобразуют эти числа в IEEE-754 с двойными плавающими точками перед вычислением вычисленных цифр с ограниченной точностью (в частности, в пределах стандартных привязок Javascript или ECMAScript интерфейса).

Другие стандарты округления

Некоторые дисциплины или учреждения издали стандарты или директивы по округлению.

Погодные наблюдения

В директиве, изданной в середине 1966 года, Бюро Федерального координатора по метеорологии США определило, что метеорологические данные должны округляться до ближайшего номера раунда, с правилом "округляться наполовину". Например, 1,5 округленное до целого числа должно стать 2, а -1,5 - -1. До этой даты правило "округлить наполовину от нуля" было правилом "округлить наполовину от нуля".

Отрицательный ноль в метеорологии

Некоторые метеорологи могут написать "-0", чтобы указать температуру от 0,0 до -0,5 градусов (исключая), которая была округлена до целого числа. Эта пометка используется, когда отрицательный знак считается важным, независимо от того, насколько мала величина; например, при округлении температур по шкале Цельсия, где ниже нуля обозначено замерзание. []

Связанные страницы

Вопросы и ответы

В: Что означает слово "округление"?


О: Округление - это замена числового значения другим значением, которое приблизительно равно, но имеет более короткую, простую или явную форму.

В: Что является примером округления?


О: Примером округления может быть округление US$23.74 до US$24, округление дроби 312/937 до 1/3, округление выражения 2 {\displaystyle {\sqrt {2}} до 1.41.

В: Почему мы округляем числа?


О: Мы округляем числа для того, чтобы получить значение, которое легче записать и обработать, чем исходное. Это также может быть сделано для того, чтобы показать точность вычисленного числа.

В: Каковы некоторые потенциальные проблемы с округлением?


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

В: Как округление связано с квантованием?


О: Округление имеет много общего с квантованием, которое происходит, когда физические величины должны быть закодированы числами или цифровыми сигналами.

AlegsaOnline.com - 2020 / 2023 - License CC3