Stalker17

На Пикабу
поставил 7 плюсов и 0 минусов
Награды:
5 лет на Пикабу
192 рейтинг 0 подписчиков 0 подписок 4 поста 0 в горячем

Правильные умножители(окончание)

Чтобы уже закончить тему с умножителями.

Указанные в предыдущей теме(см. Решение головоломки про умножение ) умножители обеспечивают минимальное время выполнения, но к сожалению, трудно расширяемы. То есть для умножения трёхбитных чисел надо придумывать схему почти заново. Даже сами схемы выглядят как-то по кустарному – нет в них что ли симметричности и красоты.

Нужна какая-то ещё идея и такая идея есть. Всем известно устройство дешифратора. На входе оно имеет допустим два проводка, каждый из которых означает бит. На входе уже будет 4 провода, каждый из которых означает комбинацию 00, 01, 10 и 11. После того, как мы получили дешифрацию обоих множителей, нетрудно будет получить и каждый бит произведений в зависимости от множителей причём за один так.

Логическую схему дешифратора можно найти даже в Википедии . Мы её несколько оптимизируем с учётом наших идеальных устройств А и В так, чтобы всё выполнялось за один такт.

Итак логическая схема умножения двух чисел будет представлять из себя следующее

Первый такт (дешифрация)

a11=A(a0,a1)

a10=B(a1,a0)

a01=B(a0,a1)

a00 – нет отдельной линии.

Второй такт(получение результатов умножения)

с3=A(a01,b01) or A(a11,b11)

c2= A(a01,b10) or A(a10,b01) or A(a11,b10) or A(a10,b11)

c1= A(a11,b10)* or A(a10,b11)* or A(a10,b10)

c0=A(a11,b11)*

Где

* - дублирующие линии

A(x,y) - это устройство А, которое на входе получает значения x и y

or – закороченные на выходе провода. Так как мы помним, что по условия у нас 1 сильнее 0

Наглядно, на рисунке это будет выглядеть так.

Правильные умножители(окончание) Головоломка, Процессор, Вычисления, Умножение

Если нам надо перемножить 2 числа на 3 бита, то получим

Четыре бита

Первый такт

a11_=A(a0,a1)

a10_=B(a1,a0)

a01_=B(a0,a1)

a11=A(a2,a3)

a10=B(a3,a2)

a01=B(a2,a3)

Второй такт

a1111=A(a11_,a11)

a1110= A(a11_,a10)

a1100=B( a11* or a10* or a01*,a11_)

a0011= B( a11_* or a10_* or a01_*,a11)

Таким образом за n тактов можно дешифровать 2^n битов.

Получение же результата после дешифровки всегда занимает 1 такт.

Итого, 32 битное умножение будет занимать 6 тактов. А 64 битное – 7 тактов.

Расплатой будет конечно огромное количество элементов, поэтому увы, данную методику всё же надо сочетать с традиционной – суммированием.

Показать полностью 1

Решение головоломки про умножение

Забыл, что оказывается так и не опубликовал ответ на свою головоломку.

Вот её условия  -  Небольшая головоломка времён ламп и первых транзисторов.


К сожалению, к своему стыду я не написал, а что будет, если закоротить выходы с 0 и единицей. В то время как правильный ответ, как раз это использует. В своей задаче я неявно подразумевал, что «выход 1» сильнее «выхода 0», то есть «выход 0» , это что-то вроде заземления через сопротивления. Если выходное устройство не пропускает ток, то и будет 0, а пропускает, тогда будет 1. Соответственно, если закоротить два выхода двух идеальных устройств мы получим 1.


Впрочем, если 0 сильнее, тоже ничего страшного. Просто схема будет несколько другая, но она будет выполнять свои действия за то же число тактов. Для предложенного же варианта есть два решения. Одно решение я сразу записал, когда опубликовал задание, второе нашёл чуть позже, когда хотел написать статью с ответом, но там и не написал.


Итак, ниже картинки схемы. Как видим, они сильно отличается от классической, представленной в учебниках - умножение через суммирование. Скорее тут что-то вроде таблицы умножения.

Оба варианта схемы выполняют свою работу за два такта. Домашнее задания для любителей головоломок – за сколько тактов будет минимально отрабатывать схема, которая перемножает два трёхбитных числа?

Решение головоломки про умножение Головоломка, Логическая задача
Решение головоломки про умножение Головоломка, Логическая задача
Показать полностью 2

Дурак ,это надолго

Решил я как-то в магазине М-Видео купить сушилку для яблок. Покупал я её в магазине. Найдя подходящую , стал радостно использовать её в деле. Прошло три недели. Сушилка внезапно перестала выполнять свою основную функцию то есть греть. Сдать легко товар уже было нельзя, для гарантийного ремонта надо было возиться. Ладно, думаю, хрен с ними, буду покупать в других магазинах.


Прошло несколько лет… Понадобилась мне ещё кое-какая вещь. Дай, думаю, куплю её в МВидео. На этот раз с доставкой. Тем более сумма покупки небольшая, где-то 2200 рублей. И сервис у них оказался хороший. За час до доставки предупреждают, вопросы уточняют. Казалось бы радуйся. Итак, привезли , что я заказывал. Посмотрел товар, вроде подвохов нет. Перед тем, как привезли, я положил в кошелёк 3 бумажки по 2000 рублей(так как я лох, то много наличности не ношу, вдруг чего) . Приехал курьер, я ему дал 2500 рублей, он конечно же говорит , что 300 рублей нет. Потом всё-таки пообещал посмотреть у водителя. Я ему даю бумажку по 2000 и по 500, после чего он приносит сдачи. На этом , довольные друг другом расстаёмся. После чего я смотрю в кошелёк и нахожу там только лишь одну бумажку по 2000 рублей. Скорее всего две бумажки слиплись и были поданы курьеру по цене одной. Впрочем , человек, который даёт две бумажки вместо одной может с таким же успехом положить две бумажки вместо трёх изначально, а то и вовсе выронить :-) .


Вот так я дважды потерял деньги с одним и тем же магазином(с другими так не было) . И в обоих случаях магазин не виноват, а виноват я - первый раз не пошёл качать права с гарантийным ремонтом, а второй и вовсе добровольно отдал большую сумму, хотя меня к этому не принуждали, не гипнотизировали и .т. д. В общем теперь понятно , почему некоторых обувают дважды, трижды и бесконечно. Потому, что сам такой же.

Показать полностью

Небольшая головоломка времён ламп и первых транзисторов.

Для любителей решать головоломки вот небольшая головоломка в стиле инженеров полувековой давности. Пусть есть два устройства A и B . Устройство A выдаёт "1" если на входе 1 и входе 2 одновременно тоже единица. В противном случае она на входе выдаёт 0 . Достоверное значение на выходе получается через 1 такт. Устройство B выдаёт "1" если на вход 1 подаётся "0", а на вход 2 подаётся "1". Устройства считаются идеальными - не требуют повторителей и т.д. Допустим у нас есть 2 входных провода a0 и b0. Мы ходит перемножить a0*b0 , понятно, что подключаем эти два провода к устройству A и на выходе получаем результат перемножения. За 1 такт. Теперь вопрос в студию. Пусть есть два двухбитных числа, которые подаются по проводу a0 ,a1 и b0,b1 , на выходе у нас провода c0,с1,с2,с3 (ну допустим c3 младший разряд, а с0 - cтарший, но кому удобнее может и наоборот). Комбинируя провода и устройства A,B нужно получить результат вычисления за наименьшее количество тактов(число устройств не ограничено , но лучше меньше). Головоломка где-то на полчаса , если не подсматривать в учебники, интернет и т.д.
Отличная работа, все прочитано!