Форум «Всё о Паскале» _ Математика _ Кибиричная система счисления
Автор: OCTAGRAM 10.12.2016 10:14
Не секрет, что в мире компьтеров нередко принято измерять величины степенями двойки, а не 10, и многие программы стремятся отображать значения в «честных» мегабайтах, терабайтах, которые больше своих десятичных аналогов. При этом есть большой недостаток: такая «честность» достигается в ущерб точности.
Я в FAR Manager нажал F3 на папке и увидел «48 М» в строке статуса. Нажал Insert и увидел точное десятичное значение «50 510 690». Ни то, ни другое меня не вполне устраивали, поэтому я думал, как бы всё же совместить «честность» с точностью.
Как можно видеть, эта система счисления хорошо передаёт величину. 750' — это три четверти от 1'000', а 125' — одна восьмая. И если вы видите в кибиричной системе запись 4'851'964', вы не сильно ошибётесь, если округлите на глаз это до 4,85 Миб. Для сравнения, в шестнадцатеричной системе счисления 210 вообще не является единицей с нулями.
Кибиричная система счисления — это 1024ричная система счисления и её особое представление в десятичных цифрах. «Киби» — это https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B8%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8. Кило = 1000, киби = 1024. Вот как раз хоть здесь пригодилась, потому что «1024ричная» тяжело произносить.
В кибиричной системе счисления 1024 истинных цифр, но представляются они группами по 3 цифры. Смешивать их нельзя, поэтому обязательным является разделение, например, апострофами. И в конец, чтобы отличалось от десятичной системы счисления, дописывается апостроф, что в десятичной точно не делается. Последовательностей цифр от 000 до 999, если использовать только цифры от 0 до 9, хватает только на 1000, а ещё остаётся 24. Если оставшиеся 24 равномерно вставить внутрь, они собой разрежут 1000 на 25 ровных частей по 40. На границе разрезов девятка в следующий разряд не переносится, а сначала переходит в цифру «десять» (записывается буквой A, как в шестнадцатеричной), а только потом — в следующий разряд.
Идею кибиричной системы счисления можно выразить так: 1000 = 40 * 25 1024 = (40 + 1) * 25 - 1 Совсем по-научному — было бы выразить через декартовы произведения, отношения и изоморфизмы.
Кстати, отброшенная последовательность — это 99A'. Вместо неё после 999' идёт сразу 1'000'.
В этой системе счисления можно даже производить арифметические операции. Достаточно декодировать каждую истинную цифру, остановиться на этом, а дальше производить над ними операции, как в любой другой позиционной системе счисления. Придётся брать остаток и частное от деления на 1024, но этим всё и ограничится, по модулю 1 048 576 уже необходимость не возникает. Для тех, кто учил таблицу умножения для десятичной системы счисления, а для шестнадцатеричной — не учил, то есть, практически для всех, в кибиричной системе счисления в конечном итоге научиться считать будет проще, чем в более известной шестнадцатеричной.
Числа в таком представлении я генерировал на Аде и Джаваскрипте и могу поделиться кодом на этих языках:
http://p2p.toom.su/fs/hms/L4CCIGBCH537KH4HQJHBQMVX272WU6FQEOXRK2Y/Docs/ можно посмотреть, как бы могло выглядеть всё, если перейти на кибиричную систему счисления.