Перевод чисел в формат с плавающей запятой

Представление чисел в двоичном коде с плавающей запятой

Часто приходится обрабатывать очень большие числа (например, расстояние между звёздами) или наоборот очень маленькие числа (например, размеры атомов или электронов). При таких вычислениях пришлось бы использовать числа с очень большой разрядностью. В то же время нам не нужно знать расстояние между звёздами с точностью до миллиметра. Для вычислений с такими величинами числа с фиксированной запятой неэффективны.

В десятичной арифметике для записи таких чисел используется алгебраическая форма. При этом число записывается в виде мантиссы, умноженной на 10 в степени, отображающей порядок числа, Например:

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

Для записи числа в формате с плавающей запятой одинарной точности требуется тридцатидвухбитовое слово. Для записи чисел с двойной точностью требуется шестидесятичетырёхбитовое слово. Чаще всего числа хранятся в нескольких соседних ячейках памяти процессора. Форматы числа в формате с плавающей запятой одинарной точности и числа в формате с плавающей запятой удвоенной точности приведены на рисунке


Рисунок 1. Форматы числа с плавающей запятой

На рисунке буквой S обозначен знак числа, 0 — это положительное число, 1 — отрицательное число.

Группа бит, обозначенная e предназначена для записи смещённого порядка числа. Смещение потребовалось, чтобы не вводить в двоичный код числа с плавающей запятой еще один знак. Смещённый порядок всегда является положительным числом. В двоичном коде одинарной точности float для записи порядка числа выделено восемь бит. Для него смещение порядка числа принято 127. Для смещённого порядка в двоичном коде числа с плавающей запятой двойной точности double отводится 11 бит. В нем смещение порядка числа составляет — 1023.

В десятичной мантиссе после запятой могут присутствовать цифры 1. 9, а в двоичной — только 1. Поэтому для хранения единицы после двоичной запятой не выделяется отдельный бит в числе с плавающей запятой. Единица подразумевается, как и двоичная запятая. Кроме того, в формате чисел с плавающей запятой принято, что мантисса всегда больше 1. То есть диапазон значений мантиссы лежит в диапазоне от 1 до 2.

Рассмотрим несколько примеров:

1) Определить число с плавающей запятой, лежащее в четырёх соседних байтах:

11000001 01001000 00000000 00000000

— Знаковый бит, равный 1 показывает, что число отрицательное.

— Экспонента 10000010 в десятичном виде соответствует числу 130. Вычтя число 127 из 130, получим число 3.

— Теперь запишем мантиссу: 1,100 1000 0000 0000 0000 0000

— И, наконец, определим десятичное число: 1100,1b = 12,5d

2) Определить число с плавающей запятой, лежащее в четырёх соседних байтах:

11000011 00110100 00000000 00000000

— Знаковый бит, равный 1 показывает, что число отрицательное.

— Экспонента 10000110 в десятичном виде соответствует числу 134. Вычтя число 127 из 134, получим число 7.

— Теперь запишем мантиссу: 1,011 0100 0000 0000 0000 0000

— И, наконец, определим десятичное число: 10110100b=180d

Для того чтобы записать ноль, в двоичном представлении числа с плавающей запятой достаточно записать в смещенный порядок число 00000000b. Значение мантиссы при этом не имеет значения. Число, в котором все байты равны 0, тоже попадает в этот диапазон значений.

Бесконечность в числе с плавающей запятой соответствует смещенному порядку 11111111b и мантиссе, равной 1,0. При этом существует минус бесконечность и плюс бесконечность (переполнение и антипереполнение), которые часто отображаются на экран монитора компьютера или дисплей микропроцессорного устройства как +INF и -INF.

Все остальные комбинации битов мантиссы числа с плавающей запятой (в том числе и все единицы) при смещенном порядке 11111111b воспринимаются языками программирования как не числа и отображаются на экран: NaN.

Другие виды двоичных кодов:

Целочисленные двоичные коды Представление двоичных чисел в памяти компьютера или микроконтроллера
https://digteh.ru/proc/IntCod.php

Двоично-десятичный код Иногда бывает удобно хранить числа в памяти процессора в десятичном виде
https://digteh.ru/proc/DecCod.php

Запись текстов двоичным кодом Представление текстов в памяти компьютеров и микроконтроллеров
https://digteh.ru/proc/text.php

Системы счисления В настоящее время и в технике и в быту широко используются как позиционные, так и непозиционные системы счисления.
https://digteh.ru/digital/SysSchis.php

Предыдущие версии сайта:
http://neic.nsk.su/

Об авторе:
к.т.н., доц., Александр Владимирович Микушин

Кандидат технических наук, доцент кафедры САПР СибГУТИ. Выпускник факультета радиосвязи и радиовещания (1982) Новосибирского электротехнического института связи (НЭИС).

А.В.Микушин длительное время проработал ведущим инженером в научно исследовательском секторе НЭИС, конструкторско технологическом центре «Сигнал», Научно производственной фирме «Булат». В процессе этой деятельности он внёс вклад в разработку систем радионавигации, радиосвязи и транкинговой связи.

Научные исследования внедрены в аппаратуре радинавигационной системы Loran-C, комплексов мобильной и транкинговой связи «Сигнал-201», авиационной системы передачи данных «Орлан-СТД», отечественном развитии системы SmarTrunkII и радиостанций специального назначения.

Источник

Tools & Thoughts

This page allows you to convert between the decimal representation of numbers (like «1.02») and the binary format used by all modern CPUs (IEEE 754 floating point).

Value actually stored in float: Error due to conversion: Binary Representation Hexadecimal Representation

Update

This webpage is a tool to understand IEEE-754 floating point numbers. This is the format in which almost all CPUs represent non-integer numbers. As this format is using base-2, there can be surprising differences in what numbers can be represented easily in decimal and which numbers can be represented in IEEE-754. As an example, try «0.1». The conversion is limited to 32-bit single precision numbers, while the IEEE-754-Standard contains formats with increased precision.

Usage:

You can either convert a number by choosing its binary representation in the button-bar, the other fields will be updated immediately. Or you can enter a binary number, a hexnumber or the decimal representation into the corresponding textfield and press return to update the other fields. To make it easier to spot eventual rounding errors, the selected float number is displayed after conversion to double precision.

Special Values:

Conversion:

The value of a IEEE-754 number is computed as:

sign 2 exponent mantissa

Underflow:

The range of the mantissa is now [0:1).

Rounding errors:

Not every decimal number can be expressed exactly as a floating point number. This can be seen when entering «0.1» and examining its binary representation which is either slightly smaller or larger, depending on the last bit.

Other representations:

The hex representation is just the integer value of the bitstring printed as hex. Don’t confuse this with true hexadecimal floating point values in the style of 0xab.12ef.

FAQ (Frequently Asked Questions):

Can you send me the source code? I need to convert format x to format y.:

Can you add support for 64-bit float/16-bit float/non-IEEE 754 float?.:

This page relies on existing conversion routines, so formats not usually supported in standard libraries cannot be supported with reasonable effort. Double-precision (64-bit) floats would work, but this too is some work to support alongside single precision floats. As the primary purpose of this site is to support people learning about these formats, supporting other formats is not really a priority.

I’ve converted a number to floating point by hand/some other method, and I get a different result. Your converter is wrong!

Note: If you find any problems, please report them here.

Источник

Перевод чисел с плавающей точкой из одной системы в другую

Всем привет!
Огромная просьба помочь с техникой перевода. Большая просьба проверить каждый пункт ниже с небольшим пояснением, вдруг я что-то делаю не так?

Задание:
Дано некоторое число с плавающей точкой в десятичной системе счисления. Осуществить его перевод в восьмеричную и шестнадцатеричную системы.

Перевод числа с плавающей запятой из одной системы счисления в другую
Как организовать перевод числа из одной системы счисления в другую при условии что числа с.

Перевод чисел из одной системы в другую
Есть задание: создать программу переводящую число из одной системы счисления в другую. Исходное.

Перевод чисел из одной системы счисления в другую
Перевод чисел из одной системы счисления в другую: Запишите числа в прямом коде (формат 1 байт):на.

Перевод чисел из одной системы счисления в другую
Здравствуйте. Подскажите, пожалуйста, как реализовать перевод чисел из одной системы счисления в.

Мелковато число, а куда мантисса делась?

Добавлено через 2 минуты

kazak,
смотрите: -25,625
1) Делим целую часть: 11001
2) Умножаем дробную часть: 101
3) Вышло число: -11001,101
Переводите число в двоичную систему, при переводе должно быть минимум 24 значащих разряда, в случае нехватки дописываем справа нули.

Будьте добры довести это дело как образец до конца, никак не пойму что делать с минусами и прочим.

kazak,
Большое человеческое Вам спасибо, дружище!
Похоже, это как раз то, что мне нужно.
Сейчас буду тестить.

Добавлено через 10 минут
Вот что вышло:
|1100|0001|1100|1101|0000|0000|0000|0000| => C1CD0000 (представление в 16-ричном виде)
|110|000|011|100|110|100|000|000|000|000|00..(не хватает нуля для 8-ричного вида)

kazak,
3. Прибавляем (если сдвигали вправо) количество сдвигов к 127. Результат переводим в двоичную систему, если число получается меньше 8 разрядов, дописываем слева нули.
Так, а если сдвигали влево, то отнимаем кол-во сдвигов от 127?

Так и не дошло, правильно работать со значением 127, или 128?

Представление двоичного числа с плавающей точкой в экспоненциальном нормализованном виде.

Для этого переведем число в двоичное представление.
101 = 11001012
Для перевода дробной части числа последовательно умножаем дробную часть на основание 2. В результате каждый раз записываем целую часть произведения.
0.325*2 = 0.65
(целая часть 0)
0.65*2 = 1.3
(целая часть 1)
0.3*2 = 0.6
(целая часть 0)
0.6*2 = 1.2
(целая часть 1)
0.2*2 = 0.4
(целая часть 0)
0.4*2 = 0.8
(целая часть 0)
0.8*2 = 1.6
(целая часть 1)
0.6*2 = 1.2
(целая часть 1)
0.2*2 = 0.4
(целая часть 0)
0.4*2 = 0.8
(целая часть 0)
0.8*2 = 1.6
(целая часть 1)
0.6*2 = 1.2
(целая часть 1)
0.2*2 = 0.4
(целая часть 0)
0.4*2 = 0.8
(целая часть 0)
0.8*2 = 1.6
(целая часть 1)
0.6*2 = 1.2
(целая часть 1)
0.2*2 = 0.4
(целая часть 0)
0.4*2 = 0.8
(целая часть 0)
0.8*2 = 1.6
(целая часть 1)
0.6*2 = 1.2
(целая часть 1)
0.2*2 = 0.4
(целая часть 0)
0.4*2 = 0.8
(целая часть 0)
0.8*2 = 1.6
(целая часть 1)
Получаем число в 2-ой системе счисления: 01010011001100110011001
0.325 = 010100110011001100110012
В итоге получаем число: 1100101.010100110011001100110012
Сдвинем число на 6 разрядов вправо. В результате мы получили основные составляющие экспоненциального нормализованного двоичного числа:
Мантисса M=1.10010101010011001100110011001
Экспонента exp2=6

Преобразование двоичного нормализованного числа в 32 битный формат IEEE 754.
Первый бит отводится для обозначения знака числа. Поскольку число положительное, то первый бит равен 0
Следующие 8 бит (с 2-го по 9-й) отведены под экспоненту.
Для определения знака экспоненты, чтобы не вводить ещё один бит знака, добавляют смещение к экспоненте в половину байта +127. Таким образом, наша экспонента: 6 + 127 = 133
Переведем экспоненту в двоичное представление.
133 = 100001012
Оставшиеся 23 бита отводят для мантиссы. У нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1 ≤ M Добавлено через 47 секунд
Для 64-бит

Представление двоичного числа с плавающей точкой в экспоненциальном нормализованном виде.

Источник

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Uchenik.top - научные работы и подготовка
0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии