Если у вас есть «повторяющийся десятичный» в базе 2, и вы знаете, что
повторяя его часть, можно преобразовать его в точный
рациональное число в обозначениях p / q (где p и q - целые числа).
Затем вы можете использовать деление для преобразования этого числа в обычную десятичную запись
столько цифр точности, сколько вы хотите.
(В некоторых случаях вы даже можете написать точное десятичное значение.)
Первый шаг - разделить двоичное число на его
повторяющиеся и неповторяющиеся части.
На самом деле мы хотим три вещи: неповторяющаяся часть,
первое вхождение повторяющегося блока цифр,
и длина повторяющегося блока цифр.
Предположим, например, что число 1.0001100110011 ... (двоичное),
где последний 0011 повторяется бесконечно.
Мы можем разбить это следующим образом:
неповторяющаяся часть равна 1,0 (двоичная),
первое вхождение повторяющегося блока составляет 0,00011 (двоичный),
и длина повторяющегося блока составляет четыре двоичные цифры.
Повторяющаяся часть двоичного числа представляет собой геометрический ряд
и может быть оценена с использованием стандартной формулы для такой серии:
a + a * r + a * r ^ 2 + a * r ^ 3 + ... = a / (1 - r ).
Чтобы применить эту формулу к повторяющимся цифрам, значение a равно
просто значение первого вхождения повторяющегося блока.
Если повторяющаяся часть имеет n двоичных цифр, соотношение r в формуле
равно 1/2 ^ n и 1 / (1 - r ) = (2 ^ n ) / (2 ^ n - 1).
Для примера 1.00011011011 ... (двоичный),
из повторяющейся части имеем a = 0,00011 (двоичный) = 3/32
и n = 4, поэтому 1 / (1 - r ) = (2 ^ 4) / (2 ^ 4 - 1) = 16/15.
Поэтому
a / (1 - r ) = (3/32) * (16/15) = 3/30 = 1/10,
который мы можем записать как 0,1 (десятичное число).
Неповторяющаяся часть, конечно, равна 1 (десятичной), поэтому
1,00011011011 ... (двоичный) = 1 + 0,1 (десятичный) = 1,1 (десятичный).
В этом примере десятичное представление заканчивается и является точным.
Существует много повторяющихся двоичных дробей, для которых, где нет такого десятичного представления, например,
0,01010101 ... (двоичный) = 1/3 = 0,3333 ... (десятичный).
В таких случаях вы должны либо решить округлить после некоторого числа десятичных цифр, либо найти и описать повторяющуюся последовательность десятичных цифр.