roboforum.ru

Технический форум по робототехнике.

[Задача] Реверсная двоичная арифметика

[Задача] Реверсная двоичная арифметика

blindman » 18 мар 2010, 07:25

Есть процессор, работающий с 16-разрядными двоичными числами без знака. Операция R(x) меняет порядок следования битов в числе x на обратный: R(10000000000000002) = 00000000000000012, R(10100000000000002) = 00000000000001012, R(01010000000000012) = 10000000000010102, и т.д. Очевидно, что R(R(x)) = x.

Дано некое число a. Необходим эффективный алоритм, позволяющий для произвольного x сравнить а с R(x). Сравнение будет выполняться в цикле. Перед входом в цикл можно произвести какие-то преобразования над a, но в теле цикла должен быть минимальный объем вычислений. Процессор позволяет вычислить R(x) за 1 команду. Алгоритм
Код: Выделить всёРазвернуть
цикл
  получить x
  найти R(x)
  сравнить R(x) с a
  использовать-результат-сравнения
конеццикла

считается недостаточно эффективным. Идеальный алгоритм:

Код: Выделить всёРазвернуть
как-то-преобразовать а в b
цикл
  получить x
  выполнить какую-то-быструю-операцию(x,b) <--- CMP, AND, OR, XOR, фиг его знает
  использовать-результат-предыдущей-операции
конеццикла


Собственно задача - придумать как "как-то-преобразовать а в b" и какую использовать "какую-то-быструю-операцию" ? :D

Re: [Задача] Реверсная двоичная арифметика

blindman » 18 мар 2010, 08:13

Задачу я решил, если кому интересно - подумайте, предлагайте варианты. Потом я свой напишу

Re: [Задача] Реверсная двоичная арифметика

blindman » 18 мар 2010, 08:15

Опа... поторопился... похоже мое решение неверное

Re: [Задача] Реверсная двоичная арифметика

=DeaD= » 18 мар 2010, 08:18

Сравнить то в каком смысле? :) хоть не "!=" ? я так понимаю нужна операция "<"?

Re: [Задача] Реверсная двоичная арифметика

Michael_K » 18 мар 2010, 08:19

задача какая-то... некорректная, имхо.
во-первых, непонятно, что значит "сравнить",
во-вторых, "придумать какую-то быструю операцию" - это что?
Ну вот классная операция:
"сравнить, поделить, и подпрыгнуть" - исполняется за одну шестую такта.

Re: [Задача] Реверсная двоичная арифметика

blindman » 18 мар 2010, 08:20

меньше/больше или равно

Re: [Задача] Реверсная двоичная арифметика

blindman » 18 мар 2010, 08:22

Michael_K писал(а):"придумать какую-то быструю операцию" - это что?

операция, которая выполнится за 1 команду процессора. Конкретнее - Parallax Propeller.

Re: [Задача] Реверсная двоичная арифметика

blindman » 18 мар 2010, 08:24

Казнить нельзя помиловать :)
Сравнить - значит определить "меньше" или "больше или равно"

Re: [Задача] Реверсная двоичная арифметика

Michael_K » 18 мар 2010, 08:30

Если задача практическая, то может быть проще анроллить первый цикл по два действия скажем,
не сэкономите на "выдуманной операции", зато сэкономите на цикле... :pardon: :oops:

Re: [Задача] Реверсная двоичная арифметика

blindman » 18 мар 2010, 08:34

Количество итераций неопределено, важно минимальное время выполнения итерации цикла (интервал между сравнениями)

Re: [Задача] Реверсная двоичная арифметика

Michael_K » 18 мар 2010, 08:41

не... два такта в один упихать... наверное не получится :pardon:

Re: [Задача] Реверсная двоичная арифметика

=DeaD= » 18 мар 2010, 08:59

Решения нет, очевидно результат искомой операции зависит сначала от младшего бита (x), потом от второго и т.п.
Очевидно такой атомарной операции случайно подходящей быть не может. Хотя конечно система команд Propeller'а мне незнакома :)

Re: [Задача] Реверсная двоичная арифметика

blindman » 18 мар 2010, 09:41

Поотрывать бы руки тем кто располагает ноги в чипах произвольным образом :x Ну неужели трудно додуматься - в процессоре нумеровать по часовой стрелке, в АЦП - против

Re: [Задача] Реверсная двоичная арифметика

Michael_K » 18 мар 2010, 10:11

blindman писал(а):Поотрывать бы руки тем кто располагает ноги в чипах произвольным образом :x Ну неужели трудно додуматься - в процессоре нумеровать по часовой стрелке, в АЦП - против

:) А вы их на разные стороны платы ставьте...
Вообще, посыл странный :pardon:

Re: [Задача] Реверсная двоичная арифметика

=DeaD= » 18 мар 2010, 10:22

Разные стороны платы - это двухсторонний монтаж в дальнейшем, а это лишние деньги и гемор.


cron
Rambler\'s Top100 Mail.ru counter