Что такое нормализованное число в стандарте ieee754

Смешанный десятично-двоичный формат vs IEEE754

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

Данный формат позволяет производить арифметические вычисления на компьютере без использования BCD с такой же точностью, как если бы вычисления велись вручную.
Напомним, что смешанным десятично — двоичным форматом (СДДФ) называется формат представления десятичных чисел с плавающей точкой двоичным кодом, в котором целочисленная мантисса является двоичным эквивалентом своего десятичного значения, а экспонента является двоичным эквивалентом степени числа 10. Вещественное число в СДДФ представляется в виде

Что такое нормализованное число в стандарте ieee754. Смотреть фото Что такое нормализованное число в стандарте ieee754. Смотреть картинку Что такое нормализованное число в стандарте ieee754. Картинка про Что такое нормализованное число в стандарте ieee754. Фото Что такое нормализованное число в стандарте ieee754

где Что такое нормализованное число в стандарте ieee754. Смотреть фото Что такое нормализованное число в стандарте ieee754. Смотреть картинку Что такое нормализованное число в стандарте ieee754. Картинка про Что такое нормализованное число в стандарте ieee754. Фото Что такое нормализованное число в стандарте ieee754и e — целые двоичные числа. Под двоичным эквивалентом десятичного числа подразумевается двоичный код этого десятичного числа в выбранном формате. Под десятичным эквивалентом двоичного числа подразумевается десятичный код этого двоичного числа.

Сравним основные свойства чисел с плавающей точкой, которые представлены в стандарте IEEE754 и СДДФ. Для простоты рассмотрим 16-разрядное машинное слово. Это так называемый формат половинной точности. Результаты сравнения легко можно масштабировать на случай формата обмена одинарной и двойной точности.

16-разрядное двоичное слово разобьем на следующие поля: S,e,m. Где S-разряд знака числа, e — 5 разрядов смещенной экспоненты, m — 10 разрядов двоичного эквивалента десятичной мантиссы числа. Максимальное двоичное значение смещенной экспоненты, записанной в 5-ти разрядный регистр, будет равно emax=11111, или в десятичном виде emax=31. Смещение в этом случае равно 15.

1. Мантисса упакованного числа в IEEE754 содержит дробную часть мантиссы числа.

Мантисса числа в СДДФ представляет собой двоичное целое число.

2. Нормализованная мантисса IEEE в распакованном виде имеет вид 1.xxxxxxxxxx. Где x — любая двоичная цифра.

Поскольку мантисса нормализована, ее целая часть в распакованном виде всегда равна 1. Эту единицу можно не хранить в памяти машины. Таким образом, в распакованном виде, с учетом виртуальной единицы, мантисса будет иметь 11 бит.

Нормализованная мантисса в СДДФ является целым двоичным числом равным эквиваленту десятичного числа, которое в нашем случае представлено тремя цифрами: UХХ. Где U — любая десятичная цифра не равная нулю. Х — любая десятичная цифра.

В 10 битах мантиссы может быть представлено максимальное десятичное число 1023. Все целые числа меньше 1023 могут быть гарантировано представлены 10 битами. Следовательно, все целые десятичные числа с мантиссой ≤ 999 могут быть точно представлены 10 битами мантиссы.

3. В IEEE754 максимальная нормализованная двоичная мантисса равна Mmax=1.1111111111= 1.9990234375

Гарантированое количество верных цифр, которое можно представить двоичной 11-ти битной мантиссой равно 3.

Максимальная нормализованная десятичная мантисса в СДДФ равна Mmax=999 или в двоичном виде Mmax= 1 111 100 111. Десятичный эквивалент мантиссы состоит из 3 десятичных цифр. Следовательно, трехзначная мантисса в нашем примере точно представлена в СДДФ 3 значащими десятичными цифрами.

4. В IEEE754 минимальное нормализованное значение мантиссы, при emin=0, будет равно: Mmin=1.0

Минимальная нормализованная мантисса в СДДФ, при emin=0, равна десятичному числу Mmin=100. Или в двоичном виде Mmin= 0001100100.

5. Максимальное положительное десятичное число, которое можно записать в формате IEEE754 со смещенной экспонентой будет

Fmax=2^emax* Mmax= 2^31*1,9990234375 = 4292870144=4.292870144*10^9. Однако, в стандарте максимальным числом считается число Fmax=2^emax=2^31= 4294967296= 4.294967296*10^8. Числа >2^31 считаются равными плюс бесконечности.

Максимальное положительное десятичное число, которое можно точно записать в формате СДДФ со смещенной экспонентой будет

6. Диапазон приближенных нормализованных чисел, который может быть представлен в формате IEEE будет равен

Fmax/ Fmin=2^31=4294967296= 4.294967296*10^8

Диапазон точных чисел, который может быть представлен в формате СДДФ будет равен
Fmax/ Fmin=9.99*10^31

7. Шаг изменения двоичного числа в IEEE при смещенной экспоненте (emin=0) равен:
h=0.0000000001=2^-10= 0,0009765625

Шаг изменения десятичного числа в СДДФ при смещенной экспоненте (emin=0) равен:
h=00001100100=100

8. В IEEE754, при смещенной экспоненте, если e=0, то все числа, котрые 32768 считаются равными плюс бесконечности.

При несмещенной экспоненте, максимальное положительное десятичное число, которое можно записать в СДДФ будет равно

Fmax=10^emax*Mmax =999*10^15= 9,99*10^17

10. При несмещенной экспоненте, минимальное нормализованное положительное десятичное число в формате IEEE754 будет равно Fmin=1.0*2^-15=
3.0517578125*10^-5.

При несмещенной экспоненте, минимальное нормализованное положительное десятичное число, которое можно записать в формате СДДФ будет равно Fmin=100*10^-15=10^-13

11. При несмещенной экспоненте, минимальный шаг двоичного эквивалента десятичного числа в IEEE равен:

При несмещенной экспоненте, минимальный шаг в СДДФ совпадает с минимальным числом и равен:

В СДДФ функция зависимости значения десятичного эквивалента числа Fd от его двоичного значения равномерна. Любое изменение на h двоичного эквивалента мантиссы десятичного числа влечет за собой изменение на 1 младшего разряда десятичного эквивалента числа. Здесь машинное Ɛ=1. Действительно.

Если e=0,
Fd1=100= 0001100100
Fd2=200 =0011001000
Fd2- Fd1=0011001000-0001100100= 0001100100=100= h

В заключение приведем основные характеристики представления вещественных чисел в стандарте IEEE754 и СДДФ для формата обмена, состоящего из 32 разрядов (single-precision в стандарте IEEE754).

Для IEEE754 разряды машинного слова в формате single-precision распределены как S — 1 разряд кода знака, e — 8 разрядов смещенной экспоненты, m — 23 явных разряда мантиссы. В распакованном виде m=24.

Для IEEE754:
Коэффициент смещения экспоненты равен 127 еmax=127. Несмещенный порядок наименьшего нормализованного числа с M=1.0 равен p=e-127+1=-126. Числа

Источник

Что такое нормализованное число в стандарте ieee754

Дата публикации статьи: 25.04.2009 14:19

Автор: Яшкардин Владимир Леонидович
Сайт: www.softelectro.ru

Данный стандарт разработан ассоциацией IEEE (Institute of Electrical and Electronics Engineers) и используется для представления действительных чисел (чисел с плавающей точкой) в двоичном коде. Наиболее используемый стандарт для вычислений с плавающей точкой, используется многими микропроцессорами и логическими устройствами, а также программными средствами.

В августе 2008 года ассоциация IEEE выпустила стандарт IEEE 754-2008, который включил в себя стандарт IEEE 754-1985.

Описание стандарта.

Основное применение в технике и программирование получили форматы 32 и 64 бита. Например в основных логических языках VB и С используют типы данных single и double. Далее я буду рассказывать в основном про формат single, так как double является просто увеличенной копией single.

Основные понятия в представлении чисел с плавающей точкой.

Возьмем, к примеру, десятичное число 155.625
Представим это число в нормализованном экспоненциальном виде : 1.55625*10^2 =1,55625e+2
Число 1,55625e+2 состоит из двух частей: мантиссы M=1.55625 и экспоненты e =+2
Если мантисса находится в диапазоне 1 В результате мы получим число 155.625 в 32- битном формате IEEE754:1 бит8 бит23 бит32 бит01000 0110001 1011 1010 0000 0000 0000= 43 1B A0 00 (hex)0(dec)134(dec)1810432(dec)знак числа +смещенная экспонентаостаток от мантиссычисло 155.625 в формате IEEE754

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

Приведу формулу для восстановления числа из стандарта IEEE754 для одинарной точности (single):

Проверяем:
F =(-1)^0*2^(134-127)*(1+ 1810432/8388608)= 2^7*(1+0,2158203125)=128*1,2158203125=155.625

Формальное представление нормализованных чисел в формате IEEE 754.

Рис. 1 Представление формата числа в стандарте IEEE 754

Формула вычисления десятичных чисел с плавающей точкой,из чисел представленных в стандарте IEEE754:

Рис.2 Формат числа одинарной точности (single-precision) 32 бита

Рис.3 Формат числа двойной точности (double-precision) 64 бита

Исключения чисел формата IEEE754 из алгоритма вычисления по формуле №1.

Отсюда видно, что невозможно представить число нуль в заданном формате.

Поэтому из стандарта сделаны исключения и формула №1 не применяется в следующих случаях:

1. число IEEE754=00 00 00 00hex считается числом +0
Рис.4

2. число IEEE754=7F 80 00 00hex считается числом +∞
Рис.6

3. числа IEEE754=FF (1xxx)X XX XXhex не считается числами (NAN), кроме случая п.2
числа IEEE754=7F (1xxx)X XX XXhex не считается числами (NAN), кроме случая п.2
Рис.8
Число представленное в битах с 0. 22 могут быть любым числом кроме 0.

Формула расчета денормализованных чисел:


Представим полный диапазон чисел представленных в формате 32 бит по стандарту IEEE754:

Рис.14 Диапазон чисел формата 32 бита представленных по стандарту IEEE 754

Заключение.

Стандарт IEEE 754 широко применяется в технике и программировании. При этом хочется отметить, что в нем заложены существенные недостатки. Создается впечатление, что в разработке стандарта не принимали участие профессиональные математики. Директор института математики и ее применений в Миннеаполисе, США Дуглас Н.Арнольд утверждает, что целый ряд крупнейших аварий с человеческими жертвами и миллиардными убытками всецело обязан нынешней технологии компьютерных вычислений и представлений данных по стандарту IEEE 754.

Вы можете прочитать об этом в статье IEEE754-тика угрожает человечеству

Как программист скажу, никогда не применяйте одинарную точность (single) в программах, если полностью не представляете и не контролируете всю процедуру расчета, так как результат компьютерного расчета может быть не предсказуем. На одной из крупных научных конференций ректор Технического университета Вены проф. П. Скалички заявил, что «с тех пор, как подробнее узнал о принятых способах выполнения машинных вычислений, очень опасается ходить по мостам и оказываться внутри других сложных инженерных сооружений».

Формат чисел IEEE754 неплохо работает в технике, когда нужно представить и передать число, но требует абсолютного контроля в операциях деления и умножения.

Вот пример, который вы можете испытать:
Программный код в VB который делит два одинаковых числа 0,3 : 0,3 = 1 (это должно получится)

Private Sub Command1_Click()
Dim a, c As Single
a = 0.3
c = 0.3
Text1.Text = c / a
Text2.Text = a / c
End Sub

Рис.15 Вот результат вычислений этой программы:

a=0.3 c=0.3 c : a = 1.00000003973643
a=0.3 c=0.3 a : c = 0.999999960263572
Здесь вы видите не только не точный результат, но и зависимость результата от расположения переменных. Это только одна операция, представьте, что операций тысячи. Результат таких вычислений будет не предсказуем.

Источник

Взгляд со стороны: Стандарт IEEE754

1.ЕСТЕСТВЕННАЯ И ЭКСПОНЕНЦИАЛЬНАЯ ФОРМЫ ЗАПИСИ ЧИСЕЛ

Из математики известно, что любое действительное число F в позиционной системе счисления с основанием q записывается на бумаге в виде последовательности цифр. Вес цифры зависит от ее позиции в числе. Основание системы q равно количеству цифр (знаков ее алфавита) и определяет, во сколько раз различаются значения цифр соседних разрядов числа. Такая запись числа называется естественной и выглядит следующим образом:

F = c_(L-1,) c_(L-2)…c_(0.) d_(0 )…d_(N-2,) d_(N-1,) (1)

Где c_(L-1,) c_(L-2)…c_0- цифры целой части, а d_(0 )…d_(N-2,) d_(N-1) — цифры дробной части числа. Число может состоять из сколь угодно большого количества значащих цифр L целой части и N цифр дробной части.
Если точку в числе F, представленном выражением (1) переместить на h разрядов влево, то мы получим новое число М, которое связано с первоначальным числом формулой, представляющей собой экспоненциальную зависимость:

Значение числа F при этом уменьшится в h раз. Чтобы число не изменилось, его умножают на величину q^h. Таким образом, число, записанное в естественном виде (1), может быть представлено в эквивалентном ему экспоненциальном виде:

Если точку в числе F, представленном выражением (1) переместить на h разрядов вправо, то мы получим новое число М, которое связано с первоначальным числом формулой:

Значение числа F при этом увеличится в h раз. Чтобы число не изменилось, его умножают на величину q^(-h). Таким образом, для рассматриваемого случая, число, записанное в естественном виде (1), может быть представлено в следующем эквивалентном ему экспоненциальном виде:

В общем случае, любое действительное число, записанное в естественной форме (1), может быть записано в эквивалентном ему экспоненциальном виде следующим образом:

где М представляет собой число (1) со смещенной точкой на h позиций в ту или иную сторону. Число М в такой записи принято называть мантиссой числа, а q^(±h) характеристикой числа с порядком ±h, который в литературе еще называют экспонентой. Знак и величина порядка h компенсируют величину смещения точки относительно ее первоначального положения в числе (1). Обе записи (1) и (4) суть записи одного и того же числа различным образом.

Число (1) имеет L + N разрядов. Поскольку в естественном представлении числа (1) число разрядов L целой части и N разрядов дробной части могут иметь сколь угодно большое значение, то число M в (2) также может иметь сколь угодно большое количество разрядов. В общем случае, количество разрядов числа М в (2) может быть бесконечным. Например, когда число представляет собой периодическую дробь, или число иррационально. На практике мы имеем дело с ограниченным количеством разрядов для представления действительного числа в естественной форме. Сколько бы разрядов числа мы ни писали справа, рано или поздно мы должны ограничить количество разрядов представляемого числа. Хотя бы потому, что писать будет уже некуда. В результате, число сначала ограничивают, а затем округляют до приемлемой для данной задачи крайней правой цифры. При этом, конечно, теряется точность представления этого числа. Вопросы точности представления чисел в математике мы здесь не затрагиваем. Этому вопросу посвящено огромное число работ. Отметим только, что точность представления числа выбирается в разумных пределах и поэтому действительное число всегда записывается с ограничением разрядности. Тем самым, строго говоря, оно становится рациональным числом. В компьютерной литературе, числа, имеющие дробную часть, принято называть действительными числами. Мы тоже будем придерживаться этой терминологии.

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

2. ПРЕДСТАВЛЕНИЕ ЧИСЕЛ В МАШИННОМ СЛОВЕ

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

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

Что такое нормализованное число в стандарте ieee754. Смотреть фото Что такое нормализованное число в стандарте ieee754. Смотреть картинку Что такое нормализованное число в стандарте ieee754. Картинка про Что такое нормализованное число в стандарте ieee754. Фото Что такое нормализованное число в стандарте ieee754

В этом слове К разрядов отводится для записи мантиссы M, R разрядов под запись порядка h характеристики и по одному разряду отводится под запись знака S числа и z знака порядка. Машинное пространство, выделенное под запись мантиссы числа, будем называть областью машинной мантиссы (ОММ), а число, записанное в эту область, машинной мантиссой. Аналогично, пространство, выделенное в машине под запись порядка характеристики, будем называть областью машинного порядка (ОМП) характеристики, а число, записанное в эту область будем называть машинным порядком. Если в ОММ в явном виде содержится точка, то числа, представленные в таком формате, называются числами с фиксированной точкой. Далее мы будем рассматривать числа, записанные в экспоненциальном виде (2). Числа, представленные в таком формате, называют еще числами с плавающей точкой.

3. НОРМАЛИЗАЦИЯ ЧИСЕЛ

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

Возьмем двоичное число 0.001001 и запишем его в экспоненциальном виде в машинное слово, в котором ОММ имеет 3 разряда. В том случае, когда предполагается, что машинная мантисса представлена в виде правильной дроби, мы будем иметь следующие возможные варианты записи этого числа: 0.1001•2^(-2)=0.100•2^(-2)=0.010•2^(-1)=0.001•2^0. Во всех этих случаях младший разряд записываемого числа был утерян, поскольку он вышел за пределы разрядной сетки ОММ. Итак, мы получили запись одного и того же числа различными вариантами.

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

В настоящее время чаще всего рассматриваются два варианта нормализации чисел. В первом варианте [1], перед записью в машинное слово число представляется в виде двоичного дробного числа, в котором единица стоит сразу после точки. При такой нормализации двоичная мантисса в виде правильной дроби лежит в диапазоне 0.1≤М

Источник

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

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

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

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

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

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

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

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

Содержание

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

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

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

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

Знак
ПорядокМантисса
0000001,0000000000
141090

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

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

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

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

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

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

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

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

Знак
Порядок
(15 бит)
Мантисса
(112+1 бит)
00000000000000001,0000000000000000000000000000000000000000000000
126112111
Мантисса
(112+1 бит)
000000000000000000000000000000000000000000000000000000000000000000
0

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

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

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

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

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

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

Знак
ПорядокМантисса
0 /1000001,0000000000= [math]\pm0[/math]
141090

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

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

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

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

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

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

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

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

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

Знак
ПорядокМантисса
0 /1111111,0000000000= [math]\pm\infty[/math]
141090

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

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

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

ПроизводительПроцессорЗамедление (разы)
IBMPowerPC 9702,4
AMDAthlon6,0
IntelPentium 315,8
AMDAthlon 6421,4
AMDOpteron6423,8
IntelCore Duo44,2
IntelP4 Xeon97,9
IntelPentium 4131,0
IntelItanium 2183,2
SunUltraSPARC IV520,0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    0011111111101100011000000000000000000000000000000000000000000000
    6362..5251..0

Источник

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

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