Диапазон чисел, представимых в формате с плавающей запятой

Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. На обычной 32-битной вычислительной машине, использующей двойную точность (64 бита), мантисса составляет 1 бит знак + 52 бита, показатель — 1 бит знак + 10 бит. Таким образом получаем диапазон точности примерно от 4,94·10−324 до 1.79·10308 (от 2−52 × 2−1022 до ~1 × 21024). В стандарте IEEE 754 несколько значений данного типа зарезервировано для обеспечения возможности представления специальных значений. К ним относятся значения NaN (Not a Number, «не число») и +/-INF (Infinity, бесконечность), получающихся в результате операций деления на ноль или при превышении числового диапазона. Также сюда попадают денормализованные числа, у которых мантисса меньше единицы. В специализированных устройствах (например, GPU) поддержка специальных чисел часто отсутствует. Существуют программные пакеты, в которых объём памяти выделенный под мантиссу и показатель задаётся программно, и ограничивается лишь объёмом доступной памяти ЭВМ (см. Арифметика произвольной точности).

Точность Одинарная Двойная Расширенная
Размер (байты)
Число десятичных знаков ~7.2 ~15.9 ~19.2
Наименьшее значение (>0), denorm 1,4·10−45 5,0·10−324 1,9·10−4951
Наименьшее значение (>0), normal 1,2·10−38 2,3·10−308 3,4·10−4932
Наибольшее значение 3,4×10+38 1,7×10+308 1,1×10+4932
Поля S-E-F S-E-F S-E-I-F
Размеры полей 1-8-23 1-11-52 1-15-1-63

· S — знак, E — показатель степени, I — целая часть, F — дробная часть

· Так же, как и для целых, знаковый бит — старший.

Машинный эпсилон[править | править вики-текст]

В отличие от чисел с фиксированной запятой, сетка чисел, которые способна отобразить арифметика с плавающей запятой, неравномерна: она более густая для чисел с малыми порядками и более редкая — для чисел с большими порядками. Ноотносительная погрешность записи чисел одинакова и для малых чисел, и для больших. Машинным эпсилоном называется наименьшее положительное число ε такое, что {\displaystyle 1\oplus \varepsilon \neq 1} Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (знаком {\displaystyle \oplus } Диапазон чисел, представимых в формате с плавающей запятой - student2.ru обозначено машинное сложение). Грубо говоря, числа aи b, соотносящиеся так, что {\displaystyle 1<{\frac {a}{b}}<1+\varepsilon } Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , машина не различает.

Для одинарной точности {\displaystyle \varepsilon =2^{-24}\approx 5,96\cdot 10^{-8}} Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , то есть, приблизительно 7 значащих цифр. Для двойной точности: {\displaystyle \varepsilon =2^{-53}\approx 1,11\cdot 10^{-16}} Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , 15 значащих цифр[1].

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

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

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

Знак
  Порядок Мантисса
 
                               

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

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

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

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

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

Более простым вариантом представления вещественных чисел является вариант с фиксированной точкой, когда целая и вещественная части хранятся отдельно. Например, на целую часть отводится всегда Диапазон чисел, представимых в формате с плавающей запятой - student2.ru бит и на дробную отводится всегда Диапазон чисел, представимых в формате с плавающей запятой - student2.ru бит. Такой способ в архитектурах процессоров не присутствует. Отдаётся предпочтение числам с плавающей запятой, как компромиссу между диапазоном допустимых значений и точностью.

Содержание [убрать] · 1 Нормальная и нормализованная форма · 2 Типы чисел с плавающей точкой (по IEEE 754) o 2.1 Число половинной точности (Binary16, Half precision) o 2.2 Число одинарной точности (Binary32, Single precision, float) o 2.3 Число двойной точности (Binary64, Double precision, double) o 2.4 Число четверной точности (Binary128, Quadruple precision) o 2.5 Диапазон значений чисел с плавающей запятой · 3 Особые значения чисел с плавающей точкой o 3.1 Ноль (со знаком) o 3.2 Неопределенность (NaN) o 3.3 Бесконечности o 3.4 Денормализованные числа · 4 Действия с числами с плавающей запятой o 4.1 Умножение и деление o 4.2 Сложение и вычитание o 4.3 Алгоритм получения представления вещественного числа в памяти ЭВМ · 5 См. также · 6 Примечания · 7 Ссылки o 7.1 Использованные материалы o 7.2 Что стоит прочесть

[править]Нормальная и нормализованная форма

Нормальной формой (англ. normal form) числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) в десятичной системе находится на полуинтервале Диапазон чисел, представимых в формате с плавающей запятой - student2.ru . Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, Диапазон чисел, представимых в формате с плавающей запятой - student2.ru можно записать в 4 формах — Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ), поэтому распространена также другая форма записи — нормализованная (англ. normalized), в которой мантисса десятичного числа принимает значения от Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (включительно) до Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (не включительно), а мантисса двоичного числа принимает значения от Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (включительно) до Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (не включительно). То есть в мантиссе слева от запятой до применения порядка находится ровно один знак. В такой форме любое число (кроме Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ) записывается единственным образом. Ноль же представить таким образом невозможно, поэтому стандарт предусматривает специальную последовательность битов для задания числа Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (а заодно и некоторых других полезных чисел, таких как Диапазон чисел, представимых в формате с плавающей запятой - student2.ru и Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ). Так как старший двоичный разряд (целая часть) мантиссы вещественного числа в нормализованном виде всегда равен « Диапазон чисел, представимых в формате с плавающей запятой - student2.ru », то его можно не записывать, сэкономив таким образом один бит, что и используется в стандарте IEEE 754. В позиционных системах счисления с основанием большим, чем Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (в троичной, четверичной и др.), этого замечательного свойства нет (ведь целая часть там может быть не только единицей).

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

[править]Число половинной точности (Binary16, Half precision)

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

Знак
  Порядок Мантисса
1,
   
                                 

Порядок записан со сдвигом Диапазон чисел, представимых в формате с плавающей запятой - student2.ru. То есть чтобы получить актуально значение порядка нужно вычесть из него сдвиг. Сдвиг можно получить по формуле Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , где Диапазон чисел, представимых в формате с плавающей запятой - student2.ru — число бит, отведенное на хранение порядка (в случае числа половинной точности Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ).

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

§ Целые от нуля до Диапазон чисел, представимых в формате с плавающей запятой - student2.ru передаются как есть.

§ Целые от Диапазон чисел, представимых в формате с плавающей запятой - student2.ru до Диапазон чисел, представимых в формате с плавающей запятой - student2.ru округляются к ближайшему чётному целому.

§ Целые от Диапазон чисел, представимых в формате с плавающей запятой - student2.ru до Диапазон чисел, представимых в формате с плавающей запятой - student2.ru округляются до ближайшего целого, делящегося нацело на четыре.

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

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

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

[править]Число одинарной точности (Binary32, Single precision, float)

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

Знак
  Порядок (8 бит) Мантисса (23+1 бита)
1,  
     
                                                                   

Порядок записан со сдвигом Диапазон чисел, представимых в формате с плавающей запятой - student2.ru.

[править]Число двойной точности (Binary64, Double precision, double)

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

Знак
  Порядок (11 бит) Мантисса (52+1 бит)
       
1, 000
     

Порядок записан со сдвигом Диапазон чисел, представимых в формате с плавающей запятой - student2.ru.

[править]Число четверной точности (Binary128, Quadruple precision)

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

Знак
  Порядок (15 бит) Мантисса (112+1 бит)
       
1,
                   
Мантисса (112+1 бит)
0000
 
                                                                                                                             

Порядок записан со сдвигом Диапазон чисел, представимых в формате с плавающей запятой - student2.ru.

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

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

Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. Пара значений показателя (когда все разряды нули и когда все разряды единицы) зарезервирована для обеспечения возможности представления специальных чисел. К ним относятся ноль, значения NaN (Not a Number, "не число", получается как результат операций типа деления нуля на ноль) и Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

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

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

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

[править]Ноль (со знаком)

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

Знак
  Порядок Мантисса  
0/1 1, = Диапазон чисел, представимых в формате с плавающей запятой - student2.ru
     
                                   

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

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (если Диапазон чисел, представимых в формате с плавающей запятой - student2.ru )

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (если Диапазон чисел, представимых в формате с плавающей запятой - student2.ru )

[править]Неопределенность (NaN)

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

Знак
  Порядок Мантисса  
0/1 1, 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1 = Диапазон чисел, представимых в формате с плавающей запятой - student2.ru
     
                                   

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

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

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , где Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

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

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

[править]Бесконечности

В число с плавающей запятой можно записать значение Диапазон чисел, представимых в формате с плавающей запятой - student2.ru или Диапазон чисел, представимых в формате с плавающей запятой - student2.ru . Как и нули со знаком, бесконечности позволяют получить хотя бы близкий к правильному результат вычисления в случае переполнения. Согласно стандарту IEEE 754 число с плавающей запятой считается равным бесконечности, если все двоичные разряды его порядка — единицы, а мантисса равна нулю. Знак бесконечности определяется знаковым битом числа.

Знак
  Порядок Мантисса  
0/1 1, = Диапазон чисел, представимых в формате с плавающей запятой - student2.ru
     
                                   

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

[править]Денормализованные числа

Денормализованные числа (англ. denormalized/subnormal numbers) - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленькогонормализованного ("обычного") значения числа с плавающей запятой. Согласно стандарту, если порядок равен своему минимальному значению (все его биты — нули, а истинное значение порядка равно его сдвигу) и все биты мантиссы равны нулю, то это Диапазон чисел, представимых в формате с плавающей запятой - student2.ru . Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего — нули) и данной мантиссой, целая часть которой считается равной нулю, а не единице.

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

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , если Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (нормализованное число)

§ Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , если Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (денормализованное число)

Где Диапазон чисел, представимых в формате с плавающей запятой - student2.ru — бит знака, Диапазон чисел, представимых в формате с плавающей запятой - student2.ru — последовательность битов мантиссы, Диапазон чисел, представимых в формате с плавающей запятой - student2.ru — значение порядка (с учетом сдвига), Диапазон чисел, представимых в формате с плавающей запятой - student2.ru — минимальное значение порядка, используемое для записи чисел (1 — сдвиг) , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru — минимальное значение порядка, которое он в принципе может принять (все биты нули, 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, то есть в числа, меньшие "нормальных". Поэтому их иногда еще называют "субнормальными".

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

[править]Умножение и деление

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

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

[править]Сложение и вычитание

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

Выполним сложение чисел с плавающей точкой и смещенным порядком в 32-х разрядном формате Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru и Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

Переведем Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru в машинный вид. Для этого сначала переведем его в двоичную систему счисления.

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Нормализуем полученное двоичное число по правилам машинной арифметики.

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Найдем смещенный порядок. Так как в условии говорится о 32-разрядном представлении, то смещение порядка равно Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Число отрицательное, следовательно, в бите знака будет стоять единица.

Итак, первое число в машинном 32-разрядном представлении с плавающей точкой будет иметь вид:

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru 10000111 Диапазон чисел, представимых в формате с плавающей запятой - student2.ru (жирным шрифтом выделен порядок числа, длина мантиссы — 23 бита).

Переведем второе число в машинный вид, совершая те же действия.

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru = Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ... Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ... Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

В качестве мантиссы будут сохранены первые Диапазон чисел, представимых в формате с плавающей запятой - student2.ru бита после запятой т.е. Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

Очевидно, что порядок со смещением у второго числа будет таким же, как и у первого.

Второе число положительное, следовательно, бит знака будет содержать ноль.

Итак в машинном 32-разрядном представлении второе число будет иметь вид:

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru 10000111 Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Далее в арифметических операциях будет использоваться число Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru = Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , а не Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru = Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru видимо для упрощения(хотя это не совсем корректно).

Порядки у слагаемых равны, поэтому пропускаем шаг выравнивания порядков и проводим вычитание мантисс по правилам двоичной арифметики. В

компьютере этим занимается арифметический сопроцессор, встроенный в центральный процессор машины.

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Приводим полученный результат к машинному виду. Для этого мы должны внести поправку в порядок — уменьшить его на единицу.

Знак результата — положительный, следовательно, бит знака содержит ноль.

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru 10000110 Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Проверим правильность наших вычислений. Переведем результат в десятичное представление.

Найдем реальный порядок результата, вычтя из него значение смещения Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Следовательно, число результата будет иметь вид:

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Результат наших вычислений верен, так как Диапазон чисел, представимых в формате с плавающей запятой - student2.ru - Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

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

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

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

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

Можно заметить, что старший бит, отведенный под мантиссу, имеет номер Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , т.е. мантисса занимает младшие Диапазон чисел, представимых в формате с плавающей запятой - student2.ru бита. Черта указывает здесь на положение двоичной запятой. Перед запятой должен стоять бит целой части мантиссы, но поскольку она всегда равна Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , здесь данный бит не требуется и соответствующий разряд отсутствует в памяти (но он подразумевается). Значение порядка хранится здесь не как целое число, представленное в дополнительном коде. Для упрощения вычислений и сравнения действительных чисел значение порядка в ЭВМ хранится в виде смещенного числа, т.е. к настоящему значению порядка перед записью его в память прибавляется смещение. Смещение выбирается так, чтобы минимальному значению порядка соответствовал нуль. Например, для типа Double порядок занимает Диапазон чисел, представимых в формате с плавающей запятой - student2.ru бит и имеет диапазон от Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru до Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , поэтому смещение равно Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ( Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ) Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ( Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ). Наконец, бит с номером Диапазон чисел, представимых в формате с плавающей запятой - student2.ru указывает на знак числа.

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

1. перевести модуль данного числа в двоичную систему счисления;

2. нормализовать двоичное число, т.е. записать в виде M Диапазон чисел, представимых в формате с плавающей запятой - student2.ru 2p, где M — мантисса (ее целая часть равна Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ( Диапазон чисел, представимых в формате с плавающей запятой - student2.ru )) и p — порядок, записанный в десятичной системе счисления;

3. прибавить к порядку смещение и перевести смещенный порядок в двоичную систему счисления;

4. учитывая знак заданного числа (0 — положительное; 1 — отрицательное), выписать его представление в памяти ЭВМ.

Пример. Запишем код числа Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

1. Двоичная запись модуля этого числа имеет вид Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

2. Имеем Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

3. Получаем смещенный порядок Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru . Далее имеем Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ( Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ) Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ( Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ).

4. Окончательно

62..52 51..0

5.

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

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

Пример. Пусть дан код 3FEC600000000000(16) или

62..52 51..0

1. Прежде всего замечаем, что это код положительного числа, поскольку в разряде с номером Диапазон чисел, представимых в формате с плавающей запятой - student2.ru записан нуль. Получим порядок этого числа: Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ( Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ) Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ( Диапазон чисел, представимых в формате с плавающей запятой - student2.ru ); Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

2. Число имеет вид Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru Диапазон чисел, представимых в формате с плавающей запятой - student2.ru или Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

3. Переводом в десятичную систему счисления получаем Диапазон чисел, представимых в формате с плавающей запятой - student2.ru , Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

Представление целых чисел: прямой код, код со сдвигом, дополнительный код

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

§ не требовал усложнения архитектуры процессора для выполнения арифметических операций с отрицательными числами,

§ не усложнял арифметические действия,

§ хранил бы одинаковое количество положительных и отрицательных чисел.

Рассмотрим разные методы представления.

Содержание [убрать] · 1 Прямой код o 1.1 Достоинства представления чисел с помощью прямого кода o 1.2 Недостатки представления чисел с помощью прямого кода · 2 Код со сдвигом o 2.1 Достоинства представления чисел с помощью кода со сдвигом o 2.2 Недостатки представления чисел с помощью кода со сдвигом · 3 Дополнительный код (дополнение до единицы) o 3.1 Достоинства представления чисел с помощью кода с дополнением до единицы o 3.2 Недостатки представления чисел с помощью кода с дополнением до единицы · 4 Дополнительный код (дополнение до двух) o 4.1 Длинная арифметика для чисел, представленных с помощью кода с дополнением до двух o 4.2 Достоинства представления чисел с помощью кода с дополнением до двух o 4.3 Недостатки представления чисел с помощью кода с дополнением до двух · 5 См. также · 6 Источники информации

[править]Прямой код

Диапазон чисел, представимых в формате с плавающей запятой - student2.ru

Нумерация двоичных чисел в прямом представлении

При записи числа в прямом коде (англ. Signed magnitude representation) старший разряд является знаковым разрядом. Если его значение равно нулю, то представлено положительное число или положительный ноль, если единице, то представлено отрицательное число или отрицательный ноль. В остальных разрядах (которые называются цифровыми) записывается двоичное представление модуля числа. Например, число Диапазон чисел, представимых в формате с плавающей запятой - student2.ru в восьмибитном типе данных, использующем прямой код, будет выглядеть так: Диапазон чисел, представимых в формате с плавающей запятой - student2.ru .

Наши рекомендации