2004-gre-cs-practice-book.pdf/Q22 — различия между версиями
Материал из DISCOPAL
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) |
||
(не показаны 22 промежуточные версии 1 участника) | |||
Строка 26: | Строка 26: | ||
S = b_[:1] | S = b_[:1] | ||
E = b_[1:9] | E = b_[1:9] | ||
− | F = b_[10:] | + | F = b_[9:] #было [10:], что пропускало единицу, теперь F = 11000000000000000000000 |
S, E, F | S, E, F | ||
</code-python> | </code-python> | ||
− | ('1', '10000011', ' | + | ('1', '10000011', '11000000000000000000000') |
Видно, что-то отрицательное, | Видно, что-то отрицательное, | ||
− | Показатель 4 | + | Показатель 4 |
<code-python> | <code-python> | ||
print(0b10000011-127) | print(0b10000011-127) | ||
</code-python> | </code-python> | ||
+ | |||
+ | |||
+ | Считаем F: | ||
<code-python> | <code-python> | ||
− | + | F_value = 0.0 | |
+ | for i in range(23): | ||
+ | if (F[i] == '1'): | ||
+ | F_value += 1 / (2 ** (i + 1)) | ||
+ | print (F_value) | ||
… | … | ||
− | + | 0.75 | |
− | </code-python> | + | </code-python> |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | Не забыть прибавить 1, потому что мантисса считается как M = 1.F = 1 + F. Поэтому M = 1.75 | ||
+ | В итоге по формуле <m>N = (-1)^1 * 1.75 * 2^4 = -1.75 * 16 = -28</m> | ||
{{cstest-source|2004-gre-cs-practice-book.pdf|21|22}} | {{cstest-source|2004-gre-cs-practice-book.pdf|21|22}} | ||
− | + | [[Категория:Машинная арифметика]] | |
− | + | ||
− | + | ||
− | [[Категория: | + |
Текущая версия на 09:29, 21 декабря 2024
Вопрос: 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»