Пусть в системе с основанием
выполняется округление числа с
разрядами до числа с
разрядами;
,
;
. И пусть числа имеют равные веса. Тогда средняя ошибка округления задается выражением
.
При любом фиксированном способе округления, определяемом лишь отбрасываемыми разрядами ошибка от округления до меньшего числа разрядов будет иметь систематическое смещение (т.е. , — прим. GAA) при любой системе счисления с четным основанием. [1] Очевидно (и об этом говорит
wiki: “This method is also known as
unbiased rounding”),
при использовании банковского округления средняя ошибка равна нулю.
В АЛУ процессоров операции, иногда, выполняются с
разрядами, а при сохранении в регистре округляются до
разрядов. Кроме того, при сохранении (выгрузке результатов в память) в переменные типа double или single вновь происходит округление (округление не происходит при сохранении в переменную типа extended). Так что описанная модель округления, в принципе, имеет смысл. Как модель, так и банковское правило округления, по-моему, имеет некоторое значение не только в банковских, но и в длительных геодезических расчетах с малым числом разрядов (считали раньше вручную). Возможно поэтому, банковское правило называют в естественных науках Гауссовым правилом округления (на русском см., например, [2]).
alex_kol писал(а):
... вопрос: а чем нечетные цифры лучше четных?
Округление к четному есть договоренность. Очевидно, можно правило изменить и округлять всегда к нечетному числу (это отмечается в [3]). Но так уж договорились.
Refs.
[1]
Ильин В.А., Позняк Э.Г. Основы математического анализа. Т.1 — М.: Наука, 1982. Дополнение 2 «Об ошибках в округлении чисел в системе счисления с четным и нечетным основанием»
[По-моему, после слов «и мы получим после несложных вычислений, что...» в записи суммы, допущена опечатка, но на результат она не влияет].
[2]
Яворский В.А. Планирование научного эксперимента и обработка экспериментальных данных. Метод. ук. к выполн. лаб. работ — МФТИ, 2006. Раздел 7 «Учет погрешности в записи окончательного результата измерения»
[К сожалению текст не особо строгий: при очень беглом прочтении обратил внимание на то, что определения некоторых понятий формулируются без указания того, что такие определения не являются общепринятыми].
[3]
Выгодский М.Я. Справочник по элементарной математике. — М.: Наука, 1979. §35 «Правила округления».
[Добавлено 29.07.08]
В стандарте IEEE-754 имеется четыре режима округления:
1) к ближайшему четному;
2) к нулю;
3) к положительной и отрицательной бесконечности.
Эти режимы поддерживаются, например, сопроцессорами Intel x87 и FPU более поздних процессоров: 486, Pentium.
Из раздела 2.2.3 документа INTEL 80387 PROGRAMMER'S REFERENCE MANUAL, 1987:
Rounding occurs in arithmetic and store operations when the format of the destination cannot exactly represent the infinitely precise true result. For example, a real number may be rounded if it is stored in a shorter real format, or in an integer format. Or, the infinitely precise true result may be rounded when it is returned to a register.
The NPX [Numeric Processor Extension] has four rounding modes, selectable by the RC field in the control word (see Figure 2-3). Given a true result b that cannot be represented by the target data type, the 80387 determines the two representable numbers a and c that most closely bracket b in value (a < b < c). The processor then rounds (changes) b to a or to c according to the mode selected by the RC field as shown in Table 2-5. Rounding introduces an error in a result that is less than one unit in the last place to which the result is rounded.
1. "Round to nearest" is the default mode and is suitable for most applications; it provides the most accurate and statistically unbiased estimate of the true result.
2. The "chop" or "round toward zero" mode is provided for integer arithmetic applications.
3. "Round up" and "round down" are termed directed rounding and can be used to implement interval arithmetic. Interval arithmetic generates a certifiable result independent of the occurrence of rounding and other errors. The upper and lower bounds of an interval may be computed by executing an algorithm twice, rounding up in one pass and down in the other.
Из раздела 3.2.2 документа Intel387™ SX MATH COPROCESSOR, 1995:
The rounding control (RC) field (bits 11–10) provide for directed rounding and true chop, as well as the unbiased round to nearest even mode specified in the IEEE standard. Rounding control affects only those instructions that perform rounding at the end of the operation (and thus can generate a precision exception); namely, FST, FSTP, FIST, all arithmetic instructions (except FPREM, FPREM1, FXTRACT, FABS, and FCHS) and all transcendental instructions.
Для иллюстрации выполним такой пример (Turbo Pascal 7, Delphi 5):
Код:
{$N+} {NPU On}
Var
s: single;
begin
s:= -3/2; writeln('Round(-1.5)=', Round(s));
s:= -1/2; writeln('Round(-0.5)=', Round(s));
s:= +1/2; writeln('Round(+0.5)=', Round(s));
s:= +3/2; writeln('Round(+1.5)=', Round(s));
end.
Результат выполнения (TP7, Delphi на Intel Pentium III, AMD Athlon 64): -2, 0, 0, 2.
Т.е., действительно, выполняется округление к ближайшему четному (режим округления по умолчанию).
Просмотр ассемблерного кода в отладчике показывает, по существу, в TP7 округление реализуется загрузкой вещественной переменной в стек FPU и последующим сохранением целого в ячейке памяти:
1) fld s (загрузка переменной типа single в вершину стека перед вызовом Round)
2) fistp dword ptr [xxxx] (выгрузка целого во временную переменную по адресу [xxxx])
Другими словами округление осуществляет инструкцией fistp.