Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Графики результата y округления x различными методами. Для наглядности графики показаны смещенными от целых значений y . В  файле SVG наведите указатель мыши на метод, чтобы выделить его, а в браузерах с поддержкой SMIL щелкните, чтобы выбрать или отменить выбор.

Завершают средства замены номера с приближенным значением , которое имеет более короткое , простое , или более явное представление. Например, замена 23,4476 доллара на 23,45 доллара, дроби 312/937 на 1/3 или выражения 2 на 1,414.

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

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

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

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

Волнистый знак равенства ( : приблизительно равняться ) иногда используется для обозначения округления точных цифр, например, 9,98 ≈ 10. Этот знак был введен Альфред Джордж Гринхилл в 1892. [1]

Идеальные характеристики методов округления включают:

  1. Округление должно выполняться функцией . Таким образом, когда один и тот же ввод округляется в разных случаях, вывод не изменяется.
  2. Расчеты, выполненные с округлением, должны быть близки к расчетам без округления.
    • В результате (1) и (2) результат округления должен быть близок к его входу, часто как можно ближе к некоторой метрике .
  3. Чтобы считать округлением, диапазон будет подмножеством домена . Классический диапазон представляет собой целые числа, Z .
  4. Округление должно сохранять симметрии, которые уже существуют между доменом и диапазоном. С конечной точностью (или дискретной областью) это означает устранение смещения .
  5. Метод округления должен быть полезен в информатике или человеческой арифметике, где используется конечная точность и скорость является важным фактором.

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

Как правило, округление идемпотентно ; [2] т.е. после округления числа повторное округление не изменит его значения. Функции округления также монотонны ; т.е. округление большего числа приводит к тому же или большему результату, чем округление меньшего числа.

Типы округления [ править ]

Типичные проблемы округления включают:

Округление до целого [ править ]

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

Направленное округление до целого числа [ править ]

Эти четыре метода называются направленным округлением , поскольку все смещения от исходного числа x к округленному значению y направлены к одному и тому же предельному значению (0, + ∞ или −∞) или от него. Направленное округление используется в интервальной арифметике и часто требуется в финансовых расчетах.

Если x положителен, округление в меньшую сторону аналогично округлению в сторону нуля, а округление в большую сторону - как округление от нуля. Если x отрицателен, округление в меньшую сторону аналогично округлению от нуля, а округление в большую сторону - как округление до нуля. В любом случае, если x - целое число, y - это просто x .

Если многие вычисления выполняются последовательно, выбор метода округления может очень сильно повлиять на результат. Знаменитый случай связан с новым индексом, созданным Ванкуверской фондовой биржей в 1982 году. Первоначально он был установлен на уровне 1 000 000 (с точностью до трех знаков после запятой), а через 22 месяца упал примерно до 520, тогда как цены на акции в целом за этот период выросли . Проблема была вызвана тем, что индекс пересчитывался тысячи раз в день и всегда округлялся до трех знаков после запятой, так что ошибки округления накапливались. Пересчет с лучшим округлением дал значение индекса 1098,892 на конец того же периода. [3]

В приведенных ниже примерах sgn ( x ) относится к знаковой функции, примененной к исходному числу x .

Округление [ править ]

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

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

Округление [ править ]

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

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

Округление в сторону нуля [ править ]

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

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

Округление от нуля [ править ]

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

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

Округление до ближайшего целого [ править ]

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

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

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

На практике обычно используются числа с плавающей запятой , которые имеют еще больше вычислительных нюансов, поскольку они неравномерно разнесены.

Округлить до половины [ править ]

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

  • Если доля x точно 0,5, то y  =  x  + 0,5

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

Однако некоторые языки программирования (такие как Java, Python) определяют здесь свою половину вверх как округленную половину от нуля . [4] [5]

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

Округлить до половины [ править ]

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

  • Если доля x точно 0,5, то y  =  x  - 0,5

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

Округлить половину до нуля [ править ]

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

  • Если доля x равна точно 0,5, тогда y  =  x  - 0,5, если x положительный, и y  =  x  + 0,5, если x отрицательный.

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

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

Округлить половину от нуля [ править ]

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

  • Если доля x равна точно 0,5, тогда y = x + 0,5, если x положительный, и y = x - 0,5, если x отрицательный.

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

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

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

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

Округлить половину до четного [ править ]

Правило разрешения ничьей без положительного / отрицательного смещения и без смещения в сторону / от нуля - округление от половины до четного . Согласно этому соглашению, если дробная часть x равна 0,5, то y является ближайшим к x четным целым числом . Так, например, +23,5 становится +24, как и +24,5; в то время как -23,5 становится -24, как и -24,5. Эта функция сводит к минимуму ожидаемую ошибку при суммировании округленных цифр, даже если входные данные в основном положительные или в основном отрицательные.

Этот вариант методы округления до ближайшей также называется сходящимся округлением , статистик округление , голландское округлением , Gaussian округления , нечетные даже округление , [6] или банкиров округление .

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

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

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

Округлить половину до нечетного [ править ]

Похожее правило разрешения ничьей - округление от половины до нечетного . В этом подходе, если доля x равна 0,5, тогда y - нечетное целое число, ближайшее к x . Так, например, +23,5 становится +23, как и +22,5; в то время как -23,5 становится -23, как и -22,5.

Этот метод также свободен от положительного / отрицательного смещения и смещения в сторону / от нуля.

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

Рандомизированное округление до целого числа [ править ]

Чередование тай-брейков [ править ]

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

  • Если дробная часть равна 0,5, попеременное округление в большую или меньшую сторону: при первом появлении дробной части 0,5 округление в большую сторону; для второго случая округлить в меньшую сторону; и так далее. (В качестве альтернативы округление первой дробной части 0,5 может быть определено случайным начальным числом .)

Если вхождений 0,5 дробных частей происходит значительно чаще, чем перезапуск «подсчета» вхождений, то это эффективно без смещения. С гарантированным нулевым смещением это полезно, если числа должны быть суммированы или усреднены.

Случайное разрешение ничьей [ править ]

  • Если дробная часть x равна 0,5, выберите y случайным образом из x + 0,5 и x - 0,5 с равной вероятностью. Все остальные округляются до ближайшего целого числа.

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

Стохастическое округление [ править ]

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

Например, 1,6 будет округлено до 1 с вероятностью 0,4 и до 2 с вероятностью 0,6.

Стохастическое округление является точным, чего никогда не может быть функция округления . Например, предположим, что вы начали с 0 и добавили к нему 0,3 сто раз, округляя промежуточную сумму между каждым добавлением. Результатом будет 0 при обычном округлении, но при стохастическом округлении ожидаемый результат будет 30, что является таким же значением, полученным без округления. Это может быть полезно в машинном обучении, где обучение может итеративно использовать арифметические операции с низкой точностью. [7] Стохастическое округление - это способ достижения одномерного дизеринга.

Сравнение подходов к округлению до целого числа [ править ]

Округление до других значений [ править ]

Округление до указанного кратного [ править ]

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

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

Например, округление x  = 2,1784 доллара до целых центов (т. Е. До кратного 0,01) влечет за собой вычисление 2,1784 / 0,01 = 217,84, затем округление до 218 и, наконец, вычисление 218 × 0,01 = 2,18.

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

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

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

Логарифмическое округление [ править ]

Округление до указанной степени [ править ]

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

Многие предостережения, применимые к округлению до кратного, применимы и к округлению до степени.

Масштабированное округление [ править ]

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

Например, резисторы имеют предпочтительные числа в логарифмической шкале. В частности, для резисторов с точностью до 10% они поставляются с номиналами 100, 120, 150, 180, 220 и т.д., округленными до кратных 10 ( серия E12 ). Если расчет показывает, что требуется резистор на 165 Ом, то log (150) = 2,176, log (165) = 2,217 и log (180) = 2,255. Логарифм 165 ближе к логарифму 180, поэтому резистор на 180 Ом был бы первым выбором, если нет других соображений.

Округление значения x ∈ ( a , b ) до a или b зависит от того, больше или меньше возведенное в квадрат значение x 2 произведения ab . Значение 165 округляется до 180 в примере резисторов, потому что 165 2 = 27225 больше, чем 150 × 180 = 27000 .

Округление с плавающей запятой [ править ]

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

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

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

Округление до простой дроби [ править ]

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

Округление до доступного значения [ править ]

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

Многие процедуры проектирования описывают, как вычислить приблизительное значение, а затем «округлить» до некоторого стандартного размера с помощью таких фраз, как «округлить до ближайшего стандартного значения», «округлить до ближайшего стандартного значения» или «округлить до ближайшего стандартного значения». . [8] [9]

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

Округление в других контекстах [ править ]

Дизеринг и распространение ошибок [ править ]

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

Распространение ошибок пытается гарантировать, что ошибка в среднем сведена к минимуму. При плавном наклоне от единицы до нуля выход будет равен нулю для первых нескольких членов, пока сумма ошибки и текущего значения не станет больше 0,5, и в этом случае выводится 1, а разница вычитается из ошибки. так далеко. Смешение Флойда – Стейнберга - это популярная процедура распространения ошибок при оцифровке изображений.

В качестве одномерного примера предположим, что числа 0,9677 , 0,9204 , 0,7451 и 0,3091 встречаются по порядку, и каждое из них необходимо округлить до кратного 0,01 . В этом случае кумулятивные суммы 0,9677 , 1,8881 = 0,9677 + 0,9204 , 2,6332 = 0,9677 + 0,9204 + 0,7451 и 2,9423 = 0,9677 + 0,9204 + 0,7451 + 0,3091 округляются до кратного 0,01 : 0,97 , 1,89 , 2,63 и 2.94 . Первое из них и разница соседних значений дают желаемые округленные значения: 0,97, 0,92 = 1,89 - 0,97 , 0,74 = 2,63 - 1,89 и 0,31 = 2,94 - 2,63 .

Арифметика Монте-Карло [ править ]

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

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

Можно использовать округленную арифметику для оценки точного значения функции с целочисленным доменом и диапазоном. Например, если мы знаем, что целое число n представляет собой полный квадрат, мы можем вычислить его квадратный корень, преобразовав n в значение z с плавающей запятой , вычислив приблизительный квадратный корень x из z с плавающей запятой, а затем округлив x до ближайшее целое число y . Если n не слишком велико, ошибка округления числа с плавающей запятой в x будет меньше 0,5, поэтому округленное значение y будет точным квадратным корнем из n . Вот почему правила слайдов может использоваться для точной арифметики.

Двойное округление [ править ]

Округление числа дважды подряд до различных уровней точности, причем последняя точность является более грубой, не гарантирует того же результата, что и однократное округление до конечной точности, за исключением случая направленного округления. [nb 1] Например, округление 9,46 до одного десятичного знака дает 9,5, а затем 10 при округлении до целого числа с использованием округления половины до четного, но даст 9 при непосредственном округлении до целого числа. Борман и Чатфилд [12] обсуждают последствия двойного округления при сравнении данных, округленных до одного десятичного знака, с пределами спецификации, выраженными с помощью целых чисел.

В судебных процессах по делу Мартинес против Олстейт и Сендехо против фермеров , которые велись между 1995 и 1997 годами, страховые компании утверждали, что двойное округление премий допустимо и фактически необходимо. Суды США вынесли решение против страховых компаний и предписали им принять правила, обеспечивающие однократное округление. [13]

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

В некоторых алгоритмах промежуточный результат вычисляется с большей точностью, а затем должен быть округлен до конечной точности. Двойного округления можно избежать, выбрав соответствующее округление для промежуточных вычислений. Это состоит в том, чтобы избегать округления до средних точек для окончательного округления (кроме случаев, когда средняя точка точна). В двоичной арифметике идея состоит в том, чтобы округлить результат до нуля и установить младший бит в 1, если округленный результат неточен; это округление называется липким округлением . [16] Эквивалентно, он заключается в возврате промежуточного результата, если он точно представим, и ближайшего числа с плавающей запятой с нечетным значением в противном случае; именно поэтому его также называют округлением до нечетного . [17] [18]

Дилемма изготовителя стола [ править ]

Уильям М. Кахан ввел термин «дилемма создателя стола» для обозначения неизвестной стоимости округления трансцендентных функций :

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

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

Используя теорему Gelfond-Шнайдер и Линдеман-Вейерштрассу теоремы многих из стандартных элементарных функций может быть доказано вернуть трансцендентные результаты , когда даны рациональные ненулевых аргументы; поэтому всегда можно правильно округлить такие функции. Однако определение предела для данной точности того, насколько точные результаты должны быть вычислены, прежде чем можно будет гарантировать правильно округленный результат, может потребовать много времени вычислений или может быть недостижимым. [20] На практике, когда этот предел неизвестен или слишком велик, необходимо принять какое-то решение в реализации (см. Ниже), но в соответствии с вероятностной моделью правильное округление может выполняться с очень высокой вероятностью.

Некоторые программные пакеты предлагают правильное округление. Пакет GNU MPFR дает правильно округленные результаты произвольной точности. Некоторые другие библиотеки реализуют элементарные функции с правильным округлением с двойной точностью:

  • IBM libultim, только с округлением до ближайшего. [21] Эта библиотека использует до 768 бит рабочей точности.
  • Библиотека libmcr от Sun Microsystems в 4 режимах округления. [22] Для сложных случаев эта библиотека также использует множественную точность, и количество слов увеличивается на 2 каждый раз, когда возникает дилемма создателя таблиц (с неопределенным поведением в очень маловероятном случае, когда достигается некоторый предел машины) .
  • CRlibm, написанный старой командой Arénaire (LIP, ENS Lyon ). Он поддерживает 4 режима округления и зарекомендовал себя. [23]

Существуют вычислимые числа, для которых невозможно определить округленное значение, независимо от того, сколько цифр вычислено. Конкретных примеров привести нельзя, но это следует из неразрешимости проблемы остановки . Например, если гипотеза Гольдбаха верна, но недоказуема , то результат округления следующего значения до следующего целого числа не может быть определен: 1 + 10 - n, где n - первое четное число, большее 4, которое не является суммой двух простые числа или 1, если такого числа нет. Округленный результат равен 2, если такое число nсуществует и 1 в противном случае. Однако значение до округления может быть приближено с любой заданной точностью, даже если предположение недоказуемо.

Взаимодействие со строковым поиском [ править ]

Округление может отрицательно сказаться на строковом поиске числа. Например, π, округленное до четырех цифр, будет «3,1416», но простой поиск этой строки не обнаружит «3,14159» или любое другое значение π, округленное до более чем четырех цифр. Напротив, усечение не страдает этой проблемой; например, простая строка поиск для «3,1415», который является π усеченными до четырех цифр, обнаружат значения π усеченный до более четырех цифр.

История [ править ]

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

Метод округления до четности используется в качестве стандарта ASTM (E-29) с 1940 года. Происхождение терминов « беспристрастное округление» и « статистическое округление» не требует пояснений. В четвертом издании « Вероятности и теории ошибок» 1906 года [25] Роберт Симпсон Вудворд назвал это «правилом компьютера», указывая на то, что в то время оно широко использовалось людьми-компьютерами, которые вычисляли математические таблицы. Черчилль Эйзенхарт указал, что к 1940-м годам эта практика уже «прочно утвердилась» в анализе данных. [26]

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

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

В настоящее время многие исследования имеют тенденцию округлять до кратных 5 или 2. Например, Йорг Батен использовал возрастную кучу во многих исследованиях для оценки уровня математической грамотности древнего населения. Он разработал индекс ABCC , который позволяет сравнивать навыки счета среди регионов без каких-либо исторических источников, где измерялась грамотность населения . [28]

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

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

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

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

Другие стандарты округления [ править ]

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

Наблюдения за погодой в США [ править ]

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

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

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

См. Также [ править ]

  • Точные таблицы Гала
  • Интервальная арифметика
  • ISO 80000-1
  • Алгоритм суммирования Кахана
  • Ближайшая целочисленная функция
  • Усечение
  • Знаковое представление
  • Пропорциональное представительство в партийных списках - это приложение округления к целым числам, которое было тщательно исследовано.
  • Округление наличных денег в связи с отсутствием очень дешевых монет

Примечания [ править ]

  1. ^ Другой случай, когда двойное округление всегда приводит к тому же значению, что и прямое округление до конечной точности, - это когда система счисления является нечетной.

Ссылки [ править ]

  1. ^ Исайя Лэнкхэм, Бруно Нахтергаэле , Энн Шиллинг : линейная алгебра как введение в абстрактную математику. World Scientific, Сингапур, 2016 г., ISBN  978-981-4730-35-8 , стр. 186.
  2. ^ Кулиша, Ulrich W. (июль 1977). «Математические основы компьютерной арифметики». Транзакции IEEE на компьютерах . С-26 (7): 610–621. DOI : 10.1109 / TC.1977.1674893 .
  3. ^ Хайэм, Николас Джон (2002). Точность и стабильность численных алгоритмов . п. 54 . ISBN 978-0-89871-521-7.
  4. ^ "java.math.RoundingMode" . Oracle.
  5. ^ "decimal - Десятичная арифметика с фиксированной и плавающей запятой" . Фонд программного обеспечения Python.
  6. ^ Руководство по разработке стандартов проектирования (НАСА), X-673-64-1F, p90
  7. ^ а б Гупта, Суйог; Angrawl, Анкур; Гопалакришнан, Кайлас; Нараянан, Притиш (09.02.2016). «Глубокое обучение с ограниченной числовой точностью». п. 3. arXiv : 1502.02551 [ cs.LG ].
  8. ^ "Стабилитроны регуляторы напряжения"
  9. ^ "Создайте тестер зеркала"
  10. ^ Брюс Трамп, Кристин Шнайдер. «Формула Excel рассчитывает стандартные значения сопротивления 1%». Электронный дизайн , 21.01.2002. [1]
  11. ^ Паркер, Д. Стотт; Eggert, Paul R .; Пирс, Брэд (28 марта 2000). «Арифметика Монте-Карло: основа для статистического анализа ошибок округления» . Вычисления IEEE в науке и технике.
  12. ^ Борман, Фил; Чатфилд, Мэрион (10 ноября 2015 г.). «Избегайте опасности использования округленных данных». Журнал фармацевтического и биомедицинского анализа . 115 : 506–507. DOI : 10.1016 / j.jpba.2015.07.021 . PMID 26299526 . 
  13. ^ Дебора Р. Хенслер (2000). Дилеммы коллективного иска: преследование общественных целей ради личной выгоды . РЭНД. С.  255–293 . ISBN 0-8330-2601-1.
  14. Самуэль А. Фигероа (июль 1995 г.). «Когда двойное округление безобидно?». Информационный бюллетень ACM SIGNUM . ACM. 30 (3): 21–25. DOI : 10.1145 / 221332.221334 .
  15. ^ Роджер Golliver (октябрь 1998). «Эффективное создание ортогональных двойных результатов IEEE по умолчанию с использованием расширенного оборудования IEEE» (PDF) . Intel.
  16. ^ Мур, Дж. Стротер; Линч, Том; Кауфманн, Мэтт (1996). «Механически проверенное доказательство правильности ядра алгоритма деления с плавающей запятой AMD5K86» (PDF) . Транзакции IEEE на компьютерах . 47 . CiteSeerX 10.1.1.43.3309 . DOI : 10.1109 / 12.713311 . Проверено 2 августа 2016 .  
  17. ^ Boldo, Сильви; Мелькионд, Гийом (2008). «Эмуляция FMA и правильно округленных сумм: проверенные алгоритмы с округлением до нечетных» (PDF) . Транзакции IEEE на компьютерах . 57 (4): 462–471. DOI : 10.1109 / TC.2007.70819 . Проверено 2 августа 2016 .
  18. ^ "21718 - real.c округление не идеально" . gcc.gnu.org .
  19. ^ Кахан, Уильям Мортон . "Слишком умный логарифм наполовину" . Проверено 14 ноября 2008 .
  20. ^ Мюллер, Жан-Мишель; Брисебар, Николас; де Динешен, Флоран; Жаннерод, Клод-Пьер; Лефевр, Винсент; Мелькионд, Гийом; Revol, Натали; Stehlé, Damien; Торрес, Серж (2010). «Глава 12: Решение дилеммы производителя стола» . Справочник по арифметике с плавающей точкой (1-е изд.). Birkhäuser . DOI : 10.1007 / 978-0-8176-4705-6 . ISBN 978-0-8176-4704-9. LCCN  2009939668 .
  21. ^ "libultim - окончательная библиотека элементарных функций с правильным округлением" .
  22. ^ "libmcr - библиотека элементарных функций с правильным округлением" .
  23. ^ «CRlibm - Математическая библиотека с правильным округлением» . Архивировано из оригинала на 2016-10-27.
  24. ^ Дункан Дж. Мелвилл. «Глиняная таблетка YBC 7289». 2006 г.
  25. ^ «Вероятность и теория ошибок» . Historical.library.cornell.edu .
  26. ^ Черчилль Эйзенхарт (1947). «Влияние округления или группировки данных» . В Эйзенхарте; Хастай; Уоллис (ред.). Избранные методы статистического анализа для научных и промышленных исследований, а также производства и управления . Нью-Йорк: Макгроу-Хилл. С. 187–223 . Проверено 30 января 2014 .
  27. ^ http://ec.europa.eu/economy_finance/publications/publication1224_en.pdf
  28. ^ Baten Йорг (2009). «Количественная оценка грамотности: возрастная куча и история человеческого капитала» (PDF) . Журнал экономической истории . 69 (3): 783–808. DOI : 10.1017 / S0022050709001120 . ЛВП : 10230/481 .
  29. ^ «Спецификация языка ECMA-262 ECMAScript» (PDF) . ecma-international.org .
  30. ^ OFCM, 2005: Федеральный метеорологический Справочник № 1 архивация 1999-04-20 в Wayback Machine ., Вашингтон, округ Колумбия, 104 с.

Внешние ссылки [ править ]

  • Вайсштейн, Эрик В. «Округление» . MathWorld .
  • Введение в различные алгоритмы округления , доступное широкой аудитории, но особенно полезное для тех, кто изучает информатику и электронику.
  • Как реализовать пользовательские процедуры округления от Microsoft (сломано)