Изменения

Перейти к: навигация, поиск

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

5322 байта добавлено, 04:30, 20 октября 2011
Добавил информацию о денормализованных числах
</center>
 
 
== Денормализованные числа ==
Денормализованные числа (denormalized\subnormal numbers) - это способ увеличить количество представимых числом с плавающей запятой значений около нуля, дабы повысить точность вычислений. Каждое значение денормализованного числа меньше самого маленького нормализованного ("обычного") значения числа с плавающей запятой.
Согласно стандарту, если порядок равен своему минимальному значению (все его биты - нули, а порядок формально равен своему сдвигу) и все биты мантиссы равны нулю, то это <tex>\pm0</tex>. Если же мантисса не равна нулю, то это число с порядком, на единицу большим минимального (все биты порядка, кроме младшего - нули) и данной мантиссой, целая часть которой считается равной нулю, а не единице.
 
То есть число с плавающей запятой, при учете вышесказанного, можно задать следующим образом:
<br/>
* <tex>(-1)^s\times1.M\times2^E</tex>, если <tex>E_{min} \le E \le E_{max}</tex> (нормализованное число)
 
* <tex>(-1)^s\times0.M\times2^{E_{min}}</tex>, если <tex>E=E_{min}-1</tex> (денормализованное число)
 
Где <tex>s</tex> - бит знака, <tex>M</tex> - последовательность битов мантиссы, <tex>E</tex> - значение порядка (с учетом сдвига), <tex>E_{min}</tex> - минимальное значение порядка, используемое для записи чисел (1-''сдвиг'') , <tex>E_{min}-1</tex> - минимальное значение порядка, которое он в принципе может принять (все биты нули, 0-''сдвиг'').
 
<!-- Есть непроверенная информация, что денормализованные числа исключают ситуацию, при которой a+b=a, когда a и b - конечные числа отличные от нуля. Было бы неплохо сюда её добавить -->
Хоть денормализованные числа и позволяют бороться с погрешностями и обрабатывать очень маленькие значения, за эти возможности приходится дорого платить. Ввиду сложности денормализованные числа крайне редко реализуют на аппаратном уровне - вместо этого используются программные реализации, работающие значительно медленнее. <br/>
Поскольку в стандартных форматах (одинарной и двойной точности) денормализованные числа получаются действительно ''очень'' маленькими и практически никак не влияют на результат некоторых вычислений (при этом заметно замедляя их скорость), то иногда они просто игнорируются. При этом используются два простых механизма, получивших называние Flush-to-zero (FTZ) и Denormals-are-zero (DAZ). Первый механизм заставляет операции возвращать ноль, как только становится ясно, что результат будет денормализованным. Второй механизм заставляет операции рассматривать поступающие на вход денормализованные числа как нули. <br/>
Ярким примером подобного "отсечения" денормализованных чисел могут послужить видеокарты, в которых резкое падение скорости вычислений в сотню раз недопустимо. Так же, например, в областях, связанных с обработкой звука, нет нужды в очень маленьких числах, поскольку они представляют столь тихий звук, что его не способно воспринять человеческое ухо.
 
В версии стандарта IEEE 754-2008 денормализованные числа (denormal или denormalized numbers) были переименованы в subnormal number, то есть в числа, меньшие "нормальных". Поэтому их иногда еще называют "субнормальными".
101
правка

Навигация