Электронный учебник

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


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

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

 

Вывести на такой индикатор число 10 000 невозможно: не хватает технического устройства для пятого разряда. Такая «аварийная» ситуация называется переполнением разрядной сетки или просто переполнением (англ. overflow — переполнение «сверху»).
Переполнение разрядной сетки— это ситуация, когда число, которое требуется сохранить, не умещается в имеющемся количестве разрядов вычислительного устройства.
В нашем примере переполнение возникает при значениях, больших 9999 = 104 - 1, где 4 — это количество разрядов. В общем случае, если в системе счисления с основанием  В для записи числа используется К разрядов, максимальное допустимое число Сmax вычисляется по аналогичной формуле1

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

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

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


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


При ограниченном числе разрядов
дробной части существует некоторое минимальное ненулевое значение Cmin, которое можно записать на данном индикаторе (в нашем примере это 0,001,
рис. 4.4). В общем случае, если число записано в системе счисления с основанием В и для хранения дробной части числа используется F разрядов, имеем
Cmin = B-F.
Любое значение, меньшее чем Cmin, неотличимо от нуля. Такой эффект принято называть анти переполнением (англ. underflow — переполнение «снизу»).

Кроме того, два дробных числа, отличающиеся менее чем на Cmin , для компьютера неразличимы. Например, 1,3212 и 1,3214 на нашем индикаторе выглядят совершенно одинаково (рис. 4.5).
Дополнительная погрешность появляется при переводе дробных чисел из десятичной системы
счисления в двоичную. При этом даже некоторые «круглые» числа (например, 0,2) в памяти компьютера представлены неточно, потому что в двоичной системе они записываются как бесконечные дроби и их приходится округлять до заданного числа разрядов.
Так как вещественные числа хранятся в памяти приближённо, сравнивать их (особенно если они являются результатами сложных расчётов) необходимо с большой осторожностью. Пусть при вычислениях на компьютере получили X=10-6 и У = 106. Дробное значение X будет неточным, и произведение X  * У может незначительно отличаться от 1. Поэтому при сравнении вещественных чисел в компьютере условие «равно» использовать не рекомендуется. В таких случаях числа считаются равными, если
их разность достаточно мала по модулю. В данном примере нужно проверять условие |1-X-Y|<е, где е — малая величина, которая задаёт нужную точность вычислений. К счастью, для большинства практических задач достаточно взять е порядка 10-2... 10-4, а ошибка компьютерных расчётов обычно значительно меньше1 (не более 10-7).
Введение разряда для знака числа не меняет сделанных выше выводов, только вместо нулевого минимального значения появляется отрицательное, которое зависит от разрядности (оно равно -9999 в первом из обсуждаемых примеров).
Различие между  вещественными и целыми числами
Существуют величины, которые по своей природе могут принимать только целые значения, например счётчики повторений каких-то действий, количество людей или предметов, координаты пикселей на экране и т. п. Кроме того, как показано в главе 2, кодирование нечисловых видов данных (текста, изображений, звука) сводится именно к целым числам.
Чтобы сразу исключить все возможные проблемы, связанные с неточностью представления в памяти вещественных чисел, целочисленные данные кодируются в компьютерах особым образом.


Целые и вещественные числа в компьютере хранятся и  обрабатываются по - разному.


Операции с целыми числами, как правило, выполняются значительно быстрее, чем с вещественными. Не случайно в ядре современных процессоров реализованы только целочисленные арифметические действия, а для вещественной арифметики используется специализированный встроенный блок — математический сопроцессор.
Кроме того, использование целых типов данных позволяет экономить компьютерную память. Например, целые числа в интервале от 0 до 255 в языке Паскаль можно хранить в перемен -
1Тем не менее встречаются ситуации, когда вычислительные трудности все же возникают: классический пример — разность близких по значению десятичных дробей, отличающихся в последних значащих цифрах.

ных типа byte, которые занимают всего один байт в памяти. В то же время самое «короткое» вещественное число (типа single) требует четырёх байтов памяти.
Наконец, только для целых чисел определены операции деления нацело и нахождения остатка. В некоторых задачах они удобнее, чем простое деление с получением дробного (к тому же не совсем точного) результата: например, без них не обойтись при вычислении суммы цифр какого-то числа.
Таким образом, для всех величин, которые не могут иметь дробных значений, нужно использовать целочисленные типы данных.
Дискретность представления чисел
Из § 7 вы знаете, что существует непрерывное и дискретное представление информации. Их принципиальное различие состоит в том, что дискретная величина может принимать конечное количество различных значений в заданном интервале, а непрерывная имеет бесконечно много возможных значений. Для нашего обсуждения важно, что:

*целые числа дискретны;

*вещественные( действительные, дробные) числа непрерывны;

*современный компьютер работает только с дискретными данными.

Таким образом, для хранения вещественных чисел в памяти компьютера нужно выполнить дискретизацию — записать непрерывную величину в дискретной форме. При этом может происходить искажение данных, поэтому большинство трудностей в компьютерной арифметике {антипереполнение, приближённость представления дробной части и др.) связано именно с кодированием дробных чисел.
Программное повышение точности вычислений
Современные модели процессоров Intel «умеют» обрабатывать 8-, 16-, 32- и 64-разрядные двоичные целые числа, а также (в математическом сопроцессоре) 32-, 64- и 80-разрядные вещественные числа. Для большинства
практических задач такой разрядности вполне достаточно. Если для каких-либо особо точных расчетов требуется повысить разрядность вычислений, это можно сделать программно. Например, можно считать, что четыре последовательно хранящихся целых 64-разрядных числа — это единое «длинное» число, и написать программу обработки таких «удлинённых» чисел. Очень удобно хранить числа в виде последовательности десятичных цифр1, правда, программы, выполняющие обработку таких чисел, получаются сложными и медленными.
Использование этих и других программных методов позволяет увеличить разрядность обрабатываемых чисел по сравнению с аппаратной разрядностью компьютера. Однако ограничение разрядности (и связанный с ним эффект переполнения) все равно остаётся: в программу заложено конкретное число разрядов, да и объём памяти компьютера конечен.

Вопросы и задания
1. Чем отличается компьютерная арифметика от «обычной»? Почему?
2. Почему диапазон чисел в компьютере ограничен? Связано ли это
с двоичностью компьютерной арифметики?
3. Что такое переполнение разрядной сетки?
4. Какие проблемы появляются при ограниченном числе разрядов
в дробной части?
*6.. Может ли антипереполнение сделать невозможными дальнейшие вычисления?
7. Сколько битов информации несет знаковый разряд?

8.Приведите примеры величин , которые по своему смыслу могут иметь только целые значения.

9.Какая математическая операция между двумя целыми числами может дать в результате нецелое число?

10.Чем различается деление для целых и вещественных чисел?

11.Какие преимущества дает разделение в компьютере целых и вещественных (дробных) чисел?

12.Вспомните определение дискретных и непрерывных величин. Какие множества чисел в математике дискретны, а какие – нет? Ответ обоснуйте.

13.Объясните, почему ограниченность разрядов дробной части приводит к нарушению свойства непрерывности.

 

1Такие задачи часто даются на школьных олимпиадах по информатике; для них даже придумано специальное название : «длинная» арифметика.

 

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


Подготовьте сообщение
а) «Проблемы вычислений с вещественными данными»
б) «Длинная арифметика»




Block title

Вход на сайт

Поиск

Календарь

«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Архив записей

Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0