Элективный курс для предпрофильной подготовки девятиклассников «Машинная арифметика»



бет7/7
Дата28.06.2016
өлшемі433.5 Kb.
#162824
түріЭлективный курс
1   2   3   4   5   6   7

Вещественные числа


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

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



Число A10 называется нормализованным, если оно представлено в виде:



где M10 – мантисса, десятичная правильная дробь, то есть 0,1 M10 <1; P10 – порядок, целое десятичное число.

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



29710 = 0,297*103

M10 = 0,297

P10 = 3

0,03110 = 0,31*10-1

M10 = 0,31

P10 = -1

-34,176 = -0,34176*102

M10 = -0,34176

P10 = 2

Упражнение 24. Приведите к нормализованному виду следующие числа, не переводя их в десятичную систему счисления: -0,00000101112, 98765,ABC16.

Решение.






Упражнение 25. Запишите в естественной форме следующие нормализованные числа: , ,

Решение.






В ЭВМ арифметические устройства работают с нормализованными числами, но не с десятичными, а с двоичными.

Для вещественных чисел применяется формат с плавающей точкой. Значащие цифры числа находятся в поле мантиссы; поле порядка показывает фактическое положение двоичной запятой в разрядах мантиссы, а бит знака определяет знак числа.

Мантисса, называемая также «дробью» F (Fraction), представлена в прямом коде. Порядок E (Exponent) дается в смещенной форме: он равен истинному порядку, увеличенному на значение смещения. Значение смещения для трех разных форматов равно 127 (8 бит), 1023 (10 бит) и 16383 (15 бит). Задание порядка в форме со смещением упрощает операцию сравнения чисел с плавающей точкой, превращая ее в операцию сравнения целых чисел. Смещенный порядок называется также «характеристикой», ее можно считать целым положительным и беззнаковым числом.

Значение числа равно:

(-1)s*2E-смещение*F0,F1F2...Fn, F0=1

где n для разных форматов равно 23, 52, или 63.





S

Exponent

Fraction

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

Подробные описания вещественных форматов смотри в конце данной разработки.



Упражнение 26. Представим десятичное число -247,375 в вещественных форматах. Двоичный код его равен -11110111,0112 и истинный порядок получается +710=1112.Смещенный порядок в трех вещественных форматах равен: 13410=100001102, 103010=100000001102 и 1639010=1000000000001102.




Знак

Порядок

Мантисса

Короткое вещественное

1

10000110

11101110110...0

Длинное вещественное

1

10000000110

11101110110...0

Временное вещественное

1

100000000000110

111101110110...0

Упражнение 27. Найдите соответствие между машинными вещественными типами и типами данных Паскаля. Ответ: Короткое вещественное – Single, длинное вещественное – Double, временное вещественное – Extended.

Упражнение 28. Значение переменной A представлено в формате с плавающей точкой в шестнадцатеричной системе счисления A=C2F2000016. Тип переменной A – single для языка программирования Паскаль. Найти десятичной значение числа A.

Решение.

Преобразуем шестнадцатеричное представление в двоичное. Вычленим из представления знак, порядок и мантиссу. A=C2F2000016=110000101111001000000000000000002.

Знак числа – старший бит – 1. Следовательно, искомое число отрицательное.

Порядок числа в памяти компьютера хранится в прямом коде со смещением. Найдем его: . Найдем реальный порядок, от порядка со смещением отнимем величину смещения 12710, .Следовательно, знак «двоичной» запятой в мантиссе нужно сместить вправо на 6 позиций.

Вспомним, что первый бит мантиссы – неявный, поэтому реальная мантисса имеет вид .

Совмещаем знак, мантиссу и порядок: .

Упражнение 29. Значение переменной A представлено в формате с плавающей точкой в шестнадцатеричной системе счисления A=430F000016. Тип переменной A – single для языка программирования Паскаль. Найти десятичной значение числа A. Ответ: +143,010.

Упражнение 30. Значение переменной A представлено в формате с плавающей точкой в шестнадцатеричной системе счисления A=С244000016. Тип переменной A – single для языка программирования Паскаль. Найти десятичной значение числа A. Ответ: -49,010.

Вещественная арифметика


Пусть , – два нормализованных двоичных числа, и (в противном случае мы можем просто поменять их местами). Результатом их сложения или вычитания будет являться следующее выражение: .

Порядок вычислений при этом таков:



  1. Порядки чисел a и b выравниваются по большему из них (в нашем случае это qa). Для этого мантисса числа b сдвигается на qa-qb разрядов вправо(часть значащих цифр при этом могут оказаться утерянными), а его порядок становится равным qa.

  2. Выполняется операция сложения (вычитания) над мантиссами с округлением по значению n+1-ой значащей цифры результата.

  3. Мантисса результата должна быть нормализована (получившийся после нормализации порядок может отличаться от qa как в меньшую, так и в большую сторону).

Все последующие упражнения будем выполнять в двоичной системе счисления без перевода в машинное представление!

Упражнение 31. Сложите два числа с плавающей запятой в двоичной системе счисления: и .

Решение.


Перед сложением необходимо выровнять порядки – меньший порядок «приводится» к большему. В данном случае второе слагаемое приводится к виду: . После чего выполняем сложение:

+0,00000000111×10101







0,10010000000×10101







0,10010000111×10101







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

Упражнение 32. Продумайте, какие ошибки могут возникнуть при вычислении по данному алгоритму. Приведите примеры.

Ответ.


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

  2. Потеря крайней справа значащей цифры результата при сложении или вычитании мантисс.

  3. Выход за границу допустимого диапазона значений того или иного вещественного типа при нормализации результата.

Рассмотрим теперь умножение и деление нормализованных чисел a и b в машинной арифметике (с ограниченным числом разрядов):

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



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

  2. Порядки при умножении складываются, а при делении вычитаются.

  3. При необходимости мантисса результата нормализуется.

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

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

Решение.


Складываем порядки этих чисел: 10111=01.

Перемножаем мантиссы:



×0,1001







0,111







0,0111111







В результате получили число: . Приведем мантиссу в нормализованный вид: .

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



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

Решение.


Найдем порядок результата: 101-(-11)=101+11=1000.

Делим мантиссы (столбиком!): . Мантисса получилась нормализованной, но(!) периодической. Что же делать?

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

Если под мантиссу отведено n бит и n+1 значащая цифра двоичной нормализованной мантиссы равна 0, то цифры начиная с n+1-ой просто отбрасываются, если же n+1-ая цифра равна единице, то к целому числу, составленных из n значащих цифр мантиссы, прибавляется единица.



Упражнение 35. Найдите значение мантиссы числа a=0,110 при двоичной нормализации для различных значений n (разрядности мантиссы).

Решение.


Пусть n=10, тогда m=1100110011 (остальные цифры мантиссы отброшены в результате округления).

Пусть n=12, тогда m=110011001101 (последняя цифра изменилась с 0 на 1 при округлении).

Пусть n=13, тогда m=1100110011010 (две последние цифры изменились при прибавлении 1).



Упражнение 36. Подумайте, какие ошибки могут возникнуть при умножении и делении чисел в формате с плавающей запятой.

Ответ. Получение не представимого в используемом формате порядка числа, как положительного, так и отрицательно. Это так называемая ситуация «арифметического переполнения».


Итоговые творческие задания


Упражнение 37. Напишите программу, переводящую число из любой системы счисления в любую другую.

Упражнение 38. Напишите программу, которая переводит десятичное число в машинное представление с плавающей запятой (короткое вещественное).

Упражнение 39. Напишите программу, иллюстрирующую умножение двух знаковых целых числа.

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

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





Формат

Общая длина (байт)

Знак мантиссы (бит)

Порядок (бит)

Мантисса (бит)

Смещение порядка

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

Точность в десятичной системе счисления

Особенность представления

Короткое вещественное

4

1

8

23

12710

10-42…1038

7 – 8 цифр

неявный бит F0

Длинное вещественное

8

1

10

53

102310

10-324…10308

15 – 16 цифр

неявный бит F0

Временное вещественное

10

1

15

64

1638310

10-4951…104932

19 – 20 цифр

явный бит F0

Литература


  1. Григорьев В.Л. Архитектура и программирование арифметического сопроцессора. – М.: Энергоатомиздат, 1991.

  2. Андреева Е., Фалина И. Информатика: Системы счисления и компьютерная арифметика. – М.: Лаборатория Базовых Знаний, 1999.

  3. Немнюгин С.А. Turbo Pascal. – СПб.: Питер, 1999.


Достарыңызбен бөлісу:
1   2   3   4   5   6   7




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет