2004-gre-cs-practice-book.pdf/Q22

Материал из DISCOPAL
< 2004-gre-cs-practice-book.pdf
Версия от 09:29, 21 декабря 2024; StasFomin (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Вопрос: Q22-4c9f66

Согласно стандарту IEEE, 32-разрядное число с плавающей запятой одинарной точности N определяется как

где S — знаковый бит, F — дробная мантисса, а E — смещенный показатель степени

Число с плавающей запятой хранится в формате S : E : F, где S, E и F хранятся в 1 бите, 8 битах и 23 битах соответственно.

Каково десятичное значение числа с плавающей запятой C1E00000 (шестнадцатеричная система счисления)?

Ответы

  • 26
  • −15
  • −26
  • Правильный ответ: −28
  • −59

Объяснение

Ну, считаем поля на глаз:

b_ = bin(0xC1E00000)[2:]
S = b_[:1]
E = b_[1:9]
F = b_[9:] #было [10:], что пропускало единицу, теперь F = 11000000000000000000000
S, E, F
('1', '10000011', '11000000000000000000000')

Видно, что-то отрицательное,

Показатель 4

 print(0b10000011-127)


Считаем F:

F_value = 0.0
for i in range(23):
    if (F[i] == '1'):
        F_value += 1 / (2 ** (i + 1))
print (F_value)0.75

Не забыть прибавить 1, потому что мантисса считается как M = 1.F = 1 + F. Поэтому M = 1.75

В итоге по формуле

Исходники — вопрос 22 на 21 странице книги «2004-gre-cs-practice-book.pdf»

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.