Арифметика повышенной точности
При работе с микропроцессором часто выясняется, что длина слов, которыми он оперирует, недостаточна для достижения определенной точности вычислений. Так восьмиразрядный МП позволяет использовать числа в диапазоне от -128 до +127,что конечно недостаточно. Используя два восьмибитовых слова, мы можем обрабатывать числа в диапазоне от -32768 до +32767. Для решения многих задач двойной точности вполне достаточно. Повышая точность представления числа, нам требуется больше времени и памяти для их обработки, а также не решается проблема представления очень больших и очень малых чисел.
В настоящее время в составе программного обеспечения любой ЭВМ имеется пакет плавающей арифметики. Он оперирует с числами, представленными в виде чисел с плавающей точкой. Это достигается благодаря использованию представления десятичных дробей в нормализованном в виде, т.е. в виде мантиссы, значения которой простирается от 0,1 до 1 и порядка - показателя степени числа 10.
Например: 50 = 0.5 * 102
Представление числа в форме с плавающей точкой в 8 - разрядном МП (можно изобразить следующим образом):
|
1 байт |
|
2 байт |
3 байт |
4 байт |
||
|
|
|
\-------------------- мантисса (23 разряда) ------------------/ |
||||
|
|
\ ------------ знак мантиссы |
|
||||
|
\---- порядок (7 разрядов) |
|
|
||||
\------ знак порядка |
|
|
|||||
Числа представленные в таком виде имеют достаточный диапазон, приемлемый для решения широкого круга задач по вычислениям и управлению объектами. Но, за все надо платить, в данном случае платить за точность приходится быстродействием.
Плавающее число, представленное с двойной точностью, занимает 8 байт
Вычисления в плавающей арифметике выполняются достаточно долго.
Тип переменной |
Диапазон представляемых значений |
|
положительного числа |
числа со знаком |
|
символьная – 1 байт |
0 ÷ 255 |
–128 ÷ 127 |
целая – 2 байта |
0 ÷ 65,535 |
–32,768 ÷ 32,767 |
длинная целая – 4 байта |
0 ÷ 4,294,967,295 |
–2,147,483,648 ÷ 2,147,483,647 |
“плавающая” – 4 байта |
3.4 10 -38 ÷ 3.4 10 38 |
|
“длинная плавающая” – 8 байт |
1.7 10 -308 ÷ 1.7 10 308 |
|
Практическое задание.
Выполнить простые действия над двоичными числами (каждый студент выбирает по три варианта):
вариант |
Число 1 |
Число 2 |
|
1. |
111100 |
0101 |
Сложение |
|
|
010100 |
10101 |
Умножение |
|
|
1100101 |
11 |
Деление |
|
|
010010111 |
101010 |
Вычитание |
|
|
1100110 |
1010 |
Сложение |
|
|
0101101 |
10010 |
Умножение |
|
|
01001000 |
11010 |
Деление |
|
|
101001 |
0100 |
Вычитание |
|
|
01001000 |
11010 |
Сложение |
|
|
111100 |
0101 |
Умножение |
|
|
1100101 |
111 |
Деление |
|
|
1010101 |
1010 |
Вычитание |
|
|
100010 |
11111111 |
Сложение |
|
|
010010111 |
101010 |
Умножение |
|
|
1100110 |
1010 |
Деление |
|
|
0101101 |
10010 |
Вычитание |
|
|
01001000 |
11010 |
Сложение |
|
|
101001 |
0100 |
Умножение |
|
|
01001000 |
11010 |
Деление |
|
|
111100 |
0101 |
Вычитание |
|
|
111100 |
0101 |
Сложение |
|
|
1100101 |
111 |
Умножение |
|
|
1010101 |
1010 |
Деление |
|
|
100010 |
11111111 |
Вычитание |
|
|
010010111 |
101010 |
Сложение |
|
|
1100110 |
1010 |
Умножение |
|
|
0101101 |
10010 |
Деление |
|
|
1100101 |
11 |
Вычитание |
|
|
010010111 |
101010 |
Сложение |
|
|
1100110 |
1010 |
Умножение |
Выполнить арифметические действия с числами с плавающей запятой по вариантам (каждый студент выбирает себе по два варианта):
№ варианта |
Числа с плавающей запятой |
|
|
P = 2 x=1110011-1 y=101110 |
|
|
P = 2 x=1000001101 y=1110-11 |
|
|
P = 2 x=11001110 y=100111 |
|
|
P = 2 x=1001110-11 y=100-111 |
|
|
P = 2 x=1100100110 y=1001-100 |
|
|
P = 2 x=11000101-11 y=1001-10 |
|
|
P = 2 x=1011011-101 y=11110 |
|
|
P = 2 x=1110011111 y=101-101 |
|
|
P = 2 x=1110011-11 y=110-10 |
|
|
P = 2 x=11001100111 y=11111 |
