2012-02-18 3 views
0

Есть ли алгоритм, который может преобразовать 32-разрядное целое в его целочисленное представление в представление float IEEE 754, просто используя целые операции?Целочисленное представление для представления float


У меня есть пара мыслей об этом, но ни одна из этих работ пока не работает. (Использование C)

  1. Я думал о том, сдвигая целые числа, но тогда я не смог построить новое представление с плавающей точкой на этом.

  2. Я полагаю, что я мог бы преобразовать целое число в двоичное, но он имеет ту же самую проблему с первым подходом.

+1

Что вы подразумеваете под «преобразованием целого в двоичный»? Он уже находится в двоичном формате ... –

ответ

2

excellent resource on float

Address +3  +2  +1  +0 
Format SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM 

S представляет знаковый бит, где 1 отрицателен и 0 положительна.

Е является дополнение до двух показателей со смещением 127.

М представляет собой 23-битная нормализуются мантисса. Старший бит всегда 1 и, следовательно, не хранится

Тогда смотрите here для дополнения до двух


Я буду использовать Num как массив битов, я знаю, что это ISN» т стандартного диапазона массива C получающий доступ, но вы получите точку
Таким образом, для базового алгоритма, мы начинаем с заполнением из S.

bit S = 0; 
if (num[0] ==1) { 
    S = 1; 
    num[1..32] = -num[1..32] + 1; //ignore the leading bit. flip all the bits then add 1 
} 

Теперь мы установили S и у нас есть скалярное значение для остальной части числа.

Затем мы можем поместить наш номер в мантиссу, найдя первый индекс 1. Который также позволит найти экспонента. Обратите внимание, что показатель всегда будет положительным, так как мы не можем иметь дробные значения int. (Также, сделать особый случай для проверки, если значение равно 0 первых, чтобы избежать бесконечного цикла здесь, или просто изменить цикл надлежащим образом, я ленивый)

int pos = 1; 
signed byte E = 32; 
bit[23] M; 
while(num[pos] == 0) { 
    --E; 
    ++pos; 
} 
int finalPos = min(32, pos+23); //don't get too many bits 
M = num[pos+1..finalPos]; //set the mantissa bits 

Тогда вы строите свой поплавок с бит в S, E, M

Смежные вопросы