http://neonohoret.livejournal.com/ (
neonohoret.livejournal.com) wrote in
useless_faq2011-07-15 05:55 pm
![[identity profile]](https://www.dreamwidth.org/img/silk/identity/openid.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Математическое
После ВУЗа матиматика успела залечь в спячку где-то далеко на подкорке, но пару месяцев назад в комментариях всплыла тема про системы счисления.
Мне не понятно было тогда и не совсем понятно сейчас, почему при обучении переводу из одной системы в другую используют различные алгоритмы и методы, когда, хотя в случае с десятичной системой всё можно привести к общему виду.
То есть формулу для перевода из любой системы в десятичную из десятичной в любую я на первом курсе вывел на коленке чисто эмперически:

(p и q - основания систем счисления, [ ] - взятие целой части)
P.S. Алгоритмы, понятное дело, экономят машинное время, но как же красота и завершенность?
Мне не понятно было тогда и не совсем понятно сейчас, почему при обучении переводу из одной системы в другую используют различные алгоритмы и методы, когда, хотя в случае с десятичной системой всё можно привести к общему виду.
То есть формулу для перевода из любой системы в десятичную из десятичной в любую я на первом курсе вывел на коленке чисто эмперически:
(p и q - основания систем счисления, [ ] - взятие целой части)
P.S. Алгоритмы, понятное дело, экономят машинное время, но как же красота и завершенность?
no subject
Перевод систем счисления бывает двух видов: "любая - родная" и "любая - любая". Под "родной" понимается система, в которой компьютер складывает и умножает - будь она двоичной, фибоначчиевой или ещё какой-то. Первое употребляется чаще: всегда, когда надо вывести десятичное число на экран, вызывается именно процедура перевода чисел из внутреннего формата компьютера в десятичный. Итак, ОДИН: во внутреннем формате нет цифр. И нет команды "вытащить из числа третью цифру". Можно сложить, вычесть, умножить и поделить. Целиком.
ДВА. Теперь поговорим о переводе из любой в любую. Обычно такое, без перевода в родную, делают для очень длинных чисел, которых никакой регистр не вместит. При вычислении по вашей формуле сложность кубическая: для каждой цифры нужно делить на длинное число, операция квадратичная, к тому же программирующаяся очень тяжело. Длина числа вдвое - объём работы в восемь раз. Если сделать наскоком - просто в лоб выполнять операции в одной из систем счисления - нам потребуются совмещённая операция "умножение-сложение" с коротким множителем (long + long*short) и деление с остатком, снова-таки на короткое число. Операции элементарные, а сложность всего лишь квадратичная.
no subject