Конституция Армении: Статья 18.1
Конституция Армении (Статья 18.1) закрепляет «исключительную миссию Армянской Апостольской Святой Церкви как национальной церкви в духовной жизни армянского народа, в деле развития его национальной культуры и сохранения его национальной самобытности»:
Число одинарной точности

Число одинарной точности

Материал из Википедии — свободной энциклопедии

Число́ одина́рной то́чности (англ. single precision, single) — широко распространенный компьютерный формат представления вещественных чисел, занимающий в памяти 32 бита (4 байта). Как правило, под ним понимают формат числа с плавающей запятой стандарта IEEE 754.

Числа одинарной точности с плавающей запятой эквивалентны по точности числу с 7-8 значащими десятичными цифрами (в среднем 7,6) в диапазоне от до примерно .

В современных компьютерах вычисления с числами с плавающей запятой поддерживаются аппаратным сопроцессором (FPU — англ. floating point unit). Однако в ряде вычислительных архитектур нет аппаратной поддержки чисел с плавающей запятой, и тогда работа с ними осуществляется программно.

Для вычисления показателя степени из восьмиразрядного поля порядка вычитается смещение порядка, равное 12710 = 7F16 = 011111112 (то есть, 011111002 — 011111112 = 12410 — 12710 = −310). Так как в нормализованной двоичной мантиссе целая часть всегда равна единице, то в поле мантиссы записывается только её дробная часть, то есть фактический размер мантиссы числа с одинарной точностью составляет 24 бита. Для вычисления мантиссы к единице добавляется дробная часть мантиссы из 23-разрядного поля дробной части мантиссы 1,010000000000000000000002. Число равно произведению мантиссы со знаком на двойку в степени порядка = 1,012*210−310 = 1012*210−510 = 510*210−510 = 0,1562510.

Специальные значения

Стандарт IEEE 754 определяет ряд значений с особой интерпретацией или математическими свойствами.

Значения Inf появляются если результат расчета столь велик что не помещается в одинарный формат IEEE 754, например происходит арифметическое переполнение. Вычисления или сравнения с Inf оговариваются особым образом.

Значения NaN появляются если результат расчета не определен. Например деление ноля на ноль. Вычисления с хотя бы одним NaN дают NaN, сравнения с NaN всегда false. Иногда различают signaling NaN (sNaN) и quiet NaN (qNaN), различающиеся кодированием мантиссы. sNaN обозначает требование генерации исключения в вычислительной системе, а qNaN не прерывает вычислений.

Общий шаблон для побитового доступа

union {    float    fl;    uint32_t dw;} f;int s = ( f.dw >> 31 ) ? -1 : 1;   /* Знак */int e = ( f.dw >> 23 ) & 0xFF;     /* Порядок */int m =                            /* Мантисса */  e ?    ( f.dw & 0x7FFFFF ) | 0x800000 :    ( f.dw & 0x7FFFFF ) << 1;

Результирующая формула расчёта (число одинарной точности) будет s * (m * 2 ^ -23) * (2 ^(e-127)).

Примеры использования

Python

Конвертирует целочисленное представление числа с одинарной точностью (в виде четырёх байт, младшие в начале) во встроенный тип действительных чисел Python’а.

def dw2float(dw_array):assert(len(dw_array)==4)dw=int.from_bytes(dw_array,byteorder='little',signed=False)s=-1if(dw>>31)==1 \ else1# Знакe=(dw>>23)&0xFF;# Порядокm=((dw&0x7FFFFF)|0x800000)ife!=0 \ else((dw&0x7FFFFF)<<1)# Мантиссаm1=m*(2**(-23))# Мантисса в floatreturns*m1*(2**(e-127))

0.1562510 в формате float записывается как 3E20000016, что эквивалентно четырём байтам: [0x00,0x00,0x20,0x3E]. Вывод программы:

 In[1]: dw2float([0x00,0x00,0x20,0x3E]) Out[1]: 0.15625 In[2]: dw2float([0x00,0x00,0x20,0xBE]) Out[2]: -0.15625 

Примеры чисел одинарной точности

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

3f80 0000 = 1 c000 0000 = −2 7f7f ffff ≈ 3.40282346639 × 1038  (максимальное одинарной точности) 0000 0001 = 2−149 ≈ 1.40129846432 × 10−45 (Минимальное положительное число одинарной точности — денормализованное) 0080 0000 = 2−126 ≈ 1.17549435082 × 10−38 (Минимальное нормализованное положительное число одинарной точности) 0000 0000 = 0 8000 0000 = −0 7f80 0000 = infinity ff80 0000 = −infinity 3eaa aaab ≈ 1/3

Обычно при переводе числовых констант в формат float делается округление. Например, число 1/3 округляется вверх.

См. также

Ссылки

Знак
ПорядокМантисса
00111110 00100000 00000000 00000000 = 0,15625
3124231615870