Возьмем число p - основание системы счисления 1 < p < 2
Цифры: {0, 1}
Для положительного целого числа A находим наибольшее n1 такое что
p^n1 <= A
Затем применяем эту процедуру к (A - p^n1)
итд
Собственно мы представляем целые числа в системе с дробным основанием
методом приближения к низу.
В принципе чем ближе p к единице тем тем больше подряд нулей между соседними
единицами т.к. неравенство p^n1 + p^n2 < p^(n1+1) должно естественно выполняться.
Удобнее всего брать основание для которого выполняется соотношение a^2 = a + 1
(но это уже получаем Систему Бергмана).
Рассмотрим СЧ с основанием равным 3/2 = 1.5
Цифры: {0, 1}
Базис:
--------------------------
7 17.0859375
6 11.390625
5 7.59375
4 5.0625
3 3.375
2 2.25
1 1.5
0 1
--------------------------
Числа:
---------------------------
0 0
1 1
2 10
3 100
4 1000
5 1100
6 10000
7 10010
8 100000
9 100001
10 100010
11 101000
12 1000000
13 1000010
14 1000100
15 1001000
16 1001001
17 1010000
18 10000000
---------------------------
Понятно что Арифметические операции сложные и приближенные.
А теперь рассмотрим СЧ с основанием 1.9
Цифры: {0, 1}
Базис:
--------------------------
5 24.76099
4 13.0321
3 6.859
2 3.61
1 1.9
0 0
--------------------------
Числа:
---------------------------
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 1000
8 1001
9 1010
10 1011
11 1100
12 1101
13 1110
14 10000
15 10010
16 10011
17 10100
18 10101
19 10110
20 11000
21 11001
22 11010
23 11011
24 11100
25 100000
---------------------------
Добавим избыточность в систему с основнием 1.5
Это позволит нам точно представить все целые числа.
Цифры: {0, 1, 2}
Базис:
--------------------------
7 17.0859375
6 11.390625
5 7.59375
4 5.0625
3 3.375
2 2.25
1 1.5
0 1
--------------------------
Числа:
---------------------------
0 0
1 1
2 2
10 1.5
11 2.5
12 3.5
20 3
21 4
22 5
100 2.25
101 3.25
102 4.25
110 3.75
111 4.75
112 5.75
120 5.25
121 6.25
122 7.25
200 4.5
201 5.5
202 6.5
210 6
211 7
212 8
220 7.5
221 8.5
222 9.5
---------------------------
По крайней мере мы сможем совместить соседние домены:
Таблица сложения:
----------------
+ | 0 1 2
---+------------
0 | 0 1 2
1 | 1 2 20
2 | 2 20 21
----------------
Например: 8 = 212
9 = 212 + 1
212 + 001 = 210 + 020 = 200 + 200 = 200 + 100 + 100 = 2000 + 100 = 2100
Проверка:
2100 = 2*3.375 + 1*2.25 = 6.75 + 2.25 = 9 все верно
Таблица умножения:
----------------
* | 0 1 2
---+------------
0 | 0 0 0
1 | 0 1 2
2 | 0 2 21
----------------
Пример:
2 * 4
2 = 2
4 = 21
21
* 2
-----
2
21
-----
212 = 8
Чтобы можно было хранить все целые числа необходимо чтобы домены пересекались.
Для этого надо так подбирать цифры - что бы они помогали связывать домен.
Таким образом для для получения целой части в старшем разряде нужна цифра:
----------------------------------------------------------------------
1.5 1+1/2 2 2*(1+1/2) = 3
1.(3) 1+1/3 3 3*(1+1/3) = 4
1.25 1+1/4 4 4*(1+1/4) = 5
----------------------------------------------------------------------
1.(6) 1+2/3 3 (?) 3*(1+2/3) = 5 - а где хранить 4? - значит 4
1.(6) 1+2/3 4 (!) 3*(1+2/3) = 5 - цифры 0..4
----------------------------------------------------------------------
1.75 1+3/4 4 (?) 4*(1+3/4) = 7 - а где хранить 5 и 6? - значит 6
1.75 1+3/4 6 (!) 4*(1+3/4) = 7 - цифры 0..7
----------------------------------------------------------------------
1.3 1+3/10 A (?) 10*(1+3/10) = 13 - надо еще 11 и 12
1.3 1+3/10 C (!) 10*(1+3/10) = 13 - цифры 0..C
----------------------------------------------------------------------
1.9 1+9/10 A (?) 10*(1+9/10) = 19 - а надо 11..18
1.9 1+9/10 I (?) 10*(1+9/10) = 19 - цифры 0..I (0..18)
----------------------------------------------------------------------