Число одинарной точности
Число́ одина́рной то́чности (англ. single precision, single) — широко распространенный компьютерный формат представления вещественных чисел, занимающий в памяти 32 бита (4 байта). Как правило, под ним понимают формат числа с плавающей запятой стандарта IEEE 754.
Числа одинарной точности с плавающей запятой обеспечивают относительную точность 7-8 десятичных цифр в диапазоне от <math>10^{-38}</math> до примерно <math>10^{38}</math>.
В современных компьютерах вычисления с числами с плавающей запятой поддерживаются аппаратным сопроцессором (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). Так как в нормализованной двоичной мантиссе целая часть всегда равна единице, то в поле мантиссы записывается только её дробная часть. Для вычисления мантиссы к единице добавляется дробная часть мантиссы из 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
Конвертирует целочисленное представление числа с одинарной точностью (в виде четырех байт, младшие вначале) во встроенный тип действительных чисел 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 записывается как 3E200000
16, что эквивалентно четырем байтам: [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.4028234 × 1038 (максимальное одинарной точности) 0000 0001 = 2-149 ≈ 1.401298464 × 10−45 (Минимальное положительное число одинарной точности — денормализованное) 0080 0000 = 2-126 ≈ 1.175494351 × 10−38 (Минимальное нормализованное положительное число одинарной точности) 0000 0000 = 0 8000 0000 = −0 7f80 0000 = infinity ff80 0000 = −infinity 3eaa aaab ≈ 1/3
По умолчанию, 1/3 округляется вверх, в отличие от чисел двойной точности.
См. также
Напишите отзыв о статье "Число одинарной точности"
Ссылки
- [www.h-schmidt.net/FloatApplet/IEEE754.html Онлайн IEEE754 калькулятор]
- [www.binaryconvert.com/convert_float.html Онлайн преобразователь для IEEE 754 чисел с одинарной точностью]
- [habrahabr.ru/post/112953/ Habrahabr. Что нужно знать про арифметику с плавающей запятой]
<imagemap>: неверное или отсутствующее изображение |
В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. Эта отметка установлена 18 июня 2012 года. |
<imagemap>: неверное или отсутствующее изображение |
Для улучшения этой статьи желательно?:
|
Отрывок, характеризующий Число одинарной точности
– Не обязан переносить оскорбления, – громко, звучно договорил Долохов.Глаза генерала и солдата встретились. Генерал замолчал, сердито оттягивая книзу тугой шарф.
– Извольте переодеться, прошу вас, – сказал он, отходя.
– Едет! – закричал в это время махальный.
Полковой командир, покраснел, подбежал к лошади, дрожащими руками взялся за стремя, перекинул тело, оправился, вынул шпагу и с счастливым, решительным лицом, набок раскрыв рот, приготовился крикнуть. Полк встрепенулся, как оправляющаяся птица, и замер.
– Смир р р р на! – закричал полковой командир потрясающим душу голосом, радостным для себя, строгим в отношении к полку и приветливым в отношении к подъезжающему начальнику.
По широкой, обсаженной деревьями, большой, бесшоссейной дороге, слегка погромыхивая рессорами, шибкою рысью ехала высокая голубая венская коляска цугом. За коляской скакали свита и конвой кроатов. Подле Кутузова сидел австрийский генерал в странном, среди черных русских, белом мундире. Коляска остановилась у полка. Кутузов и австрийский генерал о чем то тихо говорили, и Кутузов слегка улыбнулся, в то время как, тяжело ступая, он опускал ногу с подножки, точно как будто и не было этих 2 000 людей, которые не дыша смотрели на него и на полкового командира.
Раздался крик команды, опять полк звеня дрогнул, сделав на караул. В мертвой тишине послышался слабый голос главнокомандующего. Полк рявкнул: «Здравья желаем, ваше го го го го ство!» И опять всё замерло. Сначала Кутузов стоял на одном месте, пока полк двигался; потом Кутузов рядом с белым генералом, пешком, сопутствуемый свитою, стал ходить по рядам.
По тому, как полковой командир салютовал главнокомандующему, впиваясь в него глазами, вытягиваясь и подбираясь, как наклоненный вперед ходил за генералами по рядам, едва удерживая подрагивающее движение, как подскакивал при каждом слове и движении главнокомандующего, – видно было, что он исполнял свои обязанности подчиненного еще с большим наслаждением, чем обязанности начальника. Полк, благодаря строгости и старательности полкового командира, был в прекрасном состоянии сравнительно с другими, приходившими в то же время к Браунау. Отсталых и больных было только 217 человек. И всё было исправно, кроме обуви.
Кутузов прошел по рядам, изредка останавливаясь и говоря по нескольку ласковых слов офицерам, которых он знал по турецкой войне, а иногда и солдатам. Поглядывая на обувь, он несколько раз грустно покачивал головой и указывал на нее австрийскому генералу с таким выражением, что как бы не упрекал в этом никого, но не мог не видеть, как это плохо. Полковой командир каждый раз при этом забегал вперед, боясь упустить слово главнокомандующего касательно полка. Сзади Кутузова, в таком расстоянии, что всякое слабо произнесенное слово могло быть услышано, шло человек 20 свиты. Господа свиты разговаривали между собой и иногда смеялись. Ближе всех за главнокомандующим шел красивый адъютант. Это был князь Болконский. Рядом с ним шел его товарищ Несвицкий, высокий штаб офицер, чрезвычайно толстый, с добрым, и улыбающимся красивым лицом и влажными глазами; Несвицкий едва удерживался от смеха, возбуждаемого черноватым гусарским офицером, шедшим подле него. Гусарский офицер, не улыбаясь, не изменяя выражения остановившихся глаз, с серьезным лицом смотрел на спину полкового командира и передразнивал каждое его движение. Каждый раз, как полковой командир вздрагивал и нагибался вперед, точно так же, точь в точь так же, вздрагивал и нагибался вперед гусарский офицер. Несвицкий смеялся и толкал других, чтобы они смотрели на забавника.
Кутузов шел медленно и вяло мимо тысячей глаз, которые выкатывались из своих орбит, следя за начальником. Поровнявшись с 3 й ротой, он вдруг остановился. Свита, не предвидя этой остановки, невольно надвинулась на него.
– А, Тимохин! – сказал главнокомандующий, узнавая капитана с красным носом, пострадавшего за синюю шинель.
Казалось, нельзя было вытягиваться больше того, как вытягивался Тимохин, в то время как полковой командир делал ему замечание. Но в эту минуту обращения к нему главнокомандующего капитан вытянулся так, что, казалось, посмотри на него главнокомандующий еще несколько времени, капитан не выдержал бы; и потому Кутузов, видимо поняв его положение и желая, напротив, всякого добра капитану, поспешно отвернулся. По пухлому, изуродованному раной лицу Кутузова пробежала чуть заметная улыбка.
– Еще измайловский товарищ, – сказал он. – Храбрый офицер! Ты доволен им? – спросил Кутузов у полкового командира.
И полковой командир, отражаясь, как в зеркале, невидимо для себя, в гусарском офицере, вздрогнул, подошел вперед и отвечал:
– Очень доволен, ваше высокопревосходительство.
– Мы все не без слабостей, – сказал Кутузов, улыбаясь и отходя от него. – У него была приверженность к Бахусу.
Полковой командир испугался, не виноват ли он в этом, и ничего не ответил. Офицер в эту минуту заметил лицо капитана с красным носом и подтянутым животом и так похоже передразнил его лицо и позу, что Несвицкий не мог удержать смеха.
Кутузов обернулся. Видно было, что офицер мог управлять своим лицом, как хотел: в ту минуту, как Кутузов обернулся, офицер успел сделать гримасу, а вслед за тем принять самое серьезное, почтительное и невинное выражение.