Режимы округления

Рубрика:  Арифметика с плавающей запятойIEEE-754Основы

Рассмотрены 4 режима округления с примерами.

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

Итак, вот 4 режима округления.

  • К нулю. Например, 4,9≈4; −4,9≈−4.
  • К минус бесконечности. Например, 4,9≈4; −4,9≈−5.
  • К плюс бесконечности. Например, 4,9≈5; −4,9≈−4.
  • «К ближайшему чётному» (half to even).

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

В нашем примере, в котором $p=3$, невозможно записать число 4,5, так как для этого потребуется 4 бита в мантиссе: $$ \require{color} 4{,}5=1,00\colorbox{gray}{1} \times 2^2. $$

Последний бит, выделенный серым цветом, не умещается в мантиссу, а потому число должно быть округлено. Мы видим, что число 4,5 отстоит одинаково близко от ближайшего снизу (4=1,00×22) и от ближайшего сверху (5=1,01×22), поэтому возникает неоднозначность, которая разрешается всегда в пользу чётного последнего значащего бита. То есть, в пользу числа 4=1,00×22. Другой пример, число 5,5: $$ \require{color} 5{,}5=1,01\colorbox{gray}{1} \times 2^2. $$

Здесь округление произойдёт вверх, так как в этом случае последний бит будет равен нулю: 6=1,10×22.

Вот ещё несколько примеров, попробуйте разобрать и понять их самостоятельно.

  • $\require{color} 4{,}53125=1{,}00\colorbox{gray}{1}0001\times2^2\approx 5.$
  • $\require{color} 5{,}4375=1{,}01\colorbox{gray}{0}111\times2^2\approx 5.$
  • $\require{color} 3{,}75=1{,}11\colorbox{gray}{1}\times2^1\approx 4.$
  • $\require{color} 3{,}625=1{,}11\colorbox{gray}{0}1\times2^1\approx 3{,}5.$
  • $\require{color} 1{,}375=1{,}01\colorbox{gray}{1}\times2^0\approx 1{,}5.$
  • $\require{color} 1{,}374=1{,}01\colorbox{gray}{0}111\ldots\times2^0\approx 1{,}25.$