Підсумовування чисел із плаваючою комою

Зараз ми зробимо доповнення до статті про однобайтні числа з плаваючою комою Число стандарту IEEE 754 одинарної точності має настільки багато біт, що простіше пояснити як працює підсумовування чисел з плаваючою комою на прикладі найменшого уявлення числа з плаваючою комою.

Додавання - це просто! Припустимо, що вам необхідно скласти два числа з плаваючою точкою X та Y.

Наприклад показник ступеня Y менше або дорівнює показнику ступеня X. Нехай показник Y дорівнюватиме у, а Х відповідно х

Алгоритм додавання виглядає так:

  • Уявити числа у нормованому вигляді. Таким чином, ми явно представляємо приховану одиницю.
  • Для продовження процесу підсумовування нам необхідно, щоб експоненти двох чисел були рівними, ми робимо це переписуючи значення Y. Це денормалізує Y, але значення відповідає нормалізованому Y.
  • Додати різницю x-y до експонента числа Y. Зрушити мантису числа Y на x-y розрядів для компенсування змін в експоненті.

  • Додавання двох мантис чисел X та скоригованого Y.
  • Якщо сума на попередньому етапі зміщує одиницю нормалізації, необхідно зрушити експоненту, і повторити підсумовування.
  • Конвертування в однобайтну форму подання числа з плаваючою комою
  • Складемо такі два числа:

    Ще раз пройдемо всі кроки:

      Уявити числа у нормованому вигляді. Таким чином, ми явно представляємо приховану одиницю.

    У нормалізованому вигляді X дорівнює 1,110х2 2 і Y є 1.000х2 0

    Для продовження процесу підсумовування нам необхідно, щоб експоненти двох чисел були рівними, ми робимо це переписуючи значення Y. Це денормалізує Y, але значення відповідає нормалізованому Y.

    Додати різницю x-y до експонента числа Y. Зрушити мантису числа Y на x-y розрядів для компенсування змін в експоненті.

    Різниця експонент 2. Отже, додамо 2 до показника Y і зрушимо точку прихованої одиниці вліво на 2. Таким чином отримаємо 0,0100х2 . Це еквівалентно старому значенню Y. Назвемо це скоригованим значенням Y'

    Додавання двох мантис чисел X та скоригованого Y.

    Додамо 1,110 до 0,01. Сума: 10,0. Експонента як і дорівнює показнику експоненти числа X, яка у свою чергу дорівнює двом.

    Якщо сума на попередньому етапі зміщує одиницю нормалізації, необхідно зрушити експоненту, і повторити підсумовування.

    У нашому випадку сума 10,0 має два біти ліворуч від точки. Щоб нормалізувати число нам потрібно, перемістити точку вліво на 1 розряд і збільшити експоненту на 1. Підсумковий результат: 1,000 х 2 3 .

    Конвертування в однобайтну форму подання числа з плаваючою комою

    Складемо такі два числа:

    Ще раз пройдемо всі кроки:

      Уявити числа у нормованому вигляді. Таким чином, ми явно представляємо приховану одиницю.

    У нормалізованому вигляді X дорівнює 1,110х2 2 і Y є 1,000х2 -1

    Для продовження процесу підсумовування нам необхідно, щоб експоненти двох чисел були рівними, ми робимо це переписуючи значення Y. Це денормалізує Y, але значення відповідає нормалізованому Y.

    Додати різницю x-y до експонента числа Y. Зрушити мантису числа Y на x-y розрядів для компенсування змін в експоненті.

    Різниця експонент 3. Отже, додамо 3 до показника Y і зрушимо точку прихованої одиниці вліво на 3. Таким чином отримаємо 0,0100х2 3 . Це еквівалентно старому значенню Y. Назвемо це скоригованимзначенням Y'

    Додавання двох мантис чисел X та скоригованого Y.

    Додамо 1,110 до 0,00111. Сума: 1,11111. Експонента як і дорівнює показнику експоненти числа X, яка у свою чергу дорівнює двом.

    Якщо сума на попередньому етапі зміщує одиницю нормалізації, необхідно зрушити експоненту, і повторити підсумовування.

    У нашому випадку сума 1,11111 має одну біту ліворуч від точки. Таким чином, число вже представлене в нормалізованому вигляді і нам не потрібно робити додаткових дій. Підсумковий результат: 1,111111х2 3 .

    Конвертування в однобайтну форму подання числа з плаваючою комою

    У нас є тільки 3 біти для подання мантиси, але у нас у відповіді 5 біт. Вочевидь, це схоже необхідність апаратного округлення числа з плаваючою комою.

    Але для простоти, ми обріжемо додаткові два біти. Після усічення, ми отримуємо 1,111х2+2. Уявімо це у форматі з плаваючою точкою.