Вещественное число, в общем случае содержащее целую и дробную часть, всегда можно представить в виде суммы целого числа и правильной дроби. Поскольку в предыдущем параграфе проблема записи натуральных чисел в различных системах счисления уже была решена, можно ограничить рассмотрение только алгоритмами перевода правильных дробей. Введем следующие обозначения: правильную дробь в исходной системе счисления р будем записывать в виде 0, Yр, дробь в системе q - 0, Yq, а преобразование - в виде 0, Yp → 0, Yq. Последовательность рассуждений весьма напоминает проведенную ранее для натуральных чисел. В частности, это касается рекомендации осуществлять преобразование через промежуточный переход к 10-ной системе, чтобы избежать необходимости производить вычисления в «непривычных» системах счисления, т.е. 0, Yp → 0,Y10 → 0,Yq. Это, в свою очередь, разбивает задачу на две составляющие: преобразование 0, Yр → 0, Y10 и 0, Y10 → 0, Yq, каждое из которых может рассматриваться независимо.
Алгоритмы перевода 0,Y10 → 0,Yq выводится путем следующих рассуждений. Если основание системы счисления q, простая дробь содержит n цифр и bk - цифры дроби (1 ≤ k ≤ п, 0 ≤ bk ≤ q -1), то она может быть представлена в виде суммы:
Часть дроби от разряда i до ее конца обозначим εi и примем εn = bn/q (очевидно, ε1 = О, Yq); тогда в (4.5) легко усматривается рекуррентное соотношение:
Если вновь позаимствовать в PASCAL'e обозначение функции - на этот раз trunc, производящая округление целого вещественного числа путем отбрасывания его дробной части, то следствием (4.6) будут соотношения, позволяющие находить цифры новой дроби:
Соотношения (4.7) задают алгоритм преобразования 0, Y10 → 0, Yq:
1) умножить исходную дробь в 10-ной системе счисления на q, выделить целую часть - она будет первой цифрой новой дроби; отбросить целую часть;
2) для оставшейся дробной части операцию умножения с выделением целой и дробных частей повторять, пока в дробной части не окажется 0 или не будет достигнута желаемая точность конечного числа (exact); появляющиеся при этом целые будут цифрами новой дроби;
3) записать дробь в виде последовательности цифр после ноля с разделителем в порядке их появления в п. (1) и (2).
Блок-схема алгоритма представлена на рис.4.2. Цикл перевода заканчивается либо в том случае, когда окажется εi+1 = 0, либо последовательность действий повторится наперед заданное число раз (значение константы ех), которое совпадает с количеством значащих цифр в дробной части.