Как представляются действительные числа в памяти эвм
Перейти к содержимому

Как представляются действительные числа в памяти эвм

  • автор:

9.Представление целых и вещественных чисел в эвм. Представление вещественных чисел

Вещественные числа представляются в ПК в форме с плавающей точкой. Этот формат использует представление вещественного числа R в виде произведения мантиссы m на основание системы счисления p в некоторой целой степени n которую называют порядком: R=m*p n Представление числа в форме с плавающей точкой неоднозначно. ПРИМЕР 25.324=25324*10 1 =0.0025324*10 4 =2532.4*10 -2 В ЭВМ используют нормализованное представление числа в форме с плавывающей точкой. Мантисса в нормализованном представлении должна удовлетворять условию: 0.1p?m<1p Иначе говоря, мантисса меньше 1 и первая значащая цифра — не 0.

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

Представление целых чисел

Для представления информации в памяти ЭВМ (как числовой, так и не числовой) используется двоичный способ кодирования.

Элементарная ячейка памяти ЭВМ имеет длину 8 бит (байт). Каждый байт имеет свой номер (его называют адресом). Наибольшую последовательность бит, которую ЭВМ может обрабатывать как единое целое, называют машинным словом. Длина машинного слова зависит от разрядности процессора и может быть равной 16, 32, 64 битам и т.д.

Кодирование символов

Для кодирования символов достаточно одного байта. При этом можно представить 256 символов (с десятичными кодами от 0 до 255). Набор символов персональных ЭВМ, совместимых с IBM PC, чаще всего является расширением кода ASCII (American Standard Code for Information Interchange — стандартный американский код для обмена информацией). В настоящее время используются и двухбайтовые предсталения символов.

Двоично-десятичное кодирование

В некоторых случаях при представлении чисел в памяти ЭВМ используется смешанная двоично-десятичная «система счисления», где для хранения каждого десятичного знака нужен полубайт (4 бита) и десятичные цифры от 0 до 9 представляются соответствующими двоичными числами от 0000 до 1001. Например, упакованный десятичный формат, предназначенный для хранения целых чисел с 18-ю значащими цифрами и занимающий в памяти 10 байт (старший из которых знаковый), использует именно этот вариант.

10.Алфавит Турбо Паскаля. Идентификаторы. Стандартные идентификаторы Турбо Паска­ля. Служебные слова. Алфавит

основной символ>::= < буква >|< цифра >|< спецсимвол >

В качестве букв используются прописные латинские буквы от A до Z, цифрами являются обычные десятичные (арабские) цифры.

<спецсимвол>::=<знак арифметической оперерации> | <знак опе­рации сравнения> | <разделитель> | <служебное слово>

< служебное слово >::= and ! array ! program ! if ! begin ! end ! for ! then ! else ! goto ! и др., с которыми мы познакомимся в дальнейшем.

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

I группа – основные операторы – это те операторы, которые в своем составе не содержат других операторов. К основным операторам относятся: оператор присваивания, оператор процедуры, оператор перехода и пустой оператор.

II группа – производные операторы. К производным операто­рам относятся: составной оператор, выбирающий оператор, оператор цикла и оператор присоединения.

В записи алгоритма могут использоваться последовательности из операторов этих типов без ограничений на их количество. Каждый опе­ратор отделяется друг от друга разделителем ; . Таким образом, произво­дится четкое разбиение всей записи на отдельные операторы. Операторы этой последовательности обычно выполняются в порядке их следования в тексте программы слева направо по строке и сверху вниз по строкам. Преемником каждого оператора обычно является следующий по порядку в тексте программы оператор. Этот естественный порядок выполнения операторов может быть нарушен с помощью операторов перехода, кото­рые сами определяют своих преемников.

Представление числовой информации в памяти компьютера Текст научной статьи по специальности «Математика»

В работе рассматриваются способы машинного представления числа, а также вопросы реализации двоичной арифметики в памяти ЭВМ. На основании теорем устанавливается взаимосвязь между системами счисления с основаниями 2 n. Приводятся примеры внутреннего представления целого числа в формате с фиксированной точкой и вещественного числа в формате с плавающей точкой

Похожие темы научных работ по математике , автор научной работы — Итпекова Галина Семёновна

Presentation of Numerical Information in the Computer Memory

The article discusses ways of machine number presentation and questions of realization of the binary arithmetic in the computer memory. On the basis of the theorems, the author establishes a close relationship between the number systems with bases 2 n. We consider examples of the internal presentation of a number in the format of a fixed-point and floating-point number in floating point format

Текст научной работы на тему «Представление числовой информации в памяти компьютера»

ПРЕДСТАВЛЕНИЕ ЧИСЛОВОЙ ИНФОРМАЦИИ В ПАМЯТИ КОМПЬЮТЕРА

Хакасский государственный университет им. Н. Ф. Катанова

В работе рассматриваются способы машинного представления числа, а также вопросы реализации двоичной арифметики в памяти ЭВМ. На основании теорем устанавливается взаимосвязь между системами счисления с основаниями Т. Приводятся примеры внутреннего представления целого числа в формате с фиксированной точкой и вещественного числа в формате с плавающей точкой.

Ключевые слова: система счисления, нормализованная форма записи числа, дополнительный код, формат с фиксированной точкой, формат с плавающей точкой.

Известно, что компьютер осуществляет обработку числовой, символьной, графической и звуковой информации, представленной в двоичном коде. Разделы информатики, посвящённые компьютерным технологиям обработки информации, включают темы представления соответствующих видов данных (чисел, символов, изображения, звука). Для того чтобы хранить информацию в памяти ЭВМ, принимают некоторые соглашения о способах представления и организации данных. В учебной литературе существуют различные подходы к изложению вопросов, связанных с пониманием принципов кодирования любой информации [1; 2; 3 и др.].

Объектом данной статьи является кодирование информации, а предметом — способы машинного представления числа. Выбор темы обусловлен тем, что решение вычислительных задач с использованием компьютера сводится к преобразованию числовой информации, и при этом возникают вопросы, касающиеся представления чисел и реализации двоичной арифметики в ЭВМ. Так как в памяти компьютера хранятся целые и вещественные числа и при этом числовые данные представляются определёнными форматами, то понимание вопросов кодирования числовой информации требует знаний о системах счисления и основах арифметики нормализованных чисел.

Когда речь идёт о процессе формирования представления числовой информации в памяти компьютера, то имеют в виду, что она представлена в двоичной системе счисления. Под системой счисления принято понимать совокупность приёмов обозначения (записи) чисел [2]. Наиболее совершенными являются позиционные системы счисления. В них значение каждой цифры в записи числа зависит от её положения (позиции) в ряду других чисел, изображающих число. Минимальной системой, в которой реализуется принцип позиционности в цифровой форме записи числа, является двоичная система счисления, основание которой q = 2.

Как известно, двоичная система является системой, пригодной для аппаратной реализации. Более глубокое изучение данной системы в прикладной математике началось с 30-х гг. XX века. Это было обусловлено, с одной стороны, потребностью создания надёжных и простых по конструкции счётных механических устройств, а с другой — простотой двоичной арифметики. В 1946 году А. Беркс, Х. Гольдстайн и Дж. фон Нейман опубликовали работу о проекте первой ЭВМ с хранимой в памяти программой [2]. Эта работа утвердила двоичную арифметику в качестве общепринятой основы при конструировании ЭВМ с программным управлением.

Общеизвестно, что естественным обобщением двоичной системы являются системы с основаниями q = 8 и q = 16. Эти системы счисления широко распространены, и между ними существует взаимосвязь, которая определяется двумя теоремами [2].

Теорема 1. Для записи целого двоичного числа в системе счисления с основанием q = 2" достаточно данное двоичное число разбить на грани справа налево (т. е. от младших разрядов к старшим) по " цифр в каждой грани. Затем каждую такую грань следует рассмотреть как " — разрядное двоичное число и записать его как цифру в системе с основанием q = 2П .

Доказательство. Пусть дано (abcdef ) . Выполняя преобразования, получим

(abcdef) q = a ■ q5 + b ■ q4 + c ■ q3 + d ■ q2 + eq + f = = (aq2 + bq + c)q

= A ■ q3 + B = Ap + B = ABp ; Ap = aq2 + bq + c = abcq;

BP = dq2 + eq + f = defq.

Таким образом, трёхразрядные числа системы счисления с основанием q записаны как цифры системы с основанием p.

Пример 1. Число 111011101002 заменить равным ему числом восьмеричной системы счисления, т. е. системы с основанием q = 23.

В соответствии с теоремой 1 разбиваем число от младших разрядов к старшим по три цифры в каждой грани:

011 101 110 100 3 5 6 4

Внизу под каждой из граней выписаны цифры, соответствующие трёхразрядным двоичным числам:

112 = 38, 1012 = 58, 1102 = 68, 1002 = 48.

Итак, 111011101002 = 35648.

Теорема 2. Для замены целого числа, записанного в системе с основанием p = 2П, равным ему числом в двоичной системе счисления, достаточно каждую цифру данного числа заменить и-разрядным двоичным числом.

Доказательство. Пусть дано ABC , где p = q3.

= (aq2 + bq + c)(q3) + (dq2 + eq + f )q3 + (kq2 + Iq + m)= = aq8 + bq1 + cq6 + dq5 + eq 4 + fq3 + kq2 +1 q + m = = abcde fklmnq .

Пример 2. Число 27538 заменить равным ему двоичным числом.

В соответствии с теоремой 2 каждую цифру данного числа представим трёхразрядным двоичным числом:

010 111 101 011

Получим равенство 27538 = 0101111010112.

Алгоритмы замены целых чисел и правильных дробей какой-либо системы счисления с основанием q равными числами другой системы с основанием p приводит В. Н. Касаткин [2]. Кроме того, автор знакомит со смешанными системами счисления.

В результате анализа учебной и учебно-методической литературы выявлено, что при изложении информации о представлении чисел в памяти ЭВМ используются разные приёмы. В учебнике И. Г. Семакина [1] содержание учебной информации о представлении чисел связано со структурой памяти компьютера. Описание методики представления информации в двоичной форме дано в учебном пособии под редакцией А. И. Семенова [3]. Тема «Кодирование числовой информации» представлена через обсуждение естественной и экспоненциальной форм записи числа и формата с фиксированной и плавающей точкой в пособии О. Л. Соколовой [4]. Вопросы реализации арифметики в ЭВМ уточняются В. Н. Касаткиным через понятия нормализации чисел. Далее речь пойдет о нормализованных числах, так как запись чисел в нормализованной форме используется при представлении в памяти ЭВМ вещественных чисел. Именно в случае понимания, что такое «мантисса» и «порядок» нормализованного числа, происходит овладение подлинной культурой точных вычислений с использованием компьютера.

Определение. Число А называется нормализованным, если оно представлено в виде

где M10 — мантисса, которая представляет собой десятичную правильную дробь, равную или больше 0,1 (т. е. 0,1 < M10 < 1); p10 — порядок, он является целым десятичным числом.

Приведём примеры нормализованного представления чисел:

29710 = 0,297-103 (М10 = 0,297; p 10 = 3),

0,03110 = 0,31-10-1 (м 10 = 0,31; p 10 =-1),

-34,17610 =-0,34176-102 (М10 =-0,34176; p 10 = 2).

При нормализации числа его запись имеет следующие составляющие: знак числа — знак порядка; модуль мантиссы — модуль порядка. В нормализованной форме могут быть представлены натуральные, целые, рациональные и иррациональные числа. Нормализованные числа образуют множество чисел, в которых действует своя арифметика.

Арифметика нормализованных чисел тесно связана с её реализацией в вычислительных устройствах. Эта связь состоит в том, что в любом вычислительном устройстве, использующем арифметику нормализованных чисел, в памяти для хранения результатов в сумматоре отводится установленное число разрядов как для порядка (p10), так и для мантиссы (М10). Кроме того, определяется способ хранения знаков мантиссы и порядка. Нормализация чисел позволяет создать единую арифметику. Для вычислительных устройств нет проблемы распознавания типа числа, так как арифметическое устройство работает только с мантиссами и порядками.

Перейдём к рассмотрению вопроса о внутреннем (машинном) представлении числа на примере 16-разрядной машины. Числа в памяти ЭВМ хранятся в двух форматах: в формате с фиксированной точкой и в формате с плавающей точкой. Под точкой подразумевается знак разделения целой и дробной части числа. Формат с фиксированной точкой используется для хранения в памяти целых чисел. В случае 16-разрядной машины число занимает одно машинное слово памяти (16 бит) и для хранения чисел отводится 16 разрядов, которые в совокупности представляют двухбайтовую разрядную сетку.

Для целых чисел существуют два представления: беззнаковое (только для неотрицательных целых чисел) и со знаком. Очевидно, что отрицательные числа можно представлять только в знаковом виде. Для беззнакового

представления числа все разряды ячейки отводятся под него. Например, в байте (8 бит) можно представить беззнаковые числа от 0 до 28 — 1 = 255. В двухбайтовой разрядной сетке можно сохранить диапазон чисел от 0 до 216 — 1 = 65535. Поэтому, если известно, что числовая величина является неотрицательной, то выгоднее рассматривать её как беззнаковую.

Для представления целых чисел со знаком самый старший (левый) бит отводится под знак числа, остальные разряды — под само число. Знак положительного числа кодируется нулём, а знак отрицательного числа кодируется единицей. Код знака числа хранит первый слева двоичный разряд. Например, в байте можно представить знаковые целые числа от -27 = -128 до 27 — 1 = 127, в двухбайтовой разрядной сетке диапазон целых чисел со знаком будет составлять от -215 = -32768 до 215 — 1 = 32767. Покажем на примерах, как получить внутреннее представление целого числа N в формате с фиксированной точкой и вещественного числа в формате с плавающей точкой.

Пример 3. Представить число N = 160710 в двухбайтовой разрядной сетке.

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

N = 160710 = 110010001112.

2. Изобразим шестнадцатиразрядную сетку размером в 2 байта = 16 бит (рис. 1).

Рис. 1. Шастнадцатиразрядная сетка 3. Впишем число 110010001112, начиная с младшего разряда (рис. 2).

Рис. 2. Запись числа в сетку 4. Заполним оставшиеся разряды нулями (рис. 3).

Рис. 3. Заполнение оставшихся разрядов нулями На рисунке 3 изображено внутреннее представление числа N = 160710 в двухбайтовой разрядной сетке.

Пример 4. Представить отрицательное число N = -160710 в двухбайтовой разрядной сетке.

1. Переведём модуль числа -160710 в двоичную систему счисления. 160710 = 110010001112.

2. Изобразим шестнадцатиразрядную сетку (рис. 1).

3. Следуя пунктам 3-4 из примера 3, получим внутреннее представление модуля числа. 0000 0110 0100 0111 — прямой код числа.

4. Найдём обратный код числа, заменив в прямом коде нули на единицы, а единицы на нули: 1111 1001 1011 1000 — обратный код.

5. Найдём дополнительный код числа, прибавив к обратному коду единицу:

1111 1001 1011 1000 1

1111 1001 1011 1001 — дополнительный код

6. Впишем дополнительный код в разрядную сетку (рис. 4).

Рис. 4. Представление целого отрицательного числа 28

Внутреннее представление отрицательного числа N = -160710 в двухбайтовой разрядной сетке изображено на рисунке 4. Описанный в примере 4 способ представления целого отрицательного числа называют дополнительным кодом. Старший разряд в представлении любого отрицательного числа равен 1. Его принято называть знаковым разрядом, так как он указывает на знак числа.

Возникает вопрос, с какой целью отрицательные числа записываются в виде дополнительного кода и как получить дополнительный код отрицательного числа? Дополнительный код используется для упрощения выполнения арифметических операций. Если бы вычислительная машина работала с прямыми кодами положительных и отрицательных чисел, то при выполнении арифметических операций следовало бы выполнять ряд дополнительных действий. Например, при сложении нужно было бы проверять знаки обоих операндов и определять знак результата. Если знаки одинаковые, то вычисляется сумма операндов и ей присваивается тот же знак. Если знаки разные, то из большего по абсолютной величине числа вычитается меньшее и результату присваивается знак большего числа. То есть при таком представлении чисел (в виде только прямого кода) операция сложения реализуется через достаточно сложный алгоритм. Если же отрицательные числа представлять в виде дополнительного кода, то операция сложения, в том числе и разного знака, сводится к их поразрядному сложению. Алгоритм получения дополнительного кода положительного и отрицательного числа описан в практикуме по информатике [5].

Таким образом, применение дополнительного кода для внутреннего представления отрицательных чисел даёт возможность заменить операцию вычитания операцией сложения с отрицательным числом: N — М = N + (-М). Очевидно, должно выполняться следующее равенство: N + (- Ы) = 0. Выполним такое сложение для полученных выше чисел 1607 и -1607.

_ 0000 0110 0100 0111 _ 1607

1111 1001 1011 1000 1607

1 0000 0000 0000 0000 0

Единица в старшем разряде, получаемая при сложении, выходит за границу разрядной сетки машинного слова и исчезает, а в памяти остаётся ноль.

Перейдём к кодированию вещественных чисел. Недостатком представления чисел в формате с фиксированной запятой является конечный диапазон представления величин, недостаточный для решения математических, физических, экономических и других задач, в которых используются как очень малые, так и очень большие числа. Поэтому для представления вещественных чисел используют другой формат — формат с плавающей точкой (запятой). Число обычной точности в данном формате занимает в памяти компьютера четыре байта, а в случае представления числа двойной точности — восемь байт.

Кодирование вещественных чисел опирается на их нормализованную (экспоненциальную) запись. Как и для целых чисел, при представлении действительных чисел в памяти компьютера используется двоичная система счисления, следовательно, предварительно десятичное число должно быть переведено в двоичную систему.

При представлении чисел с плавающей запятой часть разрядов ячейки отводится для записи порядка числа, остальные разряды — для записи мантиссы. По одному разряду в каждой группе отводится для изображения знака порядка и знака мантиссы. Для того чтобы не хранить знак порядка, был придуман так называемый смещённый порядок (СП) [5]. Он рассчитывается по формуле СП = р + 272, где а — количество разрядов, отводимых под порядок.

Запишем алгоритм представления числа с плавающей точкой (запятой):

1) перевести число из системы счисления с основанием р в двоичную;

2) представить двоичное число в нормализованной экспоненциальной форме;

3) рассчитать смещённый порядок числа;

4) поместить знак, порядок и мантиссу в 32-разрядную сетку.

Пример 5. Представить число 25,324 в формате с плавающей точкой.

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

0,32410=0,0101001011100011012. 25, 32410= 11001,0101001011100011012

2. Запишем представленное в двоичной системе счисления число в форме нормализованного двоичного числа с плавающей точкой:

11001,0101001011100011012 = 0,110010101001011100011012 ■ 10101

3. Вычислим смещённый порядок:

СП = 1012 + 10000002= 1000101

4. Запишем представление числа в ячейке памяти (рис. 5).

0 1|о|о|о|1|о|1 1 | 1 | 0| 0| 1 I 0 I 1 I 0 I 1 I 0 I 0| 1 I 0 I 1 I 1 I 1 I 1 I 0 I 0 I 0| 1 I 1 I 0 I 1 1

Смещенный порядок Мантисса |

| Знак числа '['Знак мантиссы

Рис. 5. Представление числа в ячейке памяти 29

Можно заметить, что представление действительного числа не очень удобно изображать в двоичной системе, поэтому с практической точки зрения используют взаимное преобразование двоичных, восьмеричных и шестнадцатеричных чисел [6]. Искомый результат в шестнадцатеричной форме будет иметь вид 45CA978D.

Для того чтобы получить внутреннее представление отрицательного числа -25,324, достаточно в полученном выше коде заменить в знаке разряда число 0 на 1 (рис. 6), шестнадцатеричная форма будет иметь вид: C5CA978D.

Рис. 6. Представление числа -25,324 в ячейке памяти

Рассмотрим вопрос о диапазоне вещественных чисел. Максимальное число, представленное в формате с плавающей точкой, — это число с самой большой мантиссой и самым большим порядком:

Если перевести в десятичную систему, то получится

R max =(1 — 2 -24 )x 2 64 «10 19 .

Множество вещественных чисел, представляемых в памяти ЭВМ в формате с плавающей точкой, является ограниченным и дискретным. Каждое следующее значение получается прибавлением к мантиссе предыдущего единицы в последнем разряде. В учебнике [1] указывается формула, которая позволяет вычислить количество вещественных чисел, точно представимых в памяти машины:

В приведённой формуле t — количество двоичных разрядов мантиссы; U — максимальное значение математического порядка; L — минимальное значение порядка. Все числа, не попадающие во множество вещественных чисел, точно представимых в памяти машины, представляются в ней приближённо. При этом мантисса обрезается на последнем разряде. Результаты вычислений с такими числами будут содержать погрешность. Отсюда следует вывод: вычисления с вещественными числами в компьютере выполняются приблизительно.

1. Семакин, И. Г. Информатика. Базовый курс для 7-9 классов / И. Г. Семакин, Л. А. Залогова, С. В. Русаков, Л. В. Шестакова. — М.: Лаборатория Базовых Знаний, 2000. — С. 316-321.

2. Касаткин, В. Н. Информация, алгоритмы, ЭВМ: пособие для учителя / В. Н. Касаткин. — М.: Просвещение, 1991. — С. 52-53.

3. Семёнов, А. И. Информатика: Практикум / под ред. А. И. Семёнова / А. И. Семёнов. — Абакан: Изд-во ХГУ им. Н. Ф. Катанова, 2003. -С. 9-12.

4. Соколова, О. Л. Универсальные поурочные разработки по информатике: 10 класс / О. Л. Соколова. — М.: ВАКО, 2007. — С. 226-232.

5. Могилёв, А. В. Практикум по информатике: учеб. пособие для студ. высш. учеб. заведений / А. В. Могилёв, Н. И. Пак, Е. К. Хеннер; под ред. Е. К. Хеннера. — 5-е изд., стер. — М.: Издательский центр «Академия», 2009. — С. 33-36.

6. Могилёв, А. В. Информатика: учеб. пособие для студ. пед. вузов / А. В. Могилёв, Н. И. Пак, Е. К. Хеннер; под ред. Е. К. Хеннера. -7-е изд., стер. — М.: Издательский центр «Академия», 2009. — С. 28-33.

© Итпекова Г. С., 2013

ГИБРИДИЗАЦИЯ КАК ОДИН ИЗ ВЕДУЩИХ ТВОРЧЕСКИХ МЕТОДОВ СОЗДАНИЯ ДИЗАЙНЕРСКОЙ ИНФОГРАФИКИ

Научный руководитель — А. Н. Лаврентьев, доктор искусствоведения, профессор кафедры коммуникативного дизайна

МГХПА им. С. Г. Строганова Московская государственная художественно-промышленная академия (МГХПА) им. С. Г. Строганова

Учитывая богатый визуальный ряд электронных и печатных СМИ, автор выделяет такой творческий метод создания информационной графики, как гибридизация, и теоретически обосновывает её сущность, описывая три вида гибридизации: внутривидовую, межвидовую и комплексную.

Ключевые слова: инфографика, гибридная инфографика, гибридизация инфографики, виды гибридизации, внутривидовая гибридизация, межвидовая гибридизация, комплексная гибридизация.

Анализ фактов исторической и современной информационной графики позволяет утверждать, что основной тенденцией её развития является гибридизация (термин применяется нами в качестве рабочего), т. е. наложение одного типа/вида инфографики на другой и/или их сочетание в разных вариантах. Это обусловлено необходимостью повышать эффективность инфографики, которая должна передавать больший объём информации на единице площади.

Для инфографа (иначе — дизайнера инфографики) гибридизация является одним из важнейших творческих инструментов дизайна, не случайно мы считаем её одним из ведущих способов разработки дизайнерских ин-

Представление вещественных чисел

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

Число с плавающей запятой состоит из набора отдельных двоичных разрядов, условно разделенных на так называемые знак (англ. sign), порядок (англ. exponent) и мантиссу (англ. mantis). В наиболее распространённом формате (стандарт IEEE 754) число с плавающей запятой представляется в виде набора битов, часть из которых кодирует собой мантиссу числа, другая часть — показатель степени, и ещё один бит используется для указания знака числа ( [math]0[/math] — если число положительное, [math]1[/math] — если число отрицательное). При этом порядок записывается как целое число в коде со сдвигом, а мантисса — в нормализованном виде, своей дробной частью в двоичной системе счисления. Вот пример такого числа из [math]16[/math] двоичных разрядов:

Знак
Порядок Мантисса
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
14 10 9 0

Знак — один бит, указывающий знак всего числа с плавающей точкой. Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:

[math](-1)^S \times M \times B^E[/math] , где [math]S[/math] — знак, [math]B[/math] — основание, [math]E[/math] — порядок, а [math]M[/math] — мантисса. Десятичное число, записываемое как [math] ReE[/math] , где [math]R[/math] — число в полуинтервале [math][1; 10)[/math] , [math]E[/math] — степень, в которой стоит множитель [math]10[/math] ; в нормализированной форме модуль [math]R[/math] будет являться мантиссой, а [math]E[/math] — порядком, а [math]S[/math] будет равно [math]1[/math] тогда и только тогда, когда [math]R[/math] принимает отрицательное значение. Например, в числе [math]-2435e9[/math]

  • [math]S[/math] [math]=[/math] [math]1[/math]
  • [math]B[/math] [math]=[/math] [math]10[/math]
  • [math]M[/math] [math]=[/math] [math]2435[/math]
  • [math]E[/math] [math]=[/math] [math]9[/math]

Порядок также иногда называют экспонентой или просто показателем степени.

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

Более простым вариантом представления вещественных чисел является вариант с фиксированной точкой, когда целая и вещественная части хранятся отдельно. Например, на целую часть отводится всегда [math]X[/math] бит и на дробную отводится всегда [math]Y[/math] бит. Такой способ в архитектурах процессоров не присутствует. Отдаётся предпочтение числам с плавающей запятой, как компромиссу между диапазоном допустимых значений и точностью.

Содержание

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

Нормальной формой (англ. normal form) числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале [math][0; 1)[/math] . Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, [math]0<,>0001[/math] можно записать в 4 формах — [math]0<,>0001 \times 10[/math] [math]0[/math] , [math]0<,>001 \times 10[/math] [math]−1[/math] , [math]0<,>01 \times 10[/math] [math]−2[/math] , [math]0<,>1 \times 10[/math] [math]−3[/math] ), поэтому распространена также другая форма записи — нормализованная (англ. normalized), в которой мантисса десятичного числа принимает значения от [math]1[/math] (включительно) до [math]10[/math] (не включительно), а мантисса двоичного числа принимает значения от [math]1[/math] (включительно) до [math]2[/math] (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме [math]0[/math] ) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа [math]0[/math] (а заодно и некоторых других полезных чисел, таких как [math]-\infty[/math] и [math]+\infty[/math] ). Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен « [math]1[/math] », то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем [math]2[/math] (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).

Типы чисел с плавающей точкой (по IEEE 754)

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

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

Знак
Порядок Мантисса
0 0 0 0 0 0 1, 0 0 0 0 0 0 0 0 0 0
14 10 9 0

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

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

  • Целые от нуля до [math]2048[/math] передаются как есть.
  • Целые от [math]2049[/math] до [math]4096[/math] округляются к ближайшему чётному целому.
  • Целые от [math]4097[/math] до [math]8192[/math] округляются до ближайшего целого, делящегося нацело на четыре.
  • Целые от [math]8193[/math] до [math]16384[/math] округляются до ближайшего целого, делящегося на восемь.
  • Целые от [math]16385[/math] до [math]32768[/math] округляются до ближайшего целого, делящегося на шестнадцать.
  • Целые от [math]32769[/math] до [math]65535[/math] округляются до ближайшего целого, делящегося на тридцать два.

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

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

Знак
Порядок (8 бит) Мантисса (23+1 бита)
0 0 0 0 0 0 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
30 23 22 0

Порядок записан со сдвигом [math]-127[/math] .

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

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

Знак
Порядок
(11 бит)
Мантисса
(52+1 бит)
0 0 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
62 52 51 0

Порядок записан со сдвигом [math]-1023[/math] .

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

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

Знак
Порядок
(15 бит)
Мантисса
(112+1 бит)
0 0 0 0 0 0 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 0 0 0 0
126 112 111
Мантисса
(112+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 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

Порядок записан со сдвигом [math]-16383[/math] .

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

Диапазон значений чисел с плавающей запятой

Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, «не число», получается как результат операций типа деления нуля на ноль) и [math]\pm\infty[/math] .

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

Название в IEEE 754 Название типа переменной в Си Диапазон значений Бит в мантиссе Бит на переменную
Half precision 6,10×10 -5 ..65504 11 16
Single presicion float -3,4×10 38 ..3,4×10 38 23 32
Double precision double -1,7×10 308 ..1,7×10 308 53 64
Extended precision На некоторых архитектурах (например в сопроцессоре Intel) long double -3,4×10 4932 ..3,4×10 4932 65 80

Особые значения чисел с плавающей точкой

Ноль (со знаком)

Как уже было оговорено выше, в нормализованной форме числа с плавающей точкой невозможно представить ноль. Поэтому для его представления зарезервированы специальные значения мантиссы и порядка — число считается нулём, если все его биты, кроме знакового, равны нулю. При этом в зависимости от значения бита знака ноль может быть как положительным, так и отрицательным.

Знак
Порядок Мантисса
0 /1 0 0 0 0 0 1, 0 0 0 0 0 0 0 0 0 0  =  [math]\pm0[/math]
14 10 9 0

Арифметика нуля со знаком
Арифметика отрицательного нуля аналогична таковой для любого отрицательного числа и понятна интуитивно. Вот несколько примеров:

  • [math]\frac<-0>< \left| x \right| >= -0\,\![/math] (если [math]x\ne0[/math] )
  • [math](-0) \cdot (-0) = +0\,\![/math]
  • [math]\left| x \right| \cdot (-0) = -0\,\![/math]
  • [math]x + (\pm 0) = x\,\![/math]
  • [math](-0) + (-0) = -0\,\![/math]
  • [math](+0) + (+0) = +0\,\![/math]
  • [math]\frac<-0><-\infty>= +0\,\![/math]
  • [math]\frac<\left|x\right|><-0>= -\infty\,\![/math] (если [math]x\ne0[/math] )

Неопределенность (NaN)

NaN — это аббревиатура от фразы «not a number«. NaN является результатом арифметических операций, если во время их выполнения произошла ошибка (примеры см. ниже). В IEEE 754 NaN представлен как число, в котором все двоичные разряды порядка — единицы, а мантисса не нулевая.

Знак
Порядок Мантисса
0 /1 1 1 1 1 1 1, 0 /1 0 /1 0 /1 0 /1 0 /1 0 /1 0 /1 0 /1 0 /1 0 /1  =  [math]NaN[/math]
14 10 9 0

Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать. Стандартом это не оговорено и мантисса чаще всего игнорируется.

Как можно получить NaN?

  • [math]\infty+(-\infty)= NaN[/math]
  • [math]0\times\infty= NaN[/math]
  • [math]\frac<\pm0><\pm0>= NaN[/math]
  • [math]\frac<\pm\infty><\pm\infty>= NaN[/math]
  • [math]\sqrt = NaN[/math] , где [math]x\lt 0[/math]

Есть и другие способы получения NaN, подробности можно найти по ссылкам в соответствующем разделе.

По определению NaN ≠ NaN, поэтому, для проверки значения переменной нужно просто сравнить ее с собой.

Бесконечности

В число с плавающей запятой можно записать значение [math]+\infty[/math] или [math]-\infty[/math] . Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка — единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.

Знак
Порядок Мантисса
0 /1 1 1 1 1 1 1, 0 0 0 0 0 0 0 0 0 0  =  [math]\pm\infty[/math]
14 10 9 0

Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. При этом [math] \frac <0>[/math] [math]= \begin +\infty,&\text<если $x\gt 0$;>\\ NaN,&\text<если $x=0$;>\\ -\infty,&\text <если $x\lt 0$.>\end [/math]

Денормализованные числа

Денормализованные числа (англ. denormalized/subnormal numbers) — это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького нормализованного («обычного») значения числа с плавающей запятой. Согласно стандарту, если порядок равен своему минимальному значению (все его биты — нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это [math]\pm0[/math] . Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего — нули) и данной мантиссой, целая часть которой считается равной нулю, а не единице.

То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:

  • [math](-1)^s\times1,M\times2^E[/math] , если [math]E_ \le E \le E_[/math] (нормализованное число)
  • [math](-1)^s\times0,M\times2^>[/math] , если [math]E=E_-1[/math] (денормализованное число)

Где [math]s[/math] — бит знака, [math]M[/math] — последовательность битов мантиссы, [math]E[/math] — значение порядка (с учетом сдвига), [math]E_[/math] — минимальное значение порядка, используемое для записи чисел (1 — сдвиг) , [math]E_-1[/math] — минимальное значение порядка, которое он в принципе может принять (все биты нули, 0 — сдвиг).

Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне — вместо этого используются программные реализации, работающие значительно медленнее.

В современных процессорах обработка денормализованных чисел происходит в десятки раз медленнее, чем обработка нормализованных чисел. Ниже приведена часть таблицы из статьи Isaac Dooley, Laxmikant Kale «Quantifying the Interference Caused by Subnormal Floating-Point Values» [1]

Производитель Процессор Замедление (разы)
IBM PowerPC 970 2,4
AMD Athlon 6,0
Intel Pentium 3 15,8
AMD Athlon 64 21,4
AMD Opteron64 23,8
Intel Core Duo 44,2
Intel P4 Xeon 97,9
Intel Pentium 4 131,0
Intel Itanium 2 183,2
Sun UltraSPARC IV 520,0

В таблице приведены наихудшие результаты тестирования среди всех использованных компиляторов (gcc, icc, xlc) со всеми доступными флагами оптимизации. Исследователи утверждают, что различие среднего случая с худшим незначительно.

Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно очень маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние Flush-to-zero (FTZ) и Denormals-are-zero (DAZ). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули.
Ярким примером подобного «отсечения» денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.

В версии стандарта IEEE 754-2008 денормализованные числа (denormal или denormalized numbers) были переименованы в subnormal numbers, то есть в числа, меньшие «нормальных». Поэтому их иногда еще называют «субнормальными«.

Действия с числами с плавающей запятой

Умножение и деление

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

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

Сложение и вычитание

Идея метода сложения и вычитания чисел с плавающей точкой заключается в приведении их к одному порядку. Сначала выбирается оптимальный порядок, затем мантиссы обоих чисел представляются в соответствии с новым порядком, затем над ними производится сложение/вычитание, мантисса результата округляется и, если нужно, результат приводится к нормализированной форме. Пример:

Алгоритм получения представления вещественного числа в памяти ЭВМ

Покажем преобразование действительного числа для представления его в памяти ЭВМ на примере величины типа Double.

Как видно из таблицы, величина этого типа занимает в памяти [math]8[/math] байт. На рисунке ниже показано, как здесь представлены поля мантиссы и порядка (нумерация битов осуществляется справа налево):

Знак Смещённый порядок Мантисса
63 62..52 51..0

Можно заметить, что старший бит, отведенный под мантиссу, имеет номер [math]51[/math] , т.е. мантисса занимает младшие [math]52[/math] бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна [math]1[/math] , здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка хранится здесь не как целое число, представленное в дополнительном коде. Для упрощения вычислений и сравнения действительных чисел значение порядка в ЭВМ хранится в виде смещенного числа, т.е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает [math]11[/math] бит и имеет диапазон от [math]2[/math] [math]-1023[/math] до [math]2[/math] [math]1023[/math] , поэтому смещение равно [math]1023[/math] ( [math]10[/math] ) [math]=[/math] [math]1111111111[/math] ( [math]2[/math] ). Наконец, бит с номером [math]63[/math] указывает на знак числа.

Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ:

  1. перевести модуль данного числа в двоичную систему счисления;
  2. нормализовать двоичное число, т.е. записать в виде M [math] \times [/math] 2 p , где M &#151; мантисса (ее целая часть равна [math]1[/math] ( [math]2[/math] )) и p &#151; порядок, записанный в десятичной системе счисления;
  3. прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления;
  4. учитывая знак заданного числа (0 &#151; положительное; 1 &#151; отрицательное), выписать его представление в памяти ЭВМ.

Пример. Запишем код числа [math]-312[/math] , [math]3125[/math] .

  1. Двоичная запись модуля этого числа имеет вид [math]100111000<,>0101[/math] .
  2. Имеем [math]100111000<,>0101[/math] [math]=[/math] [math]1<,>001110000101[/math] [math]\times[/math] [math]2[/math] [math]8[/math] .
  3. Получаем смещенный порядок [math]8[/math] [math]+[/math] [math]1023[/math] [math]=[/math] [math]1031[/math] . Далее имеем [math]1031[/math] ( [math]10[/math] ) [math]=[/math] [math]10000000111[/math] ( [math]2[/math] ).
  4. Окончательно
    1 10000000111 0011100001010000000000000000000000000000000000000000
    63 62..52 51..0

Очевидно, что более компактно полученный код стоит записать следующим образом: C073850000000000(16).

Другой пример иллюстрирует обратный переход от кода действительного числа к самому числу.

For Informatics

Максимальное положительное и минимальное отрицательное число различаются только знаком, значит мантисса и порядок будут одинаковы в обоих случаях, p — основание системы счисления.

Максимальный несмещённый порядок, состоящий из семи знаков:
1111111 (p=2), т. е. мантисса будет умножена на 10^1111111 при p=2 или на 2^127 при p=10
Максимальная мантисса для несмещённого порядка:
11111111111111111111111 (p=2) или 2^22+2^21+. 2^2+2^1+2^0 (p=10) т. е. 2^23–1 или 8388607.

Сами числа в двоичной системе будут выглядеть так:
Положительное: –1^0×1111111×11111111111111111111111,
Отрицательное: –1^1×1111111×11111111111111111111111,

Все верно! Илья получает "5" 🙂

4-знак,порядок,мантисса,величина типа double.
3-1)Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений;2)Нормальной формой числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале [0; 1) 3)Порядок также иногда называют экспонентой или просто показателем степени.
2-1)Как это все работает? 2)Кто и когда это изобрел?
1-Тяжела жизнь информатика!

4) Порядок мантисса, нормальная форма числа, нормализованная форма числа
3)Порядок также иногда называют экспонентой или просто показателем степени.
Лишь некоторые из вещественных чисел могут быть представлены в памяти компьютера точным значением, в то время как остальные числа представляются приближёнными значениями.
Числа с плавающей запятой — один из возможных способов представления действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений
2) Зачем это было придумано? Как вообще всё это применять?
1) Надо было делать информатику заранее.

4) Мантисса, нормализованная форма числа, порядок, знак
3) Порядок иногда называют показателем степени,
Числа с плавающей запятой — один из возможных способов представления вещественных чисел, который является компромиссом между точностью и диапазоном принимаемых значений,
Нормализованный вид числа — 0,1 < или = m < 1
2) Кто придумал эту замудренную систему? Как мы будем это использовать?
1) Когда мы будем пользоваться этим на компютере

4. Мантисса, порядок, нормализованная запись числа, знак
3. Нормальная форма записи числа с плавающим знаком- та форма, в которой Мантисса (без учета знака) в десятичной системе находится на полу интервале. Числа с плавающей запятой- один из способов представления действительного числа, но в компьютере.
2. Где это нам пригодится? И как это применять?
1. Чувствую, это придется перечитать еще на пару раз.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *