Как выполнить округление до четных чисел с плавающей запятой

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

В основном у меня есть бит защиты, круглый бит и липкий бит. Поэтому, если мы сформируем их в вектор и назовем его GRS, тогда применяются следующие правила:

  • Если G = 0, закруглите (ничего не делать)
  • Если G = 1 и RS == 10 или RS == 01, округлите (добавьте один к мантиссе)
  • if GSR = 111, округлый до четного

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

Ответы

Ответ 1

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

Это то, что вы должны сделать, чтобы округлить результат до ближайшего четного числа, используя G, R и S:

GRS - Действие
0xx - round down = ничего не делать (x означает любое значение бит, 0 или 1)
100 - это связь: округлить, если бит мантиссы перед G равен 1, иначе округлить вниз = ничего не делать
101 - округлить
110 - округлить
111 - округление

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

В случае галстука вы добавляете 1 к мантиссе, если мантисса странная, и вы ничего не добавляете, даже если это возможно. Это делает результат округленным до ближайшего четного значения.

Ответ 2

Просто хотел добавить, что бит S - это не просто бит после GR. Если после бит GRS есть биты, это фактически логический ИЛИ из них, включая бит S.
Другими словами, если есть бит, следующий за GR битами 1, то значение S будет 1 > .