Чем отличается компьютерная арифметика от обычной почему

Обновлено: 06.07.2024


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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вопрос по информатике:

Чем отличается компьютерная арифметика от обычной? Примеры

  • 16.09.2018 20:59
  • Информатика
  • remove_red_eye 4820
  • thumb_up 43
Ответы и объяснения 1

Если речь о результатах, то в компьютерной арифметике числа представляются в двоичном коде, а точность их представления обычно ограничена разрядностью процессора. Для проведения расчетов с неограниченной точностью используются специальные алгоритмы с представлением чисел в виде символьных строк.
При использовании двоичной арифметики приходится сталкиваться с тем, что большинство нецелых чисел невозможно точно представить в двоичной системе, как нельзя, например, в десятичной системе точно представить в виде десятичной дроби число 1/3 = 0.333.
Рассмотрим пример. Если в простых дробях (1/3) х 3 = 1, то в десятичных 0.3333 х 3 = 0.9999.
В двоичной машинной арифметике происходит аналогичная ситуация. Но если человек сознает, что результат 0.9999. - та же единица, то компьютер этого не понимает. В результате в компьютерной арифметике (1 / 3) х 3 не равняется единице.
Еще пример. Пусть нам надо вычислить значение функции в точках от -2π до 2π с шагом π/6. Человек будет использовать значения -2π, -11π/6, -10π/6 и т.д. пока не придет к точке 2π. Компьютер (в арифметике с обычной точностью) вычислит значение -2π как -6.283185, а шаг представит значением 0.5235988. Это приведет к тому, что когда мы придем к нулю, то получим значение аргумента -9.536743х10⁻⁷, а в конечной точке получим аргумент 6.283184, который по абсолютной величине отличается от начального на единицу в младшей цифре, т.е. для компьютера при таком последовательном счете |-2π| ≠ 2π.
Третий пример. отрицательные целые числа представляются в компьютере в дополнительном коде, когда старший разряд является знаковым: 0 - это плюс, 1 - это минус.
Пусть мы прибавляем к 127 единицу в арифметике целых чисел, которым в двоичном представлении отведен один байт:
1111111₂ + 1₂ = 10000000₂ - тут все понятно, единичка перешла в старший, восьмой разряд. Но ведь он ЗНАКОВЫЙ! И вместо двоичного эквивалента 128 в компьютерной арифметике мы получаем отрицательное число! Причем, что самое интересное, из соображений эффективности эта ситуация обычно аппаратно не контролируется и в результате программы могут вести себя очень странно.

Знаете ответ? Поделитесь им!

Как написать хороший ответ?

Чтобы добавить хороший ответ необходимо:

  • Отвечать достоверно на те вопросы, на которые знаете правильный ответ;
  • Писать подробно, чтобы ответ был исчерпывающий и не побуждал на дополнительные вопросы к нему;
  • Писать без грамматических, орфографических и пунктуационных ошибок.

Этого делать не стоит:

  • Копировать ответы со сторонних ресурсов. Хорошо ценятся уникальные и личные объяснения;
  • Отвечать не по сути: «Подумай сам(а)», «Легкотня», «Не знаю» и так далее;
  • Использовать мат - это неуважительно по отношению к пользователям;
  • Писать в ВЕРХНЕМ РЕГИСТРЕ.
Есть сомнения?

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

Трудности с домашними заданиями? Не стесняйтесь попросить о помощи - смело задавайте вопросы!

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

Если речь о результатах, то в компьютерной арифметике числа представляются в двоичном коде, а точность их представления обычно ограничена разрядностью процессора. Для проведения расчетов с неограниченной точностью используются специальные алгоритмы с представлением чисел в виде символьных строк.
При использовании двоичной арифметики приходится сталкиваться с тем, что большинство нецелых чисел невозможно точно представить в двоичной системе, как нельзя, например, в десятичной системе точно представить в виде десятичной дроби число 1/3 = 0.333.
Рассмотрим пример. Если в простых дробях (1/3) х 3 = 1, то в десятичных 0.3333 х 3 = 0.9999.
В двоичной машинной арифметике происходит аналогичная ситуация. Но если человек сознает, что результат 0.9999. - та же единица, то компьютер этого не понимает. В результате в компьютерной арифметике (1 / 3) х 3 не равняется единице.
Еще пример. Пусть нам надо вычислить значение функции в точках от -2π до 2π с шагом π/6. Человек будет использовать значения -2π, -11π/6, -10π/6 и т.д. пока не придет к точке 2π. Компьютер (в арифметике с обычной точностью) вычислит значение -2π как -6.283185, а шаг представит значением 0.5235988. Это приведет к тому, что когда мы придем к нулю, то получим значение аргумента -9.536743х10⁻⁷, а в конечной точке получим аргумент 6.283184, который по абсолютной величине отличается от начального на единицу в младшей цифре, т.е. для компьютера при таком последовательном счете |-2π| ≠ 2π.
Третий пример. отрицательные целые числа представляются в компьютере в дополнительном коде, когда старший разряд является знаковым: 0 - это плюс, 1 - это минус.
Пусть мы прибавляем к 127 единицу в арифметике целых чисел, которым в двоичном представлении отведен один байт:
1111111₂ + 1₂ = 10000000₂ - тут все понятно, единичка перешла в старший, восьмой разряд. Но ведь он ЗНАКОВЫЙ! И вместо двоичного эквивалента 128 в компьютерной арифметике мы получаем отрицательное число! Причем, что самое интересное, из соображений эффективности эта ситуация обычно аппаратно не контролируется и в результате программы могут вести себя очень странно.

Вещественные числа представляются в следующей стандартной форме (форма с плавающей точкой):


здесь х — вещественное число, b — основание системы счисления (обычно используются основания 2, 8 и 16), с называется характеристикой, т> мантиссой (она определяет дробную часть числа), а (±) обозначает знак числа х. Мантисса числа х ^ 0 удовлетворяет условию


что обеспечивает единственность представления (1.1). Любое вещественное число можно представить в форме с плавающей точкой, и это может быть сделано в любой системе счисления с основанием b > 0. Однако некоторые вещественные числа (например, иррациональные) невозможно записать в оперативную память компьютера точно. Все числа, которые могут быть помещены в оперативную память, представляются в определенном виде. При этом их характеристики ограничены: ст 4 , тогда характеристика с, согласно (1.1), равна 4 (100 в двоичной форме). Дробная часть числа представляется в виде


тогда коэффициенты ап равны

Для простоты числа, которые могут быть помещены в оперативную память, мы будем называть машинными числами, и они образуют конечное подмножество множества вещественных чисел. Для описания машинных чисел мы ввели параметры b, стп, ср и ky но использовать эти параметры на практике не очень удобно. Обычно для описания машинных чисел вводится другой набор параметров: b, 8q, S, и 8оо. Эти параметры, как и предыдущие, зависят от конкретного компьютера и определяются следующим образом:


Эти параметры имеют следующие значения: 8оо — максимальное машинное число, 8о — минимальное машинное число и есть минимальное расстояние между двумя машинными числами на интервале от 1 до Ь. Параметр ej также называют относительной ошибкой определения единицы, так как все числа вида 1 + х из интервала [1, 1 + Sj] заменяются машинным числом 1 с ошибкой, не превосходящей et. Следовательно, интервалы (-°°, -Soo), (-ео> 0), (0, 8q), (1 - 8j/b, 1), (1, 1 + 8t) и (Coo, °°) не содержат машинных чисел. Наряду со стандартной точностью существует возможность более точного представления машинных чисел. Это можно осуществить, увеличив число цифр в мантиссе и расширив область допустимых значений характеристик. Тогда машинные числа с повышенной точностью будут определяться некоторыми параметрами


Например, определяющие параметры для PC представлены в табл. 1.1.

Определяющие параметры для PC

Если число х е [-8оо, ?«>], то оно заменяется машинным числом хт. В процессе такой замены используется какой- нибудь способ приближения (усечение или округление) и в качестве хт выбирается ближайшее к х число. В результате такой замены возникает ошибках — хт. Для е0 эта ошибка оценивается величиной 8j|x|, т.е. х - хт тогда хт может принимать одно из двух значений: 0 или 80, и понятно, что в обоих случаях х - хт ].

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


Формулы (1.3) имеют следующий смысл: машинный результат арифметической операции есть ближайшее к точному результату машинное число. Машинный результат также зависит от типа операции и чисел а и Ь. Например, если точный результат лежит вне итервала допустимых в компьютере чисел (результат не принадлежит [-?оо, ?оо]), то мы сталкиваемся с ситуацией, называемой переполнением порядка. Эту ситуацию компьютер трактует как фатальную ошибку, и дальнейшие вычисления прекращаются. В правильно работающей программе такие ситуации должны быть исключены. Если абсолютное значение точного результата меньше чем ?q, то возникает ситуация, называемая исчезновением порядка, и хотя это не является фатальной ошибкой такая ситуация также нежелательна.

Объединяя выражения (1.2) и (1.3), мы получим формулы для моделирования ошибок арифметических операций


Эти формулы приводят к следующей оценке для ошибки, возникающей при выполнении операций с плавающей точкой:

Читайте также: