Округление

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

Любая реализация стандарта IEEE-754 обязана поддерживать режим округления к ближайшему (round to nearest) в качестве дефолтного. В этом режиме должно возвращаться ближайшее к результату представимое значение, в случае равноудаленности (tie-breaking rule) необходимо возвращать число с нулевым младшим битом мантиссы (lsb - least significant bit).

Рассмотрим этот момент поподробнее.
Пусть a = 1.0, b = 2^-24 - числа с плавающей точкой в формате float (p = 24)
Очевидно, что их сумма a + b = 1 + 2^-24 не может быть представлена в целевом формате:
`1^(0).0^(-1)0^(-2)0^(-3) ... 0000^(-23) 1^(-24)0 ... 0`
Результат находится ровно посередине между двумя представимыми в данном формате числами: `1^(0).0^(-1)0^(-2)0^(-3) ... 0000^(-23) = 1.0
`1^(0).0^(-1)0^(-2)0^(-3) ... 0001^(-23) = 1 + 2^-23
Согласно правилу точного округления мы выбираем 1.0 так как lsb мантиссы = 0 и
`s = a o+ b = 1.0`

Аналог для десятичной системы - это так называемое банковское округление: округление к ближайшему четному числу при последней цифре равной 5. Например, `4.5 ~~ 4`, но `5.5 ~~ 6`