1. Чем вызваны трудности, возникающие при представлении вещественных чисел в компьютере? Как они связаны с непрерывностью вещественных чисел в математике?
Трудности при представлении вещественных чисел в компьютере вызваны их непрерывностью в математике. Компьютеры работают с конечным числом разрядов и не могут представить бесконечные дробные или иррациональные числа точно. Это приводит к необходимости аппроксимации, что создаёт ошибки округления. Например, число π или 1/3 не могут быть представлены в компьютере с абсолютной точностью.
2. Объясните, как хранятся вещественные числа с фиксированной запятой. Почему этот метод не используется в современных компьютерах?
При хранении вещественных чисел с фиксированной запятой дробная и целая части числа записываются в определённое фиксированное количество разрядов. Это ограничивает диапазон представляемых чисел, делая сложной работу с очень большими или очень малыми числами. Современные компьютеры перешли к использованию плавающей запятой, так как этот метод обеспечивает гораздо больший диапазон и точность.
3. Что такое плавающая запятая? Из каких частей состоит число при кодировании с плавающей запятой?
Плавающая запятая — это способ представления вещественных чисел, при котором число записывается в виде мантиссы и порядка. Мантисса содержит значащие цифры числа, а порядок указывает, как сместить запятую для получения точного значения. Например, число 3.14 можно представить как 0.314 * 10¹.
4. Приведите примеры физических величин, которые обычно записывают в форме с плавающей запятой.
Скорость света (2.998 * 10⁸ м/с). Массу атома водорода (1.673 * 10⁻²⁷ кг). Расстояние до звезды (4.367 * 10¹³ км).
5. Почему метод представления чисел с плавающей запятой неоднозначен? Как изменится порядок, если запятую сместить на один разряд влево (вправо)?
Метод представления чисел с плавающей запятой неоднозначен, так как одно и то же значение можно записать по-разному, изменяя мантиссу и порядок. Например, число 123.45 можно записать как 1.2345 * 10² или 0.12345 * 10³. Если запятую сместить влево, порядок увеличится (123.45 → 1.2345 * 10²). Если вправо — порядок уменьшится (123.45 → 12345 * 10⁻²).
6. Что такое нормализованная форма записи числа?
Нормализованная форма записи числа — это представление, при котором мантисса остаётся в пределах от 1 до 10 (или от -1 до -10 для отрицательных чисел). Это стандартизирует формат чисел, делая их хранение и обработку в компьютере более эффективным.
7. Как требования нормализации связаны с точностью представления вещественных чисел?
Нормализация обеспечивает максимальную точность представления вещественных чисел. Это связано с тем, что в нормализованной форме значащая часть числа (мантисса) не содержит лишних ведущих нулей. В результате доступные разряды используются для хранения значащих цифр, что минимизирует потери точности.
8. Единственно ли нормализованное представление числа? Все ли числа имеют нормализованное представление?
Нормализованное представление числа не является единственным, но все числа могут быть приведены к нормализованной форме. Например, число 0.00123 можно записать как 1.23 * 10⁻³. Исключение составляют числа, равные нулю, для которых нормализованное представление не определено, поскольку порядок не может быть установлен.
9. Почему старший бит значащей части нормализованного двоичного числа всегда равен единице? Как этот факт используется на практике?
Старший бит значащей части нормализованного двоичного числа всегда равен единице, потому что в двоичной системе нормализованное число записывается с мантиссой в диапазоне от 1 (включительно) до 2 (исключительно). Этот факт используется для экономии памяти: старший бит не записывается явно, так как он всегда известен. Это называется "скрытый бит".
10. Какие числа сохраняются в памяти с нулевой значащей частью?
Числа с нулевой значащей частью в памяти соответствуют специальным значениям, таким как ноль или денормализованные числа. Денормализованные числа используются для представления значений, слишком малых для нормализованной формы, что расширяет диапазон представляемых чисел.
11. На что влияет разрядность значащей части и разрядность порядка?
Разрядность значащей части определяет точность представления числа, а разрядность порядка — диапазон возможных значений. Увеличение разрядности мантиссы уменьшает ошибки округления, а увеличение разрядности порядка позволяет представлять как очень большие, так и очень маленькие числа.
12. Почему задание разрядности для целых чисел однозначно определяет их свойства, а для вещественных — нет?
Для целых чисел разрядность однозначно определяет их свойства, так как она задаёт максимальное и минимальное значения. Для вещественных чисел разрядность определяет не только диапазон, но и точность, которая зависит от соотношения разрядности мантиссы и порядка. Разные комбинации этих параметров приводят к различным характеристикам представления вещественных чисел.
13. Что вы знаете о типах single, double и extended?
Типы single, double и extended представляют числа с плавающей запятой разной точности и диапазона.
Single — используется для хранения чисел одинарной точности (32 бита): 1 бит для знака, 8 бит для порядка, 23 бита для мантиссы (со «скрытой единицей»). Double — формат двойной точности (64 бита): 1 бит для знака, 11 бит для порядка, 52 бита для мантиссы. Extended — расширенный формат с большей точностью, обычно 80 бит: 1 бит для знака, 15 бит для порядка, 64 бита для мантиссы.
14. Как хранится порядок во всех рассмотренных форматах вещественных чисел? Почему не хранится знак порядка?
Порядок в вещественных числах хранится в формате со смещением (bias). Смещение добавляется к реальному значению порядка, чтобы все числа имели неотрицательное значение порядка. Знак порядка не хранится, так как его определяет смещение. Например, в формате single порядок смещён на 127, а в double — на 1023.
15. Сравните методы хранения отрицательных целых и вещественных чисел.
Отрицательные целые числа обычно хранятся в дополнительном коде, где старший бит определяет знак. В вещественных числах отрицательные значения определяются знаковым битом, но порядок и мантисса остаются без изменения, используя формат со смещением.
16. Как по двоичному представлению вещественного числа определить, положительно оно или отрицательно? Подходит ли этот метод для целых чисел?
В вещественных числах знак определяется первым (старшим) битом: 0 означает положительное число, 1 — отрицательное. Этот метод подходит и для целых чисел, если они хранятся в формате со знаком.
17. В каком из вещественных форматов не используется «скрытая единица» и почему?
В денормализованных числах (используемых для представления очень малых значений) «скрытая единица» не используется. Это связано с необходимостью расширения диапазона чисел за счёт уменьшения точности мантиссы.
18. Какие логические операции и с какой маской надо применить, чтобы в переменной типа single: а) выделить значащую часть, сбросив порядок и знаковый бит; б) восстановить в полученной знаковой части «скрытую единицу»?
Для переменной типа single: а) Чтобы выделить значащую часть, нужно сбросить порядок и знаковый бит: применить логическую операцию AND с маской 0x007FFFFF. б) Чтобы восстановить «скрытую единицу», нужно установить старший бит мантиссы в 1: применить логическую операцию OR с маской 0x00800000.
19. Как можно выделить смещённый порядок из числа типа single? Как получить истинное значение порядка?
Для выделения смещённого порядка из числа типа single нужно применить маску 0x7F800000 и выполнить побитовый сдвиг вправо на 23 позиции. Смещённый порядок равен извлечённому значению, а истинное значение порядка вычисляется вычитанием смещения (127 для single).
20. С помощью какой маски можно выделить знаковый бит числа, хранящегося в формате single?
Для выделения знакового бита числа в формате single используется маска 0x80000000. Побитовое AND с этой маской оставляет только знак числа: 0 для положительного и 1 для отрицательного.
21. Что такое NaN?
NaN (Not a Number) — это специальное значение в числах с плавающей запятой, представляющее результаты операций, не имеющих числового смысла. Примеры включают деление 0/0, извлечение корня из отрицательного числа и операции с участием NaN. В памяти NaN представляется как число с максимальным значением порядка и ненулевой мантиссой.
22. Чем различаются представление в памяти целого числа и равного ему вещественного с нулевой дробной частью (например, 12 и 12,0).
Целое число (например, 12) представляется в памяти как набор битов в формате дополнительного кода, занимающий фиксированное количество бит (например, 32 бита). Вещественное число (например, 12.0) представляется в формате с плавающей запятой:
Знаковый бит (0 для положительного числа). Смещённый порядок, рассчитанный как log2(12) (со смещением 127 для single). Мантисса, нормализованная с «скрытой единицей». Таким образом, даже при одинаковом значении числа их представления в памяти различаются по структуре.