вторник, 22 апреля 2008 г.

Числа с плавающей запятой

Стандарт регламентирует тип данных с плавающей запятой "float" (32 бита или 4 байта). Такое кодирование используется в стандарте IEEE для нормализованных чисел с плавающей запятой одинарной точности. Следующие три поля описывают число с плавающей запятой одинарной точности:

S: Знак числа. Значения 0 и 1 представляют положительные и отрицательные значения, соответственно. Один бит.

E: Экспонента числа, основание 2. Этому полю отводится 8 бит. Экспонента уменьшается на 127.

F: Дробная часть мантиссы числа, основание 2. 23 бита отведено этому полю.

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


(-1)^S * 2^(E-Bias) * F1

Описание формата:

 float identifier;

+-------+-------+-------+-------+
|byte 0 |byte 1 |byte 2 |byte 3 | Число с плавающей точкой
S| E | F | одинарной точности
+-------+-------+-------+-------+
1|<- 8 ->|<-------23 bits------>|
<------------32 bits------------>



Смещения начальных битов S, E, и F - это 0, 1, и 9, соответственно. Имейте в виду, что это математические смещения.

F1 - дробное значение, вычисляется следующим образом:

Просматриваются значения битов F.

Если первый бит равен 1, то прибавляется 0.5

Если второй бит равен 1, то прибавляется 0.25

Если третий бит равен 1, то прибавляется 0.125

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

Примечание:

1. К этим 23 битам обычно в начало добавляют бит 1 - символизирующий целую часть F1=1.0. Далее происходит прибавление половин от предыдущих номиналов.

2. Экспоненты 0x00 и 0xFF зарезервированы.

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

0xFF используется для представления неопределенных чисел (переполнение) и NaN (Not a Number).

Спецификация IEEE описывает также числа знаковый ноль, знаковая бесконечность (переполнение), и ненормализованные значения (переполнение в обратную сторону). По спецификациям IEEE, "NaN" (не число) является системно-зависимой и не должна интерпретироваться иначе, как "NaN".

Эти выкладки помогут при разработке программного обеспечения для компьютеров и промышленных контроллеров, а также для разработки ПО для АСУТП.

Источник: http://valeev.org.ru