Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, сокращенный курс, 2 часа в неделю)



Урок 23
Хранение в памяти целых и вещественных чисел
§26. Особенности представления чисел в компьютере. §27. Хранение в памяти целых чисел. §29. Хранение в памяти вещественных чисел




Содержание урока

§26. Особенности представления чисел в компьютере

Предельные значения чисел

Различие между вещественными и целыми числами

Дискретность представления чисел

Программное повышение точности вычислений

Вопросы и задания

Задачи

§27. Хранение в памяти целых чисел
§29. Хранение в памяти вещественных чисел

§26. Особенности представления чисел в компьютере


Предельные значения чисел


На уроках математики вы никогда не обсуждали, как хранятся числа. Математика — это теоретическая наука, для которой совершенно не важно, записаны они на маленьком или большом листе бумаги, зафиксированы с помощью счётных палочек, счётов, или внутри полупроводниковой схемы. Поэтому число в математике может состоять из любого количества цифр, которое требуется в решаемой задаче.

В то же время инженеры, разрабатывающие компьютер, должны спроектировать реальное устройство из вполне определённого количества деталей. Поэтому число разрядов, отведённых для хранения каждого числа, ограничено, и точность вычислений тоже ограничена. Из-за этого при компьютерных расчётах могут возникать достаточно серьёзные проблемы. Например, сумма двух положительных чисел может получиться отрицательной, а выражение А + В может совпадать с А при ненулевом В. В этой главе мы рассмотрим важные особенности компьютерной арифметики, которые нужно учитывать при обработке данных. В первую очередь, они связаны с тем, как размещаются целые и вещественные числа в памяти компьютера.

Предельные значения чисел


Как вы уже поняли, числа, хранящиеся в компьютере, не могут быть сколь угодно большими и имеют некоторые предельные значения. Представим себе некоторое вычислительное устройство, которое работает с четырехразрядными неотрицательными целыми десятичными числами (рис. 4.1). Для вывода чисел используется четырёхразрядный индикатор, на котором можно отобразить числа от 0 (все разряды числа минимальны) до 9999 (все разряды максимальны) — рис. 4.2.

Рис. 4.1

Рис. 4.1


Рис. 4.2

Рис. 4.2

Вывести на такой индикатор число 10 000 невозможно: не хватает технического устройства для пятого разряда. Такая «аварийная» ситуация называется переполнением разрядной сетки или просто переполнением (англ, overflow — переполнение «сверху»).

Переполнение разрядной сетки — это ситуация, когда число, которое требуется сохранить, не умещается в имеющемся количестве разрядов вычислительного устройства.

В нашем примере переполнение возникает при значениях, больших 9999 = 104 - 1, где 4 — это количество разрядов. В общем случае, если в системе счисления с основанием В для записи числа используется К разрядов, максимальное допустимое число Стах вычисляется по аналогичной формуле 1

Сmax = BK - 1.


1 Докажите эту формулу самостоятельно, например, подсчитав количество всех возможных комбинаций значений цифр в К разрядах.



Именно эта формула для В = 2 неоднократно применялась в главе 2.

Подчеркнём, что переполнение никак не связано с системой счисления: оно вызвано ограниченным количеством разрядов устройства и не зависит от количества возможных значений в каждом из этих разрядов.

Рассмотрим теперь, что получится, если наше устройство будет работать не только с целыми, но и с дробными числами. Пусть, например, один из четырёх разрядов относится к целой части числа, а остальные три — к дробной (рис. 4.3). Конечно, эффект переполнения сохранится и здесь: максимально допустимое число равно 9,999. Кроме того, дробная часть числа тоже ограничена, поэтому любое число, имеющее более трёх цифр после запятой, не может быть представлено точно: младшие цифры придётся отбрасывать (или округлять).

Рис. 4.3

Рис. 4.3

Не все вещественные числа могут быть представлены в компьютере точно.

При ограниченном числе разрядов дробной части существует некоторое минимальное ненулевое значение Cmin, которое можно записать на данном индикаторе (в нашем примере это 0,001, рис. 4.4). В общем случае, если число записано в системе счисления с основанием В и для хранения дробной части числа используется F разрядов, имеем

Сmin = B-F.

Рис. 4.4

Рис. 4.4

Любое значение, меньшее чем Cmin, неотличимо от нуля. Такой эффект принято называть антипереполнением (англ. underflow — переполнение «снизу»).

Кроме того, два дробных числа, отличающиеся менее чем на Cmin, для компьютера неразличимы. Например, 1,3212 и 1,3214 на нашем индикаторе выглядят совершенно одинаково (рис. 4.5).

Рис. 4.5

Рис. 4.5

Дополнительная погрешность появляется при переводе дробных чисел из десятичной системы счисления в двоичную. При этом даже некоторые «круглые» числа (например, 0,2) в памяти компьютера представлены неточно, потому что в двоичной системе они записываются как бесконечные дроби и их приходится округлять до заданного числа разрядов.

Так как вещественные числа хранятся в памяти приближённо, сравнивать их (особенно если они являются результатами сложных расчётов) необходимо с большой осторожностью. Пусть при вычислениях на компьютере получили X =10-6 и Y = 106. Дробное значение X будет неточным, и произведение X • Y может незначительно отличаться от 1. Поэтому при сравнении вещественных чисел в компьютере условие «равно» использовать не рекомендуется. В таких случаях числа считаются равными, если их разность достаточно мала по модулю. В данном примере нужно проверять условие |1 - Х • Y| < ε, где ε — малая величина, которая задаёт нужную точность вычислений. К счастью, для большинства практических задач достаточно взять Е порядка 10-2... 10-4, а ошибка компьютерных расчётов обычно значительно меньше 2 (не более 10-7).


2 Тем не менее встречаются ситуации, когда вычислительные трудности все же возникают: классический пример — разность близких по значению десятичных дробей, отличающихся в последних значащих цифрах.



Введение разряда для знака числа не меняет сделанных выше выводов, только вместо нулевого минимального значения появляется отрицательное, которое зависит от разрядности (оно равно -9999 в первом из обсуждаемых примеров).

Следующая страница Различие между вещественными и целыми числами



Cкачать материалы урока







Наверх