Перевод дробных чисел из одной системы счисления в другую
Вещественное число, в общем случае содержащее целую и дробную часть, всегда можно представить в виде суммы целого числа и правильной дроби. Поскольку в предыдущем разделе проблема записи натуральных чисел в различных системах счисления уже была решена, можно ограничить рассмотрение только алгоритмами перевода правильных дробей. Введем следующие обозначения: правильную дробь в исходной системе счисления p будем записывать в виде 0, Yp, дробь в системе q — 0, Yq, а преобразование — в виде 0, Yp → 0, Yq. Последовательность рассуждений весьма напоминает проведенную ранее для натуральных чисел. В частности, это касается рекомендации осуществлять преобразование через промежуточный переход к десятичной системе, чтобы избежать необходимости производить вычисления в "непривычных" системах счисления, т. е. 0, Yp → 0, Y 10 →0, Yq. Это, в свою очередь, разбивает задачу на две составляющие: преобразование 0, Yp → 0, Y 10 и 0, Y 10 →0, Yq, каждое из которых может рассматриваться независимо. (Страница41) Алгоритмы перевода 0, Y10 → 0, Yq выводятся путем следующих рассуждений Если основание системы счисления q, простая дробь содержит n цифр, и b k – цифры дроби (1<b k <n, 0<bk<п-1), то она может быть представлена в виде суммы:
Часть дроби от разряда i до ее конца обозначим
Если вновь позаимствовать в PASCAL обозначение функции — на этот раз trunc, производящей округление целого вещественного числа путем отбрасывания его дробной части, то следствием (3.6) будут соотношения, позволяющие находить цифры новой дроби:
Соотношения (3.7) задают алгоритм преобразования: 0, Y 10 → 0, Yq: 1. Умножить исходную дробь в десятичной системе счисления на q, выделить целую часть — она будет первой (старшей) цифрой новой дроби; отбросить целую часть. 2. Для оставшейся дробной части операцию умножения с выделением целой и дробных частей повторять, пока в дробной части не окажется 0 или не будет достигнута желаемая точность конечного числа: появляющиеся при этом целые будут цифрами новой дроби. 3. Записать дробь в виде последовательности цифр после нуля с разделителем в порядке их появления в пп. 1 и 2. Пример 3.3 Выполнить преобразование 0, 37510 → 0, Y2 • Результат — на рис. 3.2., Таким образом, 0, 37510 → 0, 0112 Рис. 3.2. Результат выполнения примера 3.3 Перевод 0, Yp → 0, Y 10, как и в случае натуральных чисел, сводится к вычислению значения формы (3.5) в десятичной системе счисления. Например: 0, 0112=0*2 - 1+1*2 - 2+1*2 - 3=0+0, 25+0, 125=0, 37510. Следует сознавать, что после перевода дроби, которая была конечной в исходной системе счисления, она может оказаться бесконечной в новой системе. Соответственно, рациональное число в исходной системе может после перехода превратиться в иррациональное. Справедливо и обратное утверждение: число иррациональное в исходной системе счисления в иной системе может оказаться рациональным. Пример 3.4 Выполнить преобразование 5, 3(3)10 → Y 8. Перевод целой части, очевидно, дает: 510=123. Перевод дробной части: 0, 3(3)10 → 0, 1. Окончательно: 5, 3(3)10 → 12, 13. Как уже было сказано, значение целого числа не зависит от формы его представления и выражает количество входящих в него единиц. Простая дробь имеет смысл доли единицы, и это "дольное" содержание также не зависит от выбора способа представления. Другими словами, треть пирога остается третью в любой системе счисления. 3.2.3. Перевод чисел между системами счисления 2 ↔ 8 ↔ 16 Интерес к двоичной системе счисления вызван тем, что именно она используется для представления чисел в компьютере. Однако двоичная запись оказывается громоздкой, поскольку содержит много цифр и, кроме того, плохо воспринимается и запоминается человеком из-за зрительной однородности (все число состоит из нулей и единиц). Поэтому в нумерации ячеек памяти компьютера, записи кодов команд, нумерации регистров и устройств и пр. используются системы счисления с основаниями 8 и 16. Выбор именно этих систем счисления обусловлен тем, что переход от них к двоичной системе и обратно осуществляется, как будет показано далее, весьма простым образом. Двоичная система счисления имеет основанием 2 и, соответственно, две цифры: 0 и 1. Восьмеричная система счисления имеет основание 8 и цифры 0, 1,..., 7, Шестнадцатеричная система счисления имеет основание 16 и цифры 0, 1,..., 9, А, В, С. D, E, F. При этом знак A является шестнадцатеричной цифрой, соответствующей числу 10 в десятичной системе, В16=1110, С16=1210, D16=1310, Е16=1410 и. F16=1510. Другими словами, в данном случае A,..., F — это не буквы латинского алфавита, а цифры шестнадцатеричной системы счисления. Докажем две теоремы [12]. Теорема 1. Для преобразования целого числа Zp → Zq в том случае, если системы счисления связаны соотношением q=pr, где r— целое число, большее 1, достаточно Zp разбить справа налево на группы по rцифр и каждую из них независимо перевести в систему q. Доказательство. Пусть максимальный показатель степени в записи числа p по форме (3.1) равен k- 1, причем, 2r> k- 1>r. Вынесем множитель pr из всех слагаемых, у которых j≥;r. Получим: где Таким образом, r-разрядные числа системы с основанием p оказываются записанными как цифры системы с основанием q. Этот результат можно обобщить на ситуацию произвольного k- 1>r— в этом случае выделятся не две, а больше (m) цифр числа с основанием q. Очевидно, Zq =(bm...b0) q. Теорема 2. Для преобразования целого числа Zp→Zq в том случае, если системы счисления связаны соотношением p=qr, где r— целое число, большее 1, достаточно каждую цифру Zp заменить соответствующим r - разрядным числом в системе счисления q, дополняя его при необходимости незначащими нулями слева до группы в rцифр. Доказательство. Пусть исходное число содержит две цифры, т. е. Для каждой цифры справедливо: 0<a i <p-1 и поскольку p=qr, 0≤ ai≤qr -1, то в представлении этих цифр в системе счисления q максимальная степень многочленов (3.1) будет не более r -1 и эти многочлены будут содержать по r цифр: Тогда причем число Zq содержит 2r цифр. Доказательство легко обобщается на случай произвольного количества цифр в числе Zp.
|