Сумиране на числа с плаваща запетая

Сега ще направим допълнение към статията за еднобайтови числа с плаваща запетая Числото с единична точност IEEE 754 има толкова много битове, че е по-лесно да се обясни как работи сборът на числата с плаваща запетая, като се използва примерът за най-малкото представяне на число с плаваща запетая.

Добавянето е лесно! Да предположим, че трябва да добавите две числа с плаваща запетая X и Y.

Например показателят Y е по-малък или равен на показателя X. Нека показателят Y е равен на y, а X, съответно, x

Алгоритъмът за добавяне изглежда така:

  • Представяне на числа в нормализирана форма. Така изрично представяме скритата единица.
  • За да продължим с процеса на сумиране, трябва степените на двете числа да са равни, правим това, като пренаписваме стойността на Y. Това денормализира Y, но стойността съответства на нормализираното Y.
  • Добавете разликата x-y към експонентата на Y. Преместете мантисата на Y с x-y цифри, за да компенсирате промените в експонентата.

  • Събиране на две мантиси от числа X и коригирано Y.
  • Ако сумата в предишната стъпка измества единицата за нормализиране, тогава трябва да изместите експонентата и да повторите сумирането.
  • Преобразуване в еднобайтово представяне с плаваща запетая
  • Нека съберем следните две числа:

    Нека да преминем през всички стъпки отново:

      Представяне на числа в нормализирана форма. Така изрично представяме скритата единица.

    Нормализираният X е 1,110x2 2, а Y е 1,000x2 0

    За да продължим с процеса на сумиране, трябва степените на двете числа да са равни, правим това, като пренаписваме стойността на Y. Това денормализира Y, но стойността съответства на нормализираното Y.

    Добавете разликата x-y към експонентата на Y. Преместете мантисата на Y с x-y цифри, за да компенсирате промените в експонентата.

    Разликата в степента е 2. И така, нека добавим 2 към експонентата Y и изместим скритата единица наляво с 2. Така получаваме 0,0100x2 2 . Това е еквивалентно на старата Y стойност. Нека го наречем коригираната стойност на Y'

    Събиране на две мантиси от числа X и коригирано Y.

    Нека добавим 1,110 към 0,01. Сума: 10.0. Показателят все още е равен на степента на числото X, което от своя страна е равно на две.

    Ако сумата в предишната стъпка измества единицата за нормализиране, тогава трябва да изместите експонентата и да повторите сумирането.

    В нашия случай сумата от 10,0 има два бита вляво от точката. За да нормализираме числото, трябва да преместим точката наляво с 1 цифра и да увеличим експонентата с 1. Крайният резултат: 1000 x 2 3 .

    Преобразуване в еднобайтово представяне с плаваща запетая

    Нека съберем следните две числа:

    Нека да преминем през всички стъпки отново:

      Представяне на числа в нормализирана форма. Така изрично представяме скритата единица.

    Нормализираният X е 1,110x2 2, а Y е 1,000x2 -1

    За да продължим с процеса на сумиране, трябва степените на двете числа да са равни, правим това, като пренаписваме стойността на Y. Това денормализира Y, но стойността съответства на нормализираното Y.

    Добавете разликата x-y към експонентата на Y. Преместете мантисата на Y с x-y цифри, за да компенсирате промените в експонентата.

    Разликата в степента е 3. И така, добавете 3 към експонентата Y и преместете скритата единица наляво с 3. Така получаваме 0,0100x2 3 . Това е еквивалентно на старата Y стойност. Нека го наречем коригирано.Y' стойност

    Събиране на две мантиси от числа X и коригирано Y.

    Нека добавим 1,110 към 0,00111. Сума: 1.11111. Показателят все още е равен на степента на числото X, което от своя страна е равно на две.

    Ако сумата в предишната стъпка измества единицата за нормализиране, тогава трябва да изместите експонентата и да повторите сумирането.

    В нашия случай сумата 1.11111 има един бит вляво от точката. Така номерът вече е представен в нормализиран вид и не е необходимо да извършваме допълнителни действия. Краен резултат: 1.111111x2 3 .

    Преобразуване в еднобайтово представяне с плаваща запетая

    Имаме само 3 бита, за да представим мантисата, но имаме 5 бита в отговора. Очевидно това е подобно на необходимостта от хардуерно закръгляване на число с плаваща запетая.

    Но за простота ще отрежем допълнителните два бита. След съкращаване получаваме 1,111x2 +2. Нека го поставим във формат с плаваща запетая.