Реклама:

Когда люди выполняют какие-либо арифметические действия, их не волнует вопрос, сколько десятичных разрядов занимает то или иное число. Физики, к примеру, могут вычислить, что во вселенной существует 1078 электронов, и их не волнует тот факт, что полная запись этого числа потребует 79 десятичных разрядов. Проблема нехватки бумаги для записи числа никогда не возникает.

С компьютерами дело обстоит иначе. В большинстве компьютеров количество доступной памяти для хранения чисел фиксировано и зависит от того, когда был выпущен этот компьютер. Если приложить усилия, программист сможет представлять числа в два, три и более раза большие, чем позволяет объем памяти, но это не меняет природы данной проблемы. Память компьютера ограничена, поэтому мы можем иметь дело только с такими числами, которые можно представить в фиксированном количестве разрядов. Такие числа называются числами конечной точности.

Рассмотрим ряд положительных целых чисел, которые можно записать тремя десятичными разрядами без десятичной точки и без знака. В этот ряд входит ровно 1000 чисел: ООО, 001, 002, 003,.., 999. При таком ограничении невозможно выразить определенные типы чисел. Сюда входят:

4- числа больше 999;

4- отрицательные числа;

♦ дроби;

♦ иррациональные числа;

♦ комплексные числа.

Одно из свойств набора всех целых чисел - замкнутость по отношению к операциям сложения, вычитания и умножения. Другими словами, для каждой пары целых чисел і и ] числа і + у, і - ] и і - тоже целые числа. Ряд целых чисел не замкнут относительно деления, поскольку существуют такие значения г и], для которых г/] не выражается в виде целого числа (например, 7/2 или 1/0).

Числа конечной точности не замкнуты относительно всех четырех операций. Вот примеры операций над трехразрядными десятичными числами:

♦ Слишком большое число:

600 + 600 = 1200.

♦ Отрицательное число:

003 - 005 = -2.

♦ Слишком большое число:

050 х 050 - 2500.

♦ Не целое число:

007 / 002 = 3,5.

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

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

Алгебра чисел конечной точности отличается от обычной алгебры. В качестве примера рассмотрим ассоциативный закон а + (Ь - с) = (а + Ь) - с.

Вычислим обе части выражения для а = 700, Ь = 400 ис = 300. В левой части сначала вычислим значение (Ь - с). Оно равно 100. Затем прибавим это число каи получим 800. Чтобы вычислить правую часть, сначала вычислим (а + Ь). Для 3-разрядных целых чисел получится переполнение. Результат будет зависеть от компьютера, но он окажется неравным 1100. Вычитание 300 из какого-то числа, отличного от 1100, не даст в результате 800. Ассоциативный закон не имеет силы. Важна очередность выполнения операций.

Другой пример - дистрибутивный закон:

ax(b-c) = axb-axc.

Подсчитаем обе части выражения для а = 5, й = 210ис = 195. В левой части 5 х 15 = 75. В правой части 75 не получается, поскольку результат выполнения операции ах b выходит за пределы ряда.

Исходя из этих примеров, кто-то может сделать вывод, что компьютеры совершенно непригодны для выполнения арифметических действий. Вывод, естественно, неверен, но эти примеры наглядно показывают, как важно понимать механизм работы компьютера и знать о его ограничениях.

Приложение А. Двоичные числа || Оглавление || Позиционные системы счисления