Нормальная и нормализованная форма

Нормальной формой (англ. normal form) числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале [0;1). Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, 0,0001 можно записать в 4 формах — 0,0001×100, 0,001×101, 0,01×102, 0,1×103), поэтому распространена также другая форма записи — нормализованная (англ. normalized), в которой мантисса десятичного числа принимает значения от 1 (включительно) до 10 (не включительно), а мантисса двоичного числа принимает значения от 1 (включительно) до 2 (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме 0) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа 0 (а заодно и некоторых других полезных чисел, таких как −∞ и +∞). Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен «1», то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем 2 (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).

Число половинной точности (Binary16, Half precision).

Число половинной точности -компьютерный формат представления чисел, занимающий в памяти половину машинного слова (в случае 32-битного компьютера — 16 бит или 2 байта). В силу невысокой точности этот формат представления чисел с плавающей запятой обычно используется в видеокартах, где небольшой размер и высокая скорость работы важнее точности вычислений.

Порядок записан со сдвигом −15. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле 2 b −1−1, где b — число бит, отведенное на хранение порядка (в случае числа половинной точности b =5).

Ограничения точности

· Целые от нуля до 2048

· передаются как есть.

· Целые от 2049 до 4096

· округляются к ближайшему чётному целому.

· Целые от 4097 до 8192

· округляются до ближайшего целого, делящегося нацело на четыре.

· Целые от 8193 до 16384

· округляются до ближайшего целого, делящегося на восемь.

· Целые от 16385 до 32768

· округляются до ближайшего целого, делящегося на шестнадцать.

· Целые от 32769 до 65535 округляются до ближайшего целого, делящегося на тридцать два.


 

Число одинарной точности (Binary32, Single precision, float).

- компьютерный формат представления чисел, занимающий в памяти одно машинное слово (в случае 32-битного компьютера — 32 бита или 4 байта). Используется для работы с вещественными числами везде, где не нужна очень высокая точность.

Порядок записан со сдвигом −127.

Число двойной точности (Binary64, Double precision, double).

- компьютерный формат представления чисел, занимающий в памяти два машинных слова (в случае 32-битного компьютера — 64 бита или 8 байт). Часто используется благодаря своей неплохой точности, даже несмотря на двойной расход памяти и сетевого трафика относительно чисел одинарной точности.

Число четверной точности (Binary128, Quadruple precision).

- компьютерный формат представления чисел, занимающий в памяти четыре машинных слова (в случае 32-битного компьютера — 128 бит или 16 байт). Используется в случае необходимости крайне высокой точности.

Порядок записан со сдвигом −16383.

Обычно этот формат реализуется программно, случаи аппаратной реализации крайне редки. Также не гарантируется поддержка этого типа в языках программирования, хотя кое-где она и реализована (например, компилятор gcc для архитектуры x86 позволяет использовать тип __float128, являющийся программной реализацией числа с четверной точностью). В совокупности эти факторы делают Quadruple весьма экзотичным и редко встречающимся форматом чисел с плавающей запятой.


 



Задание 1.

Переведите числа в десятичную систему, а затем проверьте результаты, выполнив обратные переводы:

1.

87 2          
86 43 2        
1 42 21 2      
  1 20 10 2    
    1 10 5 2  
      0 4 2 2
        1 2 1
          0  

 

2.

3.


 


Задание 2.

Выполните сложение и умножение.

1. 100012 и 11112

100012 + 11112 = 1000002

 

1 0 0 0 1

+    1 1 1 1

1 0 0 0 0 0

 

1000012 * 11112 =111111112

                        1   0   0   0   1

               *        1   1   1   1

                        1   0   0   0   1

               1   0   0   0   1       

     1   0   0   0   1                 

1   0   0   0   1                     

1   1   1   1   1   1   1   1

 

2. 5418 и 658

5418 = 1011000012

658 = 1101012

1011000012 + 1101012 = 1100101102 = 6268

1 0 1 1 0 0 0 0 1

+             1 1 0 1 0 1

1 1 0 0 1 0 1 1 0

1011000012 * 1101012 = 1001001000101012 = 444258

                             1 0 1 1 0 0 0 0 1

                       *             1 1 0 1 0 1

                             1 1 1 1 0 0 0 0 1

                       0 0 0 0 0 0 0 0 0   

                  1 0 1 1 0 0 0 0 1        

      0 0 0 0 0 0 0 0 0              

      1 0 1 1 0 0 0 0 1                    

1 0 1 1 0 0 0 0 1                    

1 0 0 1 0 0 1 0 0 0 1 0 1 0 1

3. 44416 и 3A316

44416 = 100010001002

3A316 = 11101000112

100010001002 + 11101000112 = 111111001112 = 7E716

1 0 0 0 1 0 0 0 1 0 0

+ 1 1 1 0 1 0 0 0 1 1

1 1 1 1 1 1 0 0 1 1 1

 

100010001002 * 11101000112 = 111110000011010011002 = F834C16

                                             1 0 0 0 1 0 0 0 1 0 0

                                        * 1 1 1 0 1 0 0 0 1 1

                                             1 0 0 0 1 0 0 0 1 0 0

                                        1 0 0 0 1 0 0 0 1 0 0   

                                  0 0 0 0 0 0 0 0 0 0 0        

                             0 0 0 0 0 0 0 0 0 0 0              

                       0 0 0 0 0 0 0 0 0 0 0                   

                 1 0 0 0 1 0 0 0 1 0 0                         

            0 0 0 0 0 0 0 0 0 0 0                               

      1 0 0 0 1 0 0 0 1 0 0                                    

1 0 0 0 1 0 0 0 1 0 0                                          

1 0 0 0 1 0 0 0 1 0 0                                          

1 1 1 1 1 0 0 0 0 0 1 1 0 1 0 0 1 1 0 0


 



Задание 3.

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

Вектор функции: 1101110111010101

Х1 Х2 Х3 Х4 Х1˄Х2 Х1˄Х2˅Х3
0 0 0 0 0 0 1 1
0 0 0 1 0 0 1 1
0 0 1 0 0 1 0 0
0 0 1 1 0 1 0 1
0 1 0 0 0 0 1 1
0 1 0 1 0 0 1 1
0 1 1 0 0 1 0 0
0 1 1 1 0 1 0 1
1 0 0 0 0 0 1 1
1 0 0 1 0 0 1 1
1 0 1 0 0 1 0 0
1 0 1 1 0 1 0 1
1 1 0 0 1 1 0 0
1 1 0 1 1 1 0 1
1 1 1 0 1 1 0 0
1 1 1 1 1 1 0 1


Задание 4.

Составьте функциональную схему многоразрядного параллельного двоичного сумматора для сложения следующих чисел.


 


Задание 6.

Получите шестнадцатеричную форму внутреннего представления числа в формате с плавающей точкой в 4-х байтовой ячейке.

87,022

1. Переводим число в двоичную систему.

87,02210 = 1010111,000001011012

Целая часть

8

7

2

 

8

6

4

3

2

1

4

2

2

1

2

 

1

2

0

1

0

2

1

1

0

5

2

0

4

2

2

1

2

1

0

Получилось: 8710 = 10101112

Дробная часть

0

.2

2

.

 

2

 

0

4

4

 

 

 

2

 

0

8

8

 

 

 

2

 

1

7

6

 

 

 

2

 

1

5

2

 

 

 

2

 

1

0

4

 

 

 

2

 

0

0

8

 

 

 

2

 

0

1

6

 

 

 

2

 

0

3

2

 

 

 

2

 

0

6

4

 

 

 

2

 

1

2

8

 

 

 

2

 

0

5

6

 

 

 

2

Получилось: 0.02200000000000610 = 0.000001011012

Сложим части 10101112 + 0.000001011012 = 1010111.000001011012

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

1010111.000001011012 = 1.010111000001011012 * 26

3. Отбрасываем целую часть, получая мантиссу

010111000001011012

4. Прибавляем к порядку 127

       6 + 127 = 13310 = 100001012

1

3

3

2

1

3

2

6

6

2

1

6

6

3

3

2

0

3

2

1

6

2

1

1

6

8

2

 

0

8

4

2

0

4

2

2

0

2

1

0

 

5. Приписываем к порядку его знак - 0 (сдвиг был влево), получая

       0100001012

6. Приписываем справа мантиссу и дополняем её нулями справа до 32 разрядов

       010000101010111000001011010000002 = 01000010 10101110 00001011 010000002

7. Переводим результат в шестнадцатеричную систему счисления, заменяя каждые 4 двоичных цифры соответствующей шестнадцатеричной

       01000010 10101110 00001011 010000002 = 111870240010 = 42AE0B4016


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: