Выполнение арифметических операций над числами, представленными с фиксированной запятой.

Фиксированная запятая

Оговоримся, что разрядная сетка автомобили имеет постоянное число разрядов — n.

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

|X| 1

Введём две характеристики чисел: точность представления и диапазон изменения.

Диапазон трансформации характеризуется теми пределами, в которых смогут пребывать числа, с которыми оперирует машина.

Хорошее от нуля самое малое число:

Так, диапазон чисел, с которыми трудится ЭВМ, имеется:

|X|направляться

2-n

Иными словами, числа, каковые выходят за диапазон трансформации, в ЭВМ не смогут быть представлены совершенно верно. В случае, если

|X| |X|min = 2-n,

то такое число воспринимается как нуль.

В случае, если: |X| |X|max = 1- 2-n,

то такое число воспринимается как вечно громадное. Этим двум случаям соответствуют понятия машинной бесконечности и машинного нуля.

При оптимальном округлении полная неточность:

Минимальная относительная неточность:

так как при громадном n

Большая относительная неточность:

Неточность представления числа зависит от величины способа округления и самого числа:

Увидим, что для малых чисел неточность может быть около громадной величины.

Плавающая запятая

В ЭВМ с плавающей запятой число представляется в виде:

X = ± Mx * q±p,

где: Mx — мантисса числа;

q — основание совокупности счисления;

p — порядок.

Разрядная сетка автомобили принимает следующий вид:

Это только условное изображение главных слогов в числе. Увидим, что в настоящей ЭВМ возможно принят каждый порядок размещения.

Пускай m разрядов отведено под изображение мантиссы, а k разрядов под изображение порядка. Тогда для бинарной совокупности и нормализованного вида числа:

q = 2;

0,1

Другими словами диапазон чисел:

Полная неточность представления числа в ЭВМ с плавающей запятой равна:

Так как

2-1

то минимальная относительная неточность:

а большая относительная неточность:

Видно, что относительная неточность в ЭВМ с плавающей запятой не зависит от порядка числа. Наряду с этим точность представления солидных и малых чисел изменяется незначительно.

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

Исполнение арифметических операций над числами, представленными с фиксированной запятой.

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

  • сложение
  • сдвиг
  • передача
  • преобразование кодов.

Сложение выполняется правильно сложения чисел в позиционных совокупностях счисления.

Другими словами эта операция выполняется поразрядно, а появляющийся в младших разрядах перенос направляется в старшие разряды.

Пример:

0,101101 1-ое слагаемое

+0,000101 2-ое слагаемое

________

0,101000 сумма

0,00101 перенос

________

0,100010 сумма

0,01 перенос

________

0,110010 сумма

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

Сдвиг

Различают два вида микрооперации сдвига:

  • логический сдвиг;
  • арифметический сдвиг;

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

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

Передача.

Эта микрооперация предполагает, что некий код (число) записывается в соответствующее устройство и вытесняет тот код, что в том месте был до передачи.

Различают два вида передач:

  • запись (с разрушением ранее записанной информации);
  • чтение (без разрушения).

Преобразование.

Функция, делаемая над передаваемыми числами, именуется преобразованием. Чаще вторых в арифметических базах разглядывают инвертирование кода. Это поразрядная микрооперация , которая выполняется над всеми разрядами в один момент.

Прямой код.

Это естественное и самоё привычное представление числа в следующем виде:

символ:

+ соответствует 0

— соответствует 1

В цифровых разрядах пишется модуль хорошего либо отрицательного числа.

[X]пк — обозначим так изображение числа X в прямом коде.

Разглядим диапазоны воображаемых чисел:

X+min = 0,000….0 — изображение хорошего нуля

X+max = 0,111….1 = 1 — 2-n

X-min = 1,111….1 = -(1-2-n)

X-max = 1,000….0 — изображение отрицательного нуля.

Так, нуль имеет неоднозначное изображение.

Замечания:

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

2. при исполнении операции умножения раздельно и независимо находятся модули произведений кодов, а символ находится как следствие операции сложения по модулю два:

3. [X]пк * [Y]пк = sign Z. |Z|

|Z| = |X|*|Y|

Фактически умножение выполняется с применением микроопераций сдвига и сложения.

4. подобно умножению выполняется операция деления с применением микроопераций сдвига и вычитания.

Благодаря последовательности неудобств в ЭВМ операции вычитания, сложения чисел с различными символами и деления в прямом коде фактически не выполняются.

Дополнительный код

Дополнительным именуется код, в котором для положительного числа в знаковом разряде пишется 0, в цифровых — модуль числа, а для отрицательного в знаковом разряде пишется 1, в цифровых — дополнение числа до единицы.

В случае, если некое X- = -0,x1x2…xn необходимо представить в дополнительном коде, то

где: 1 — 0,x1x2…xn = 0, Z1Z2…Zn

Диапазоны представленных чисел:

Х+ min = 0,0…0 — хороший нуль

Х+ max = 0,11…1 = 1-2-n — большое положительное число.

X- min = 1,11…1 = 2-2-n — минимальное отрицательное число

X- max = 1,0…0 — громаднейшее(по модулю) отрицательное число

Так, нуль имеет единственное представление.

В действительности, поскольку

X-X = [X+]дк + [X-]дк = 0, то в дополнительном коде: |X+| + 10 — |X-| = 10, в случае, если в разрядной сетке ЭВМ нет второго знакового разряда, то это переполнение теряется, и в знаковом разряде будет лишь нуль.

Серьёзная изюминка в получении дополнительного кода отрицательного числа пребывает в следующем:

Так, для записи дополнительного кода отрицательного числа нужно в знаковом разряде поставить единицу, проинвертировать все цифровые разряды числа и прибавить единицу в младший разряд. Это кроме этого правило перевода из дополнительного кода в прямой код.

Разглядим на примерах исполнение операции сложения двух чисел с различными символами.

Вероятны следующие случаи:

1. X+ + Y+ = S+

2. X+ + Y- = S+

3. X+ + Y- = S-

4. X- + Y- = S-

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

Положим n = 3, 1 — знаковый разряд и 2 — цифровых.

1. X+ = 0,10

2. Y+ = 0,01

В дополнительном коде

Другими словами, нет никаких изюминок.

3. X+ = 0,10

4. Y- = -0,01

В дополнительном коде

Переполнение теряется и получается верный итог.

5. X+ = 0,01

6. Y- = -0,11

В дополнительном коде

7. X- = -0,10

8. Y- = -0,01

В дополнительном коде

Появляющееся переполнение теряется и неспециализированный итог отрицательный.

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

Обратный код Обратным именуется код, для которого в знаковом разряде положительного числа пишется 0, в цифровых — модуль числа, а для отрицательного — в знаковом разряде пишется единица, в цифровых — инвертированные разряды исходного числа.
Определим диапазоны чисел: X+ min = 0,00…0 — хороший нуль. X+ max = 0,111…1 = 1 — 2-n X- min = 1,11…1 0 = 2 — 2-n+1 X- max = 1,00…00 = 1 В обратном коде имеется два изображения нуля: Хороший нуль: [X]ок = 0,0…0 и отрицательный нуль: [X]ок = 1,11…11 Наряду с этим X — X = [X+]ок + [X-]ок = |X+| + 10 — (10)-n — |X-| = +10 — (10)-n = 0 Другими словами, единица переноса в знаковом разряде эквивалентна единице младшего разряда. Исходя из этого при исполнении операции сложения-вычитания нужно появляющийся перенос циклически прибавлять в младший разряд частичного результата. Разглядим прошлые четыре случая, не забывая о том, что сумма двух слагаемых по модулю должна быть меньше единицы. 1. X+ = 0,10 2. Y- = -0,01 3. X+ + Y- = S+ В обратном коде:
Появляющееся переполнение должно быть добавлено к младшему разряду частичной суммы. 4. X+ = 0,10 5. Y+ = +0,01 6. X+ + Y+ = S+ В обратном коде:
Нет никаких изюминок если сравнивать с прямым кодом. 7. X+ = 0,01 8. Y- = -0,10 9. X+ + Y- = S- В обратном коде:
Другими словами, не появляется циклического переноса. 10. X- = -0,01 11. Y- = -0,10 12. X- + Y- = S- В обратном коде:
Появляется переполнение знакового разряда, которое добавляется в младший разряд частичной суммы. Увидим, что получение обратного кода несложнее, чем дополнительного. Это поразрядно делаемая микрооперация инверсии кода. Как станет светло из схемного ответа, эта микрооперация выполняется так же скоро, как и передача кода. Потому, что результатом операции есть совокупность результатов по всем разрядам, то данную операцию возможно делать в один момент над всеми цифровыми разрядами числа.

Замечание.

Для получения произведения с точностью не ниже, чем 2-n необходимо иметь лишь n– разрядную сетку.

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

Но, как мы знаем, что числа смогут быть представлены в разных кодах(это, в первую очередь, отрицательные числа).

Мы уже знаем, как выполняется операция суммирования чисел (среди них и с различными символами).

Но микрооперация сдвига имеет кое-какие особенности:

Сдвиг вправо:

Сдвиг влево вероятен лишь , если перемещённое число меньше единицы по модулю:

Исходные числа:

В случае, если чисто формально сделать преобразование выражения некоего числа, записанного в прямом коде до исполнения сдвига и по окончании исполнения микрооперации сдвига, в обратный модифицированный код, то:

Другими словами при сдвиге вправо отрицательного числа старшие разряды заполняются единицами. При сдвиге влево в младшие разряды и старшие пишутся единицы.

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

Содержание

  • Деление в прямом коде со автоматическим восстановлением и сдвигом остатка
  • Деление в прямом коде со автоматическим восстановлением и сдвигом делителя остатка
  • Деление в дополнительном (обратном) кодах со автоматическим восстановлением и сдвигом остатка
  • Арифметические операции над числами, представленными с плавающей запятой

o Умножение:

o Деление

o вычитание и Сложение

  • Десятичные бинарно-кодированные совокупности.

Реализация операции деления в ЭВМ в бинарной совокупности счисления выполняется несложнее, чем в десятичной. Это разъясняется тем, что при определении каждой цифры частного необходимо сделать лишь одну пробу.

В случае, если числа X и Y заданы в прямом коде, и они представлены с фиксированной запятой, то для исполнения деления употребляются два главных метода:

  • со автоматическим восстановлением и сдвигом остатка ;
  • со автоматическим восстановлением и сдвигом делителя остатка.

Пускай: [X]пк = sign X. x1x2..xn

[Y]пк = sign Y. y1y2..yn

[Z]пк = [X]пк/[Y]пк = sign Z. z1z2..zn

X и Y должны быть такими, дабы:

|Z| 1 (другими словами фиксированная запятая )

Деление

По большей части подобно умножению:

X = 2mx * направляться X.x1x2…xn

Y = 2my * sign Y.y1y2…yn

Z = X/Y = 2mx–my * sign Z.z1z2…zn

Порядок исполнения операции следующий:

  1. Находится по известным правилам символ частного.
  2. Порядок частного находится как разность порядков делимого и делителя.
  3. Цифры частного находятся так:

сначала находится целая часть мантиссы, другими словами

В случае, если , в случае, если , то z0 = 0.

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

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

При делении, равно как и при умножении, допустимо получение кода машинного нуля и кода бесконечности.

вычитание и Сложение

Обе операции выполняются по сходным методам.

Операция выполняется следующим образом:

  1. Находится разность порядков:
  2. Производится выравнивание порядков, наряду с этим в случае, если разность порядков хороша, то в качестве порядка результата берётся mx, а мантисса My сдвигается вправо на |mx– my| разрядов; еcли разрядность порядков отрицательна, то денормализуется мантисса Mx.
  3. Производится алгебраическое суммирование мантисс слагаемых.
  4. Выполняется нормализация влево либо вправо на соответствующее число разрядов с нужным исправлением порядка.

Пример:

порядок мантисса

[mx]пк = 0.11 [Mx]пк = 0.1010

[my]пк = 0.10 [My]пк = 0.1110

Находим разность порядков:

+00.11 = [mx]мок

11.01 = [-my]мок

1| 00.00

|_ _-1

00.01 = — разность порядков.

Так как m x my, то:

+00.1010 = [Mx]мок

00.0111 = [My]мок * 2-1

[Z]мок = 01.0001 – переполнение

2-1 * [Z]мок = 00.1000 – нормализация

max(mx,my) = [mx]мок = +00.11

[1]мок = 00.01

[mx]мок = 01.00 – переполнение порядка

Z = .

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

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

В качестве результата берётся предельное количество.

Пример:

[mx]ок = 0.101 [Mx]ок = 0.10111101

[my]ок = 1.001 [My]ок = 0.10000001

Разность порядков:

+00.101 = [mx]мок

00.110 = [-my]мок

– другими словами это число 11 10 , а в разрядной сетке мантиссы лишь 8 разрядов.

Исходя из этого операция блокируется, а результатом есть число:

[mx] = 0.101 [Mx] = 0.10111101

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

Пример:

[mx]ок = 1.010 [Mx]ок = 1.10101011

[my]ок = 0.110 [My]ок = 1.11111111

Разность порядков:

+ 11.010 = [mx]мок

11.001 = [-my]мок

_______

+1| 10.011

_______

10.100 =

Другими словами разность порядков меньше (-8).

Операция блокируется, а результатом будет число:

[my]ок = 0.110 [My]ок = 1.11111111

Фиксированная запятая

Оговоримся, что разрядная сетка автомобили имеет постоянное число разрядов — n.

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

|X| 1

Введём две характеристики чисел: точность представления и диапазон изменения.

Диапазон трансформации характеризуется теми пределами, в которых смогут пребывать числа, с которыми оперирует машина.

Хорошее от нуля самое малое число:

Так, диапазон чисел, с которыми трудится ЭВМ, имеется:

|X|min

2-n

Иными словами, числа, каковые выходят за диапазон трансформации, в ЭВМ не смогут быть представлены совершенно верно. В случае, если

|X| |X|min = 2-n,

то такое число воспринимается как нуль.

В случае, если: |X| |X|max = 1- 2-n,

то такое число воспринимается как вечно громадное. Этим двум случаям соответствуют понятия машинной бесконечности и машинного нуля.

При оптимальном округлении безотносительная неточность:

Минимальная относительная неточность:

так как при громадном n

Большая относительная неточность:

Неточность представления числа зависит от величины способа округления и самого числа:

Увидим, что для малых чисел неточность может быть около громадной величины.

Плавающая запятая

В ЭВМ с плавающей запятой число представляется в виде:

X = ± Mx * q±p,

где: Mx — мантисса числа;

q — основание совокупности счисления;

p — порядок.

Разрядная сетка автомобили принимает следующий вид:

Это только условное изображение главных слогов в числе. Увидим, что в настоящей ЭВМ возможно принят каждый порядок размещения.

Пускай m разрядов отведено под изображение мантиссы, а k разрядов под изображение порядка. Тогда для бинарной совокупности и нормализованного вида числа:

q = 2;

0,1

Другими словами диапазон чисел:

Полная неточность представления числа в ЭВМ с плавающей запятой равна:

Так как

2-1

то минимальная относительная неточность:

а большая относительная неточность:

Видно, что относительная неточность в ЭВМ с плавающей запятой не зависит от порядка числа. Наряду с этим точность представления солидных и малых чисел изменяется незначительно.

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

Исполнение арифметических операций над числами, представленными с фиксированной запятой.

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

  • сложение
  • сдвиг
  • передача
  • преобразование кодов.

Сложение выполняется правильно сложения чисел в позиционных совокупностях счисления.

Другими словами эта операция выполняется поразрядно, а появляющийся в младших разрядах перенос направляется в старшие разряды.

Пример:

0,101101 1-ое слагаемое

+0,000101 2-ое слагаемое

________

0,101000 сумма

0,00101 перенос

________

0,100010 сумма

0,01 перенос

________

0,110010 сумма

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

Сдвиг

Различают два вида микрооперации сдвига:

  • логический сдвиг;
  • арифметический сдвиг;

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

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

Передача.

Эта микрооперация предполагает, что некий код (число) записывается в соответствующее устройство и вытесняет тот код, что в том месте был до передачи.

Различают два вида передач:

  • запись (с разрушением ранее записанной информации);
  • чтение (без разрушения).

Преобразование.

Функция, делаемая над передаваемыми числами, именуется преобразованием. Чаще вторых в арифметических базах разглядывают инвертирование кода. Это поразрядная микрооперация , которая выполняется над всеми разрядами в один момент.

Лекция 4: Числа с плавающей запятой


Интересные записи:

Понравилась статья? Поделиться с друзьями: