Я не вижу, что не так с RealDigits.
rd=RealDigits[0.1,2]
дает хорошее двоичное расширение:
(* out:
{{1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
1, 0, 0, 1, 1, 0, 1, 0}, -3}
*)
проверка:
rd[[1]].Table[1/2^(n - rd[[2]]), {n, Length[rd[[1]]]}]
(* out: 3602879701896397 / 36028797018963968, which is 0.1*)
Второй элемент вывода RealDigit
сообщает вам местоположение первого элемента по отношению к десятичной запятой.Итак, для реального г, 0<r<1
ваш bi = rd[[1,i-rd[[2]]]
.