2004-gre-cs-practice-book.pdf/Q22 — различия между версиями
Urmat A (обсуждение | вклад) |
Urmat A (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | {{reserve-task|[[Участник:Urmat A|Urmat A]] 12: | + | {{reserve-task|[[Участник:Urmat A|Urmat A]] 12:44, 20 декабря 2024 (UTC)}} |
== Вопрос: Q22-4c9f66 == | == Вопрос: Q22-4c9f66 == | ||
Строка 35: | Строка 35: | ||
Видно, что-то отрицательное, | Видно, что-то отрицательное, | ||
+ | Показатель 4 | ||
<code-python> | <code-python> | ||
print(0b10000011-127) | print(0b10000011-127) | ||
+ | </code-python> | ||
+ | |||
+ | <code-python> | ||
+ | #А вот снизу то что было. | ||
+ | print(0b1000000000000000000000) | ||
… | … | ||
− | + | 2097152 | |
</code-python> | </code-python> | ||
+ | 1.2097152**4 = 2.1415713601250426 | ||
+ | |||
+ | Надо разобраться, где-то накосячил. | ||
+ | |||
+ | ----------------- | ||
<code-python> | <code-python> | ||
int_value = int("0xC1E00000", 16) | int_value = int("0xC1E00000", 16) | ||
Строка 54: | Строка 65: | ||
</code-python> | </code-python> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Не забыть прибавить 1, потому что нормализованная мантисса считается как M = 1 + F. Поэтому M = 1.75 | Не забыть прибавить 1, потому что нормализованная мантисса считается как M = 1 + F. Поэтому M = 1.75 | ||
В итоге по формуле <m>(-1)^1 * 1.75 * 2^4 = -1.75 * 16 = -28</m> | В итоге по формуле <m>(-1)^1 * 1.75 * 2^4 = -1.75 * 16 = -28</m> |
Версия 12:44, 20 декабря 2024
Задача зарезервирована: Urmat A 12:44, 20 декабря 2024 (UTC)
Вопрос: 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:], что пропускало единицу S, E, F
('1', '10000011', '11000000000000000000000')
Видно, что-то отрицательное,
Показатель 4
print(0b10000011-127)
#А вот снизу то что было. print(0b1000000000000000000000) … 2097152
1.2097152**4 = 2.1415713601250426
Надо разобраться, где-то накосячил.
int_value = int("0xC1E00000", 16) fraction_bits = int_value & 0x7FFFFF fraction_value = 0.0 for i in range(23): if (fraction_bits >> (22 - i)) & 0x01: # Проверяем i-й бит fraction_value += 1 / (2 ** (i + 1)) print (fraction_value) … 0.75 #Вот так правильно, потому что считается дробная часть.
Не забыть прибавить 1, потому что нормализованная мантисса считается как M = 1 + F. Поэтому M = 1.75 В итоге по формуле
Исходники — вопрос 22 на 21 странице книги «2004-gre-cs-practice-book.pdf»