Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

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

Из Википедии — свободной энциклопедии

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

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

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

Знак
Порядок Мантисса
0 0 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  = 0,15625
31 24 23 16 15 8 7 0

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

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

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'а.

def dw2float(dw_array):
    assert (len(dw_array) == 4)
    dw = int.from_bytes(dw_array, byteorder='little',signed=False)
    s = -1 if (dw >> 31) == 1 \
        else 1                                    # Знак
    e = ( dw >> 23 ) & 0xFF;                      # Порядок
    m = ((dw & 0x7FFFFF ) | 0x800000) if e != 0 \
        else ((dw & 0x7FFFFF ) << 1)              # Мантисса
    m1 = m*(2**(-23))                             # Мантисса в float
    return s*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 округляется вверх.

См. также

Ссылки

Эта страница в последний раз была отредактирована 22 января 2024 в 07:40.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).