3.19. ДРОБНЫЕ СИСТЕМЫ СЧИСЛЕНИЯ



Возьмем число 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) ----------------------------------------------------------------------


Index Prev Next