В стандарте IEEE754 дробные числа представляются следующим образом:
(-1)^s × 1.M × 2^E
где s
- знак, M
- мантисса и E
- порядок.
Допустим у нас есть число float f = 12.34
в памяти оно будет представлено так:
0100 0001 0100 0101 0111 0000 1010 0100
Как получить из него обратно десятичное дробное число понятно: старший бит 0
это знак, следующие восемь бит порядок со смещением равным 127
: 1000 0010
, то есть порядок в данном случае 3
. Мантисса 1.100 0101 0111 0000 1010 0100
что в десятичной системе равно 1.54250002
.
Таким образом 1.54250002 * 2^3 = 12.34000016
;
А вот обратный алгоритм мне не понятен как получить из 12.34
представление в двоичном виде.
Есть такой алгоритм: 12
в двоичной это 1100
дробная часть ищется так:
0.34 * 2 = 0.68
0.68 * 2 = 1.36
0.36 * 2 = 0.72
0.72 * 2 = 1.44
0.44 * 2 = 0.88
0.88 * 2 = 1.76
0.76 * 2 = 1.52
0.52 * 2 = 1.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 0.2
0.2 * 2 = 0.4
0.4 * 2 = 0.8 //здесь началось зацикливание
и 12.34
= 1100.0101011101000...
. Но это явно не этот алгоритм.
В общем вопрос: как из 12.34
получить представление в IEEE754?;
Это именно "этот" алгоритм. Только у вас в подсчетах ошибка
0.52 * 2 = 1.04 // а не 1.4
...
Так что у вас при правильном переводе получится
12.34 = 1100.010101110000101001002... = 1.100010101110000101001002... * 23
А также надо помнить, что в памяти для типов float
и double
ведущая единица мантиссы "подразумевается", т.е. явно не хранится. Мантисса в памяти будет храниться как
10001010111000010100100
Экспонента в памяти будет храниться как 3 + 127 = 130
10000010
Все в точности совпадает с вашим фактическим представлением в памяти
0 | 100 0001 0 | 100 0101 0111 0000 1010 0100
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Существует у меня функция, которая создает логКак бы я не крутился - файл создается в папке, где запустили программу
Почему центр фигуры смещается в сторону при увеличении значения радиуса?
Вчера я написал вопрос об этой же задаче, слегка улучшил свой алгоритм, но всё таки хотел бы узнать как можно решить её алгоритмом перебора