Информация и данные

А у меня число не целое

Показывать лекцию целиком

Если X – целое число, то его можно записать в любой позиционной системе счисления

N = ck ck-1 ck-2… c0

Запись содержит k+1 цифр системы счисления (k >= 0)

Базисное соотношение определяет смысл этой записи:

N = ck * pk + ck-1 * pk-1 + … + c1 * p1 + c0 * p0 (*)

Пусть X – дробное число. Например, X = 25, 52

Можно ли дробное число записать в любой позиционной системе? Если да, то существует ли алгоритм перевода дробного числа из P в Q?

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

X = [X] + {X}, где {X} = 0,c1c2…ck

Для целой части числа X будем использовать обозначение [X], для дробной –{X}.

С целыми числами задача решена, поэтому займемся дробными числами.

Вначале пример записи дробного числа в десятичной системе:

X = 0,52 = 5 * 10-1 + 2* 10-2

В любой позиционной системе счисления для дробных чисел справедливо базисное соотношение:

X = c1 * p-1 + c2* p-2 + … ck * p-k (**)

Примеры

0,112 = ? + ? = 0, 7510;

0,113 = 1/3 + 1/9 = 4/910 = 0,44444444… = 0,(4) 10;

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

Для понимания обратного перевода из десятичной системы в систему с основанием P запишем соотношение (**) в следующем виде:

X = p-1 *(c1 + c2* p-1 + … ck * p-k+1) (***)

При разборе целого числа мы последовательно использовали две замечательные операции – div и mod – деление целого числа нацело и взятие остатка от деления нацело. При работе с дробными числами аналогично применяются две не менее замечательные операции обратные по отношению к делению – [Y] и {Y} - взятие целой части и взятие дробной части от результата умножения дробного числа на основание системы счисления.

Первая цифра c1 вычисляется как [X * p]. После этого следует вычислить новое значение X, равное {X * p}. Когда следует заканчивать процесс получения цифр? При работе с целыми числами все было ясно, - процесс заканчивался при нулевом результате операции деления нацело. Для дробных чисел процесс заканчивается, когда дробная часть числа становится равной нулю. Но этот критерий не всегда применим, поскольку дробь в новой системе может быть бесконечной периодической дробью. Как правило, в таких случаях договариваются о переводе дробного числа с заданной точностью, указывая, сколько знаков следует сохранить в дробной части числа, записанного в системе P.

Пример: Перевести число 0,43210 в двоичную систему, сохранив 6 цифр:

0,432 * 2 = 0,864; c1 = [0,864] = 0; N = {0,864} = 0,864;

0,864 * 2 = 1,728; c2 = [1,728] = 1; N = {1,728} = 0,728;

0,728 * 2 = 1,456; c3 = [1,456] = 1; N = {1,456} = 0,456;

0,456 * 2 = 0,912; c4= [0,912] = 0; N ={0,912} = 0,912;

0,912 * 2 = 1,824; c5 = [1,824] = 1; N ={1,824} = 0,824;

0, 824* 2 = 1,648; c6 = [1,648] = 1; N ={1,648} = 0,648;

0,43210 = 0,0110112

Для перевода дробного числа из системы P в систему Q, то, как обычно, можно воспользоваться десятичной системой: P => 10 => Q

Для систем счисления, связанных соотношением P = Qm, действует правило независимого перевода цифр. Для системы Q группа из m цифр записывается одной цифрой системы P. При обратном переводе цифра системы P группой из m цифр системы Q. Разбиение на группы начинается с левого конца - со старшей цифры дроби.

Пример: Перевести число 0,1AF16 в двоичную систему:

0,1AF16 = 0,0001101011112

Пример: Перевести число 0,0001101011112 в восьмеричную систему:

0,0001101011112 = 0, 06578

Заметьте, в этом случае перевод осуществляется без потери точности.

Задачи для самостоятельной работы

  • Число 0,1223 переведите в десятичную систему.
  • Число 22,2345 переведите в десятичную систему.
  • Число 0,10112 переведите в десятичную систему.
  • Число 0,12210 переведите в двоичную систему.
  • Число 50,0510 переведите в двоичную систему.
  • Число 0,1АF16 переведите в двоичную систему.
  • Число 0,5768 переведите в шестнадцатеричную систему.
  • Что больше 0,112 или 0, 6210?
  • Запишите в десятичной системе результат сложения 0, 11012 + 0, AF16
  • Число 0,101111000112 переведите в десятичную, восьмеричную и шестнадцатеричную систему.
  • Вернуться к учебному плану