2014-03-03 3 views
-1

Итак, я пытаюсь вернуть значение экспоненты для f. Если x - бесконечность или NaN, мне нужно вернуть Tmax. f должен интерпретироваться как представление уровня битов с плавающей точкой с одной точностью и да, я имею в виду передать переменную без знака. Я знаю, что мне нужно удалить соответствующее значение для смещения. Я просто не могу понять, как это сделать. Я могу использовать любые операции, которые хочу, но только 8 из них (= не учитываются).Получение показателя плавающего числа в C

int float_exp(unsigned uf) { 
    int mask = 2139095040; 
    int hold; 
    hold = uf & mask; 
    if(mask == hold){ 
      return Tmax; 
    } else { 
     return ;// something here??? 
    } 

} 

Я не могу понять, как получить экспонента. Любая помощь будет оценена!

+3

Если бы не домашнее задание, вы бы искали 'frexp()' в своем руководстве. –

+0

См. Также [Разделение чисел с плавающей запятой на половину в двоичном формате] (http://stackoverflow.com/questions/22159484/dividing-floating-point-numbers-by-half-in-binary). Не прямой дубликат, но тесно связанный. –

+0

@JonathanLeffler ваши комментарии не помогают. – Shaw

ответ

1

Если число денормализованное вычитание 127 из показателя экспоненты. Если это не тогда, то вычесть 126.

+0

Спасибо. Кажется, я понял это сейчас. – Shaw

+0

@Cole Не наоборот, если число де-нормировано, вычесть 126. – chux

2

Проверьте точку формата с плавающей http://en.wikipedia.org/wiki/IEEE_754-1985

Бинарный показатель в битах с 23 по 30. Таким образом, после маскировки против 0x7F800000, как вы сделали, вам просто нужно перенести то, что осталось вправо на 23 бита и вы иметь свой двоичный показатель.

Затем отрегулируйте смещение, вычитая его.

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